C.R.Vegelin wrote:
C.R.Vegelin wrote:
I have various PHP scripts that use the same database.
The startup script default.php sets the connection once for all the scripts. This connection is set in $_SESSION to make it a global variable for all scripts. When switching from page default to page faq, I get errors I can't explain. Any help is highly appreciated.
TIA, Cor
 default.php
----------------
<?php
session_start();
require("menu.php");

<snip>

faq.php
-----------
<?php require("menu.php");

The first two lines give it away ;)

You're missing a session_start().


--
Postgresql & php tutorials
http://www.designmagick.com/


Thanks Chris,

I included session_start(); as first line in faq.php, but now I get other warnings /errors:
Warning: mysqli_query() [function.mysqli-query]: Couldn't fetch mysqli
   in line "$result = mysqli_query($link, $sql);"
Warning: mysqli_error() [function.mysqli-error]: Couldn't fetch mysqli
in line "if (!$result) { echo "Can't execute query ($sql): " . mysqli_error($link); exit; }

Actually - shoot me for not noticing this before.

You can't store a resource or connection in the session.

You have to recreate your connection in each page.

See http://php.net/session .

--
Postgresql & php tutorials
http://www.designmagick.com/


Hi Chris,

I recreated a new connection in faq.php and it's working now.
I had the impression that 1 connection could last during a user session,
but apparently a user session may need many connections.

Thanks again, Cor

Remember that the http protocol is stateless. Every request made is a new connection to the server. It's due to extra technologies like cookies (and in this case sessions) that some form of 'state' can be maintained. However, because there is no communication between client and server unless the client makes a request you can never actually determine the _current_ status of your session, only in retrospect you can. If a user makes a request, you could say the session is 'in progress', however, after sending that page you don't know if it's still 'in progress' or has ended until you recieve another request, thus telling you it WAS still in progress.

Now, as for resources and connections: PHP clears up everything when it finishes sending a response to a request. This does not happen for certain very specific items which were stored away (like in a database or in a session, which is usually just a file). For a connection to be 'open' it needs to be able to communicate with both its' sides (client: your database; and the 'server': PHP), if php 'shuts down' because it finished the request, it doesn't leave anything of itself behind, and as such the 'server' of that connection also disappears, thus creating a broken link which is automatically destroyed. Of course the php engine is smart and knows this would happen, so it 'cleanly' closes the connection before disappearing to reappear again (fresh) on a next request.

hope that helps you understand,
- Tul

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to