You are here: Re: mysqli connections and oop « PHP Programming Language « IT news, forums, messages
Re: mysqli connections and oop

Posted by Schmidty on 01/24/07 18:26

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

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация