|
Posted by Schmidty on 01/24/07 18:31
On Jan 24, 10:26 am, "Schmidty" <schmi...@baronholding.com> wrote:
> On Jan 24, 9:17 am, Jerry Stuckle <jstuck...@attglobal.net> wrote:
>
> > Schmidtywrote:
> > > On Jan 24, 8:23 am, "Schmidty" <schmi...@baronholding.com> wrote:
> > >> On Jan 24, 1:26 am, Erwin Moller
>
> > >> <since_humans_read_this_I_am_spammed_too_m...@spamyourself.com> wrote:
> > >>>Schmidtywrote:
> > >>>> So if I do a $_SERVER['PHP_SELF'] in a function within a class that
> > >>>> will end the execution of that class and restart the same script? Do I
> > >>>> need to do all processing in a script before I display a page that will
> > >>>> have a $_SERVER['PHP_SELF'] action? Thanks for the help...
> > >>>> SchmidtyHi,
> > >>> Please don't toppost. It destroys the order of the conversation.
> > >>> $_SERVER['PHP_SELF'] is just a string that contains the script that is being
> > >>> executed.
> > >>> I do not understand what 'doing a $_SERVER['PHP_SELF'] in a function' means.
> > >>> But it will most probably NOT terminated the execution of the script.
> > >>> exit(); does.
> > >>> You must clearly see the difference between the server and the client
> > >>> (browser).
> > >>> Your script produces a form that will be send back to the client (=browser).
> > >>> Then your script ends.
> > >>> The form action in your example posts back to the same script (because you
> > >>> used the target for the action $_SERVER['PHP_SELF']), so if anybody presses
> > >>> submit, that form will be posted, and hence the same script will be
> > >>> executed as before.
> > >>> But the server or PHP couldn't care less, and thinks of it as just another
> > >>> call to that script.
> > >>> http-protocol is stateless, this means that NO lasting connection is build
> > >>> between the client and the server. To overcome this you must use sessions.
> > >>> And as Jerry said: connections to a database are NOT fit to store in a
> > >>> session because PHP destroys all existing connections when the script ends.
> > >>> So you'll have to rebuild your connection each invocation of a script that
> > >>> needs a database.
> > >>> Hope this helps.
> > >>> Regards,
> > >>> Erwin Moller
> > >>>> On Jan 23, 4:54 pm, Jerry Stuckle <jstuck...@attglobal.net> wrote:
> > >>>>>Schmidtywrote:
> > >>>>>> If you do a page reload with $_SERVER['PHP_SELF'] will your program
> > >>>>>> lose a mysqli connection upon the reload of the page? Would this code
> > >>>>>> work? I need to know how to carry over a connection between methods as
> > >>>>>> I am new to OOP? Thanks...
> > >>>>>> Example; ========================================
> > >>>>>> <?php
> > >>>>>> // webpage
> > >>>>>> $newsignon = new newuser();
> > >>>>>> logon();
> > >>>>>> if (isset($_POST['submit'])){
> > >>>>>> $newsignon = query("SELECT name, password FROM
> > >>>>>> database");
> > >>>>>> }
> > >>>>>> ?>
> > >>>>>> <?php
> > >>>>>> // class newuser
> > >>>>>> class newuser {
> > >>>>>> public $name;
> > >>>>>> private $passwd;
> > >>>>>> private $mysqli;
> > >>>>>> function __construct(){
> > >>>>>> include('dbconn.php');
> > >>>>>> $mysqli = new mysqli($dbnet, $dbuser, $dbpass, $dbname);
> > >>>>>> if (mysqli_connect_errno()){ printf("Can't connect to MySQL
> > >>>>>> Server. Errorcode: %s\n", mysqli_connect_error());
> > >>>>>> exit;
> > >>>>>> }
> > >>>>>> $this->mysqli = $mysqli; // is this right?
> > >>>>>> } //end constructor
> > >>>>>> function query($query){
> > >>>>>> if ($result = $this->mysqli->real_query($query)){
> > >>>>>> $result = $this->mysqli->store_result();
> > >>>>>> if($this->mysqli->error) { echo "ERROR with mysqli stored
> > >>>>>> procedure";}
> > >>>>>> } // end if
> > >>>>>> } // end function
> > >>>>>> function logon(){
> > >>>>>> echo "<form action='".$_POST['PHP_SELF']."' method='post' >";
> > >>>>>> // Would this work?
> > >>>>>> echo "<input type='text' name='user' /><br /><input
> > >>>>>> type='password' name='passwd' />";
> > >>>>>> echo "<input type='submit' value='submit' />";
> > >>>>>> } // end function
> > >>>>>> } //end classSchmidty,
> > >>>>> As I explained in comp.database.mysql, you can't. Once a page's
> > >>>>> processing is completed, all connections (and objects) are released.
> > >>>>> You can keep information like user ids, etc. in the $_SESSION variable,
> > >>>>> but not the connection. Even if you could keep the connection info in
> > >>>>> there, the connection itself will be closed.
> > >>>>> Each page is it's own little program. Any external resources opened by
> > >>>>> it are closed at the end of the page processing.
> > >>>>> --
> > >>>>> ==================
> > >>>>> Remove the "x" from my email address
> > >>>>> Jerry Stuckle
> > >>>>> JDS Computer Training Corp.
> > >>>>> jstuck...@attglobal.net
> > >>>>> ==================- Hide quoted text -- Show quoted text -Thanks Erwin
> > >> The Google Groups editor places your reponse at the top when making a
> > >> reply. I went ahead posted at the bottom for you...
>
> > >> I understand that HTTP is stateless and I have been using sessions
> > >> variables and understand that you can't carry a database connection
> > >> through either one. I was confused on what happens with an
> > >> $_SERVER['HTTP_SELF'] in a script. What I meant by "doing a
> > >> $_SERVER['PHP_SELF'] in a function" is having a page echoed in a
> > >> function and having the 'action' of that page execute a
> > >> $_SERVER['HTTP_SELF']. Does it end a mysqli connection even though you
> > >> have not exited the script? Your explanation that $_SERVER['PHP_SELF']
> > >> is just a string that contains the script that is being executed makes
> > >> sense. I wasn't sure if the connection was being terminated by the
> > >> $_SERVER['HTTP_SELF'] variable. Thanks for the help in understanding
> > >> this. :)
>
> > >>Schmidty- Hide quoted text -- Show quoted text - > Why is this not working? I keep getting this error;
> > > Fatal error: Using $this when not in object context in
> > > c:\Inetpub\glendale\network\admin.class.php on line 68
>
> > > Here is the code class code;
> > > ================================================================
>
> > > <?php
>
> > > // admin.class.php
>
> > > class admin{
> > > public $file_path;
> > > public $user;
> > > private $pass;
> > > public $mysqli;
>
> > > function __construct($user, $pass){
> > > $this->user = $user;
> > > $this->pass = $pass;
> > > $this->dbConnect();
>
> > > }
>
> > > function showNewInfo(){
>
> > > $query1 = "SELECT userID, fname, minit, lname, address, city, state,
> > > zip, phone, useremail, ctype, cnumb, exp, recdate FROM personalinfo
> > > WHERE checked = FALSE";
>
> > > if ($result = $this->mysqli->real_query($query1)){
> > > $result = $this->mysqli->store_result();
> > > if($this->mysqli->error) { echo "ERROR with mysqli stored procedure";}
> > > } // end if
>
> > > // Show info of users not updated
> > > echo "<form action='".$_SERVER['PHP_SELF']."' method='post'><table
> > > style=\"font: 14px solid #000000; border: 2px solid #CCC000;\">";
> > > echo "<tr><td colspan='2' style=\"background: #C0C0C5; text-align:
> > > center; font: 16px solid #000000;\">Credit Card
> > > Applications</td></tr>";
> > > echo "<tr><td colspan='2' style=\"background: #FFFFE0; text-align:
> > > left; font: 11px solid #000000;\">Current info in database:</td></tr>";
> > > echo "<tr><tr><td colspan='2' style=\"border: 2px solid #000000;
> > > width: 100%;\">";
>
> > > while($row = $result->fetch_assoc()){
> > > echo "<input type='checkbox' name='perinfo[]'
> > > value='".$row['userID']."' >".$row['userID']." : ".$row['lname']." -
> > > ".$row['recdate']."<br />";
> > > } // end while
> > > echo "</td></tr><tr>";
> > > echo "<td align=\"center\"><input style=\"font: 10px solid #000000;\"
> > > type=\"submit\" value=\"UPDATE INFO\" name='updatedb' /></td><td
> > > style=\"text-align: center;\"><input type=\"reset\" style=\"font: 10px
> > > solid #000000;\" value=\"RESET CHOICES\" /></td></tr></form></table>";
>
> > > $result->free();
> > > } // end function
>
> > > function dbConnect(){
> > > include('dbconn.php');
> > > $mysqli = new mysqli($dbnet, $dbuser, $dbpass, $dbname) or die("ERROR:
> > > Cannot connect to database server");
>
> > > if (mysqli_connect_errno()){ printf("Can't connect to MySQL Server.
> > > Errorcode: %s\n", mysqli_connect_error());
> > > exit;
> > > }
> > > $this->mysqli = $mysqli;
>
> > > } // end function dbConnect
>
> > > function dbClose(){
> > > $this->mysqli->close();
> > > } // end function dbClose
>
> > > function updateDB($perinfo){
> > > foreach($perinfo as $info);
> > > $query3= "UPDATE personalinfo SET checked = 'TRUE' WHERE userID =
> > > $info";
>
> > > if (isset($this->mysqli)) {echo "ERROR on mysqli";
> > > exit;}
>
> > > $result = $this->mysqli->query($query3);
> > > echo "QUERY DONE";
> > > $result->free();
> > > return true;
> > > } // end function updateDB
> > > } // end class
> > > ?>
>
> > > And here is the script that execute this
>
> > --------------------------------------------------------------------------------------------
> > > <?php
> > > print "<br />Hello <b>'$user'</b>.<br />";
> > > print "You are ";
> > > if ($type =='administrator'){
> > > $file_path = $_POST['file_path'] = '';
>
> > > // Administrators
> > > echo "an <b style='color: #FF0000;'>$type</b> and have full
> > > administration rights.<br />";
> > > $user = new admin($user, $pass);
> > > $user->showNewInfo();
> > > if (isset($_POST['updatedb'])){ admin::updateDB($_POST['perinfo']); }
> > > }
> > > End example
> > > ===============================================================
>
> > > Thanks for the help.
>
> > >Schmidty
>
> > (Top posting fixed)
>
> > Off hand, I would say your problem is in the line:
>
> > admin::updateDB($_POST['perinfo']);
>
> > This is calling the function as a class member, not as an object member.
> > The '::' syntax doesn't pass a $this variable.
>
> > Try $user->updateDB($_POST['perinfo']); instead.
>
> > If that isn't it, which line gets the error?
>
> > --
> > ==================
> > Remove the "x" from my email address
> > Jerry Stuckle
> > JDS Computer Training Corp.
> > jstuck...@attglobal.net
> > ==================- Hide quoted text -- Show quoted text -Jerry,
>
> I went ahead and rewrote these two scripts and actually did what you
> suggested before I saw your reply (I'm learning slowly but surely) and
> it did work but now I am up against a problem with the mysqli
> connection. I am getting the error (per my validation) "ERROR: Could
> not execute query." from the third line in the function;
>
> Code Example ===================================================
>
> public function updatedb($userID){
> if (!$this->mysqli){ echo "ERROR: Database connection lost.";
> $query2 = "UPDATE personalinfo SET checked = 'TRUE' WHERE userID =
> '$userID'";
> $this->mysqli->query($query2) or die("ERROR: Could not execute
> query.");
> } // end function
>
> End Example ====================================================
>
> I had constructed the dbConnect() function when the 'admin' class was
> executed. Why does it not carry the mysqli connection? I had assigned a
> property with the connection variable in the dbConnect() method. What
> happened?
>
> Code Example ===================================================
>
> public function dbConnect(){
> include('dbconn.php');
> $mysqli = new mysqli($dbnet, $dbuser, $dbpass, $dbname);
>
> if (mysqli_connect_errno()){ printf("Can't connect to MySQL Server.
> Errorcode: %s\n", mysqli_connect_error());
> exit;
> } // end if
> return $this->mysqli=$mysqli;
> } // end function
>
> End Example =====================================================
>
> Did I do right with the line 'return $this->mysqli=$mysqli;' to set the
> connection variable to be used later in the function 'updatedb()'?
>
> Hope the examples above help and thanks for any suggestions you might
> provide. :)
>
> Schmidty
Jerry,
I was able to figure it out quite easily!! The $query2 statement in the
first code example should read "UPDATE personalinfo SET checked = TRUE
WHERE userID = '$userID'".
The single quotes around the TRUE should be removed! My bad...
Thanks for your suggestions and help in the previous postings. :)
Schmidty
Navigation:
[Reply to this message]
|