SESSION data verdwijnt.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 4 volgende »

Freek jansen

freek jansen

13/02/2012 23:06:13
Quote Anchor link
- 20 jaar ervaring als developer. compleet nieuw aangaande PHP.

ik heb 3 paginas. apache draait mysql draait, tabellen aangemaakt.
eerste pagina: form met een 10-tal input velden.
pagina twee leest de $POST waarden uit en plaatst die in $SESSION, geen probleem, lezen uit $SESSION gaat ook goed. derde pagina, kan niets meer zien van de waarden in $SESSION.

ander probleem: terug op pagina twee: INSERT statement in de tabel, of als die al bestaat UPDATE.
de statement wordt netjes op het scherm getoond als ik er een PRINT neerzet. De insert of update resulteert echter in een record met lege kolommen, m.u.v. de PK (id).

Als ik de statement van het scherm pluk en die in de MySQL console zet, wordt-ie gewoon goed in de database gezet.

Ik na veel zoeken dacht ik dat het een connectie probleem was en de verbinding geheel lokaal gehouden:
in een (1) blok: start connectie, voor statement uit, sluit connectie.

Ik kan nergens vinden of MySQL met PHP standaard autocommit uit heeft staan. Maar dat lijkt het probleem ook niet te zijn, dus ik ga ervan uit dat autocommit (zoals de standaard is) default aan staat.

anyone.... help .... please ... hear my dying voice begging..... .. ..

Toevoeging op 13/02/2012 23:07:26:

Ik heb uiteindelijk modulaire opzet gemaakt met een class voor database interactie en een voor $_SESSION handling. de code kopieren wordt nogal lang.
Heeft een van jullie misschien een hint? Komt mijn probleem bekend voor?
Gewijzigd op 16/02/2012 09:19:42 door Erik Rijk
 
PHP hulp

PHP hulp

26/12/2024 03:27:08
 
Ozzie PHP

Ozzie PHP

13/02/2012 23:22:14
Quote Anchor link
Beste Freek, je vertelt een heel verhaal maar het klinkt meer als een klaagzang dan als een concrete vraag.

Probeer eens wat relevante en concrete vragen te stellen. Niet alles tegelijk, maar stuk voor stuk. En plaats dan ook een stukje relevante code erbij. Op die manier wordt je waarschijnlijk een stuk beter geholpen.
 
- SanThe -

- SanThe -

13/02/2012 23:35:44
Quote Anchor link
$POST en $SESSION moeten een underscore hebben. Dus $_POST en $_SESSION
 
- Jim  -

- Jim -

13/02/2012 23:38:36
Quote Anchor link
Freek jansen op 13/02/2012 23:06:13:
...
pagina twee leest de $POST waarden uit en plaatst die in $SESSION, geen probleem, lezen uit $SESSION gaat ook goed. derde pagina, kan niets meer zien van de waarden in $SESSION.

Heb je session_start() ook op pagina 3 staan?
Als het allemaal losse pagina's zijn, moet je op iedere losse pagina 'session_start()' aanroepen.

Freek jansen op 13/02/2012 23:06:13:
ander probleem: terug op pagina twee: INSERT statement in de tabel, of als die al bestaat UPDATE.
de statement wordt netjes op het scherm getoond als ik er een PRINT neerzet. De insert of update resulteert echter in een record met lege kolommen, m.u.v. de PK (id).


Controleer of de query werkelijk goed is uitgevoerd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
 if(mysql_query($sql_statement))
 {

   // doe je ding ...
 } else {
   print mysql_error();
 }

?>

Het stukje foutafhandeling.

Freek jansen op 13/02/2012 23:06:13:
...
Ik kan nergens vinden of MySQL met PHP standaard autocommit uit heeft staan. Maar dat lijkt het probleem ook niet te zijn, dus ik ga ervan uit dat autocommit (zoals de standaard is) default aan staat.


CITE: "By default, autocommit mode is enabled in MySQL."
FROM: http://stackoverflow.com/questions/2950676/difference-between-set-autocommit-1-and-start-transaction-in-mysql-have-i-misse.

Freek jansen op 13/02/2012 23:06:13:
anyone.... help .... please ... hear my dying voice begging..... .. ..

I'm trying.... :p


Freek jansen op 13/02/2012 23:06:13:
....
de code kopieren wordt nogal lang.
...


Alle code willen we ook niet, alleen de relevante delen.
Hoe en waar query je??
Gebruik je foutafhandeling??
 
Freek jansen

freek jansen

14/02/2012 20:04:42
Quote Anchor link
wow, boel response. en tot mijn verbazing vrijwel direct .(tja, het was toen al mijn bedtijd) :). tanx guys.

Ozzie: als je het bericht leest staan er heel concreet twee issues beschreven: $_SESSION content en MySQL mutatie probleem.
vereenvoudigde code heb ik in dit bericht bijgevoegd.

SanThe: Ja, ik weet het. mijn pink was denk ik een beetje lui, dat de _ niet doorkwam. In de code kwam die door. Ik gebruik ook een PHP editor die syntax fouten en (deels?) onbekende functies aangeeft.

Jim: ja, ik heb consequent session_start() gebruikt. ook geprobeerd of aan het eind van de pagina session_write_close() iets uitmaakt in deze situatie. Niet dus.
de foutafhandeling voor mysql query had ik ook al maar daar rolt-ie zonder probleem doorheen.

Dat autocommit default voor MySQL uitstaat is bekend, ik vroeg mij echter af of PHP bepaalde defaults wijzigd. Blijkbaar niet dus.

bedankt voor 'trying'.


de code. Ik heb zaken vereenvoudigd en uit de classen gehaald om mijn probleem overzichtelijker te houden op het forum.

t1.php is een form. deze wordt in t2.php uitgelezen.

------ t2: --------

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php session_start(); ?>

<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="Generator" CONTENT="TextPad 4.6">
<META NAME="Author" CONTENT="?">
<META NAME="Keywords" CONTENT="?">
<META NAME="Description" CONTENT="?">
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">

<div align="center">
<form action="t3.php" method="post">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

                                                                          
       $clientid
= "9876787";            
       $_SESSION['id']      = $clientid;
       $_SESSION["name"]    = $_POST['tx_name'];
       $_SESSION["initials"]= $_POST['tx_initials'];
       $_SESSION["sex"]     = $_POST['tx_sex'];
       $_SESSION["address"] = $_POST['tx_address'];
       $_SESSION["city"]    = $_POST['tx_city'];
       $_SESSION["zip"]     = $_POST['tx_zip'];
       $_SESSION["country"] = $_POST['tx_country'];
       $_SESSION["phone1"]  = $_POST['tx_phone1'];
       $_SESSION["phone2"]  = $_POST['tx_phone2'];
       $_SESSION["email"]   = $_POST['tx_email'];

        print "<p> ";
        print_r ($_SESSION);
        print "</p>";                                                          
?>

<INPUT type='button' value='Back' onClick='javascript:history.go(-1)'>
<INPUT type='submit' value='Confirm'>

</form>
</div>
</BODY>
</HTML>

------ t2 end -------- (nee, deze en de bovenste staan niet in de file. ;)



t2 output:


Array ( [id] => 9876787 [name] => myname [initials] => init [sex] => Male [address] => myaddress [city] => city [zip] => zip [country] => Belgium [phone1] => 123456 [phone2] => 654321 => [email protected] )




---------- t3 ----------------

<?php
session_start();
?>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>NL-PhilBox Crating &amp; Packing List Webpage</title>
</head>

<body>
<?php
print "<p> printing session data:<br>";
print_r($_SESSION);
print "<br> printing txname: {$_SESSION['name']} </p>";

?>
</body>
</html>

---------- t3 ----------------end


printing session data:
Array ( [id] => 9876787 [name] => [initials] => [sex] => [address] => [city] => [zip] => [country] => [phone1] => [phone2] => [email] => )
printing txname:


suggesties, ideeen en anderzins hulp wordt enorm gewaardeerd.
 
Ozzie PHP

Ozzie PHP

14/02/2012 20:22:39
Quote Anchor link
Hmmmm... in t2 doe je dit soort toewijzingen binnen een formulier.

$_SESSION["address"] = $_POST['tx_address'];

Je geeft aan dat het resultaat van t3 dit is:

Array ( [id] => 9876787 [name] => [initials] => [sex] => [address] => [city] => [zip] => [country] => [phone1] => [phone2] => => )

Als je goed kijkt dan zie je dat alleen de id nog in de sessie staat. En laat id nou de enige waarde zijn die NIET uit een POST variabele komt. Je doet namelijk dit:

$clientid = "9876787";
$_SESSION['id'] = $clientid;

Mijn vermoeden is omdat je alle SESSIE waardes in een formulier hebt gezet, deze dus:

$_SESSION['id'] = $clientid;
$_SESSION["name"] = $_POST['tx_name'];
$_SESSION["initials"]= $_POST['tx_initials'];
$_SESSION["sex"] = $_POST['tx_sex'];
$_SESSION["address"] = $_POST['tx_address'];
$_SESSION["city"] = $_POST['tx_city'];
$_SESSION["zip"] = $_POST['tx_zip'];
$_SESSION["country"] = $_POST['tx_country'];
$_SESSION["phone1"] = $_POST['tx_phone1'];
$_SESSION["phone2"] = $_POST['tx_phone2'];
$_SESSION["email"] = $_POST['tx_email'];

Dat al die SESSIE waarden met een lege POST waarde worden gevuld omdat je niks POST in het formulier.

Zet in t2 deze regel:

$_SESSION["email"] = $_POST['tx_email'];

eens BUITEN het formulier (dus onder </form>) en kijk dan eens of deze waarde in t3 WEL zichtbaar is.
 
Freek jansen

freek jansen

14/02/2012 21:45:07
Quote Anchor link
bedankt voor je reactie. Helaas, geen verschil.

ik begin mij af te vragen of er iets fout zit in de WAMP installatie. Omdat er toch wel veel essentiele zaken als global variabelen en persistence fout gaan. En ik van jullie eigenlijk begrijp dat dat niet een algemeen voorkomende situatie is.

Ik zal LAMP eens proberen op mijn ubuntu. Wie weet. Mocht iemand toch nog het licht zie voor mijn situatie, dan hoor ik dat alsnog graag.
Gewijzigd op 14/02/2012 21:55:33 door freek jansen
 
- Jim  -

- Jim -

14/02/2012 21:52:37
Quote Anchor link
Ik denk dat ozzie aardig beschrijft wat het probleem is.

Vermoedelijk verwacht je dat je uit $_POST['xyz'] waardes kunt halen om te posten, alsof dit een hidden-field is. In dit geval moet ik je teleurstellen.

In het formulier post je nl niets!
De namen van de velden in het formulier zijn niet gevuld, en er is dus geen referentie. De waardes die je aangeeft wel te hebben, komen mogelijk ergens anders uit de sessie.

Je zult een formulier moeten maken met daarin de namen van de velden die je in het POST-request wilt ontvangen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<form action="" method="post">
 <input type="hidden" name="tx_some_id" value="voorbeeld_tx_some_id" />
 <input type="text" name="tx_name" value="voorbeeld_tx_name" />
 <input type="text" name="tx_address" value="voorbeeld_tx_address" />

<input type="submit" name="submit" value="verstuur" />
</form>


in dit geval kunt je de waardes 'opvangen' en verwerken in een query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$tx_some_id
= $_POST['tx_some_id'];
$tx_name = $_POST['tx_name'];
$tx_address = $_POST['tx_address'];

$query = "INSERT INTO `some_table` ( ....) VALUES ( ".intval($tx_some_id).", ".mysql_real_escape_string($tx_name)." ...);";

....


?>


Succes, en laat even weten of het is gelukt!
Gewijzigd op 14/02/2012 21:57:39 door - Jim -
 
Freek jansen

freek jansen

14/02/2012 22:02:23
Quote Anchor link
Jim, bedankt, maar nee.

De waarden zijn wel degelijk gevuld uit t1.php, zoals ik beschrijf. Deze worden ook op het scherm getoond, zoals je kunt zien, door t2.php. Op gegeven moment in t2.php is session gevuld met de juiste waarden, maar blijkbaar verliest het de waarden of krijgt mijn pagina een andere instantie van session terug in t3.php. Ik ben het spoor na al dat zoeken nu compleet bijster. Ik ben nooit echt vaak of graag met web pages bezig geweest (ik werk altijd aan back-end, persistence, business rules, etc, en wel application GUI in C++ of Swing in Java), maar zelfs met Servlets en JSP, Struts, JSF, Wicket, etc, lukt dit soort elementaire dingen nog wel.

Misschien verduidelijkt dat een beetje meer mijn frustratie en toename in twijfel mbt de kwaliteit van PHP. Vooralsnog ligt het aan mijn beperkt inzicht, maar logica in de syntax en toepassing van PHP zijn toch op zijn zachts gezegd zeer ongebruikelijk.
Gewijzigd op 14/02/2012 22:04:21 door freek jansen
 
Wouter J

Wouter J

14/02/2012 22:05:35
Quote Anchor link
Freek, nu is PHP inderdaad en niet heel perfecte taal. Alles wordt een beetje lafjes geïmplementeerd en nergens wordt echt druk over gedaan. Maar qua syntax vind ik hem nog wel meevallen. Even uit interesse, welke taal vind je nou wel perfect qua syntax en logica?
 
- Jim  -

- Jim -

14/02/2012 22:08:59
Quote Anchor link
In t3.php dump je de $_SESSION, daar moet je $_POST dumpen om te zien wat er is gepost.
De session is iets heel anders dan de post.
Verander in t3.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<body>
<?php
print "<p> printing session data:<br>";
print_r($_SESSION);
print "<br> printing txname: {$_SESSION['name']} </p>";

?>

</body>


eens in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<body>
<?php
print "<p> printing POST data:<br>";
print_r($_POST);
print "<br> printing txname: {$_POST['name']} </p>";

?>

</body>
 
Freek jansen

freek jansen

14/02/2012 22:13:41
Quote Anchor link
Perfect? Geeneen. Goed werkbaar? Java (JSE in 1ste plaats, diverse framworks als Spring [ik ben echter "anti"-hibernate], C++, Object Pascal is wat mij betreft ook zeker werkbaar. Ik heb een groot bezwaar bijvoorbeeld tegen de weak typing zoals php dat heeft, en security ligt ook wat gevoeliger. Ik zie ook best wel voordelen, in de zin dat je de complexiteit mist in PHP zoals die wel is met JEE en bv servlets, of met JSF (Faces).

Java heeft als uitgangspunt een sterke security opzet, en andere -fout voorkomende- voordelen, hoewel met de wijzigingen vanaf JEE en SE5 daar een en ander verloren is gegaan.


Toevoeging op 14/02/2012 22:17:55:

- Jim - op 14/02/2012 22:08:59:
In t3.php dump je de $_SESSION, daar moet je $_POST dumpen om te zien wat er is gepost.
De session is iets heel anders dan de post.


ja, dat verschil zie ik wel, Jim. Maar ik heb SESSION gevuld met de waarden uit de POST. Dan moeten die waarden toch gewoon bewaard blijven?
Gewijzigd op 14/02/2012 22:17:23 door freek jansen
 
Ozzie PHP

Ozzie PHP

14/02/2012 22:19:26
Quote Anchor link
Nogmaals... in t2 POST je het formulier waardoor je de sessie variabelen vult met... niks!

Ik herhaal mezelf weer even:

Zet in t2 deze regel:

$_SESSION["email"] = $_POST['tx_email'];

eens BUITEN het formulier (dus onder </form>) en kijk dan eens of deze waarde in t3 WEL zichtbaar is.
 
Freek jansen

freek jansen

14/02/2012 22:21:59
Quote Anchor link
ja, dat zeg al, ik heb het gedaan maar dat maakt geen verschil. en wat je zegt klopt gewoon niet.

De waarden staan er immers in. Kijk naar de code, en de output. De juiste waarden worden gewoon geprint in t2 maar in t3 niet meer. In de form of uit de form maakt blijkbaar niets uit. geprobeerd, geen verschil.

Dus Session wordt niet gevuld met niks, maar met de waarden die ik wil, het wordt immers geprint. Kijk even naar de code en de output.
Gewijzigd op 14/02/2012 22:23:25 door freek jansen
 
- SanThe -

- SanThe -

14/02/2012 22:22:33
Quote Anchor link
Zet dit eens bovenin elke pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest
?>
 
Ozzie PHP

Ozzie PHP

14/02/2012 22:26:41
Quote Anchor link
Oké, en verander:

$_SESSION["email"] = $_POST['tx_email'];

eens in:

$_SESSION["email"] = '[email protected]';
 
Freek jansen

freek jansen

14/02/2012 22:27:34
Quote Anchor link
bedankt, SanThe. Maar er worden geen messages getoond. Betekent dat dat die niks vindt of wordt het naar een log geschreven?

Toevoeging op 14/02/2012 22:30:16:

Ozzie, die onthoud hij wel.
 
Ozzie PHP

Ozzie PHP

14/02/2012 22:34:26
Quote Anchor link
Dat bedoel ik dus.

Jij gaat van pagina t2 naar pagina t3 door een formulier te versturen. Echter, bij het versturen van het formulier worden geen waardes gepost. Met andere woorden, je overschrijft de waardes uit de sessie met een lege waarde.

Verander t2 als volgt:

------ t2: --------


Code (php) 1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php session_start(); ?>

<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="Generator" CONTENT="TextPad 4.6">
<META NAME="Author" CONTENT="?">
<META NAME="Keywords" CONTENT="?">
<META NAME="Description" CONTENT="?">
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">

<div align="center">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
       $clientid
= "9876787";            
       $_SESSION['id']      = $clientid;
       $_SESSION["name"]    = $_POST['tx_name'];
       $_SESSION["initials"]= $_POST['tx_initials'];
       $_SESSION["sex"]     = $_POST['tx_sex'];
       $_SESSION["address"] = $_POST['tx_address'];
       $_SESSION["city"]    = $_POST['tx_city'];
       $_SESSION["zip"]     = $_POST['tx_zip'];
       $_SESSION["country"] = $_POST['tx_country'];
       $_SESSION["phone1"]  = $_POST['tx_phone1'];
       $_SESSION["phone2"]  = $_POST['tx_phone2'];
       $_SESSION["email"]   = $_POST['tx_email'];
                                                          
?>

</div>
<a href="t3.php">ga naar t3</a>
</BODY>
</HTML>

------ t2 end -------- (nee, deze en de bovenste staan niet in de file. ;)

En laat je verrassen...
Gewijzigd op 14/02/2012 22:35:02 door Ozzie PHP
 

14/02/2012 22:36:27
Quote Anchor link
Quote:
de code. Ik heb zaken vereenvoudigd en uit de classen gehaald om mijn probleem overzichtelijker te houden op het forum.

En hoe ziet de daadwerkelijke code eruit?
Gewijzigd op 14/02/2012 22:37:48 door
 
Freek jansen

freek jansen

14/02/2012 22:37:07
Quote Anchor link
code staat hierboven
 

14/02/2012 22:38:49
Quote Anchor link
Aangezien je zegt dat je de code hebt vereenvoudigd, zie ik liever de classen zelf, en aangezien er het een en ander mist nu.
Gewijzigd op 14/02/2012 22:39:50 door
 

Pagina: 1 2 3 4 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.