[PHP] variabelen in sessie blijven niet bewaard.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Ik zit met het probleem dat de variabelen die ik definieer wel op de volgende pagina te zien zijn, maar een pagina later niet meer onthouden worden.

Ik ben bezig om een bestelformpje in elkaar te zetten. Hierbij moet eerst een aantal gegevens geselecteerd worden die vervolgens verstuurd worden naar het 2e form om hier weer wat data in te voeren. Dit resulteerd uiteindelijk in een 4 tal forms waarbij de laatste herhaald moet worden omdat er meerdere bestellingen in een keer gedaan moeten worden.

Het eerste form is een heel simpel formpje
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
<?

session_start();

include ("conn.inc.php"); 

?>
<html>
<body topmargin="0" leftmargin="0">

<form method="POST"  action="herhaling_2.php">

        <table border="1" width="100%">

            <tr>

                <td width="246" align="right">&nbsp;</td>

                <td><b><font size="4">bestellen</font></b></td>

            </tr>

            <tr>

                <td width="246" align="right">&nbsp;</td>

                <td>&nbsp;</td>

            </tr>

            

            

            <tr>

                <td width="246" align="right">&nbsp;</td>

                <td><b>Persoonlijke Gegevens</b></td>

            </tr>

            <tr>

                <td width="246" align="right">

                <p align="right">Volledige naam:</td>

                <td><input type="text" name="naam" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Adres:</td>

                <td><input type="text" name="adres" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Postcode: </td>

                <td><input type="text" name="postcode" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Plaats:</td>

                <td><input type="text" name="plaats" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Telefoon:</td>

                <td><input type="text" name="telnr" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">&nbsp;</td>

                <td>&nbsp;</td>

            </tr>

            <tr>

                <td width="246" align="right">Geboorte datum:</td>

                <td><select size="1" name="gdag">

            <option>1</option>
<option>31</option>



                </select> - <select size="1" name="gmaand">
                <option selected>januari</option>
                <option>december</option>
                </select> - <input type="text" name="gjaar" size="8"> <i>

                <font size="1">( voorbeeld 1 - september - 1980 )</font></i></td>

            </tr>   
<tr>

                <td width="246" align="right">&nbsp;</td>

                <td><b>Leverancier Gegevens</b> </td>

            </tr>

            <tr>

                <td width="246" align="right">Leverancier: </td>

                <td><select size="1" name="leverancier">

                

                <OPTION VALUE="">Kies hier de leverancier</OPTION>

                <OPTION VALUE="">Andere leverancier</OPTION>

<?

//error_reporting(E_ALL);



$row_count = 0;

include ("conn.inc.php");

$zoeken = mysql_query("SELECT * FROM leverancier");



while ($row = mysql_fetch_array($zoeken)) {

$leverancier = $row["leverancier"];



?>

<OPTION VALUE="<? echo $leverancier; ?>" ><? echo $leverancier; ?></OPTION>

<?

}

$row_count ++;

?>

</SELECT>

            <sub>*als de leverancier niet in de lijst staat kies dan voor andere leverancier</sub></td>

        </tr>


            
            <tr>

            <td>

            <input type="submit" value="naar stap 2"><input type="reset" value="Reset" name="B2">

            </td>
            </tr>
</table>
</form>
</body>

Niet het meest mooie formpje, zeker niet kwa layout (maar daar kan ik zelf helaas niet veel aan doen). Maar het is functioneel en doet precies wat het moet doen.

Het tweede form is iets complexer.
Er wordt gekeken of er een leverancier is gekozen en als er geen bestaande gekozen is dan is deze in te vullen. Anders worden de gegevens uit de database gehaald en vervolgens dmv session_register aan de sessie gekoppeld.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?
include ("conn.inc.php");

session_start();

session_register('huisarts');
session_register('naam');
session_register('adres');
session_register('postcode');
session_register('plaats');
session_register('telnr');
session_register('gdag');
session_register('gmaand');
session_register('gjaar');

        if ($_POST['leverancier'] != "")

            {

                include ("conn.inc.php");



                $leverancier = mysql_query ("SELECT * FROM leverancier WHERE leverancier = '" . $_POST['leverancier'] . "' ");

                while ($row3 = mysql_fetch_array($leverancier)) 

            

                     {

                        $naama = $row3['leverancier'];

                        $adresa = $row3['adres'];

                        $postcodea = $row3['postcode'];

                        $plaatsa = $row3['plaats'];

                        $telefoona = $row3['telefoon'];

                        $faxa = $row3['fax'];

                    }



                session_register('naama');

                session_register('adresa');

                session_register('plaatsa');

                session_register('postcodea');

                session_register('telnra');

                session_register('faxa');


header("Location: herhaling_3.php");
       
     }
        else
            {

?>

Er is geen bestaande leverancier gekozen, vul hier de gegevens in van de leverancier:

<form method="post" action="herhaling_3.php">

    <table>

    

            <tr>

                <td width="246" align="right">&nbsp;</td>

                <td>&nbsp;</td>

            </tr>

            <tr>

                <td width="246" align="right">&nbsp;</td>

                <td><b>Andere leverancier</b></td>

            </tr>

            <tr>

                <td width="246" align="right">Naam leverancier:</td>

                <td><input type="text" name="naama" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Adres:</td>

                <td><input type="text" name="adresa" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Postcode:</td>

                <td><input type="text" name="postcodea" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Plaats:</td>

                <td><input type="text" name="plaatsa" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Telefoon:</td>

                <td><input type="text" name="telnra" size="40"></td>

            </tr>

            <tr>

                <td width="246" align="right">Fax:</td>

                <td><input type="text" name="faxa" size="40"></td>

            </tr>

            <td>&nbsp;<input type="submit" value="afronden" name="B1"> <input type="reset" value="Reset" name="B2"></td>
</form>

<?
   }         
?>


Dit ding werkt ook nog goed, als ik hier waarden dmv $_SESSION['variabele'] probeer te echoen krijg ik deze ook gewoon netjes weergegeven, dus dat is verder ook geenp robleem.

Het volgende form doet moeilijk, hij krijgt wel alle variabele in de sessie van de vorige forms, maar voegt er geen meer toe.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?

session_start();

if (action == versturen)
{

session_register('product');

session_register('sterkte');

session_register('inhoud');

$_SESSION['product'] .= $_POST['product'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud'];

?>

<form method="POST" action="<? $PHP_SELF ?>?action=versturen">

<table>

<tr>

                <td width="246" align="right">&nbsp;</td>

                <td><b>Omschrijving</b></td>                

            </tr>

            <tr>

                <td width="131" align="right">Naam:</td>

                <td><input type="text" name="product" size="53"></td>

            </tr>



            <tr>

                <td width="131" align="right">Sterkte: </td>

                <td><input type="text" name="sterkte" size="53"></td>

            </tr>

            <tr>

                <td width="131" align="right">Inhoud:</td>

                <td><input type="text" name="inhoud" size="53"></td>

            

            </tr>

            

                <td>&nbsp;<input type="submit" value="meer bestellen" name="B1"> <input type="reset" value="Reset" name="B2"></td>

            </tr>

        </table>

    <p>&nbsp;</p>

</form>
<form action="check.php" method="POST">
<input type="sumbit" value="versturen">
</form>
<?
}
else
{
?>
<form method="POST" action="<? $PHP_SELF ?>?action=versturen">

<table>

<tr>

                <td width="246" align="right">&nbsp;</td>

                <td><b>Omschrijving</b></td>                

            </tr>

            <tr>

                <td width="131" align="right">product:</td>

                <td><input type="text" name="product" size="53"></td>

            </tr>



            <tr>

                <td width="131" align="right">Sterkte: </td>

                <td><input type="text" name="sterkte" size="53"></td>

            </tr>

            <tr>

                <td width="131" align="right">Inhoud:</td>

                <td><input type="text" name="inhoud" size="53"></td>

            

            </tr>

            

                <td>&nbsp;<input type="submit" value="meer bestellen" name="B1"> <input type="reset" value="Reset" name="B2"></td>

            </tr>

        </table>

    <p>&nbsp;</p>

</form>
<form action="check.php" method="POST">
<input type="submit" value="versturen">
</form>

<?
}
?>


En hier gaat het dus fout, zodra ik hier dmv een session_register een ingevuld waarde probeer toe te voegen komt deze niet in de sessie te staan, ook niet nadat het ding meerdere keren is ingevuld.
De laatste pagina, check.php, krijgt helemaal niets doorgestuurd en op een of andere manier zijn dus alle variabele pleite.

Nu is mijn vraag, waar dit aan kan liggen en hoe het op te lossen is.
De sessies worden op dezelfde manier weggeschreven maar toch wil het niet werken op de laatste pagina. Iemand een idee?

Ik heb dmv print_r($_session) al gekeken wat hij uitspuugt en dat is gewoon alles, behalve op he tlaaste form, waarbij hij ook alle variabelen kwijt is.

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

bestaat dezelfde sessie(id) nog wel bij het laaste script?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Don Facundo schreef op dinsdag 26 april 2005 @ 14:55:
bestaat dezelfde sessie(id) nog wel bij het laaste script?
Jup, als ik
PHP:
1
echo session_id();

uitvoer in de 4 forms is het iedere keer dezelfde code, dus hij blijft bij dezelfde sessie.

Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

Ik vind dit nogal een vreemde, ik zie namelijk nergens een var oid genaamd action:

PHP:
1
if (action == versturen)


Wat ben je aan het vergelijken? Een string met een string? Een constant met een string? Niet echt duidelijk, misschien moet het iets zijn als:

PHP:
1
2
3
4
5
6
7
if ($action == "versturen")
of
if ($_POST['action'] == "versturen")
of 
if ($_SESSION['action'] == "versturen")
of
if ($_GET['action'] == "versturen")


Dit viel me iig als eerste op. Het is inderdaad nogal onoverrzichtelijk, misschien toch ff knippen in de code en alleen de relevante code posten ( zoals ook in de FAQ staat ;))

[ Voor 21% gewijzigd door UltimateB op 26-04-2005 15:08 ]

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Gebruik nooit session_register() en de $_SESSION array door elkaar, dat gaat altijd fout. In plaats van session_register() te gebruiken kun je gewoon een waarde toekennen aan de $_SESSION-array. :)

Overigens had je niet per se al je code hoeven posten hoor, volgende keer mag het ook met wat minder. ;)

[ Voor 22% gewijzigd door NMe op 26-04-2005 15:08 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Bartoz
  • Registratie: November 2000
  • Niet online
if (action == versturen)
moet dat niets iets zijn van if ($action == "versturen")

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

Zou het niet die .= zijn? Leeg + iets ofzo?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

Don Facundo schreef op dinsdag 26 april 2005 @ 15:08:
Zou het niet die .= zijn? Leeg + iets ofzo?
Dat werkt perfect hoor, gebruik ik ook regelmatig.

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

UltimateB schreef op dinsdag 26 april 2005 @ 15:09:
Dat werkt perfect hoor, gebruik ik ook regelmatig.
Het werkt, maar netjes is het niet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

Soms is het wel handiger, zeker als je het gebruikt in een loopje... maarjah, je kan daarvoor ook wel een $_SESSION['var'] = ""; defineren, maar of dat nou echt netter is. ;)

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

UltimateB schreef op dinsdag 26 april 2005 @ 15:15:
Soms is het wel handiger, zeker als je het gebruikt in een loopje... maarjah, je kan daarvoor ook wel een $_SESSION['var'] = ""; defineren, maar of dat nou echt netter is. ;)
offtopic:
In elke fatsoenlijke programmeertaal is dat best practice, omdat je dan zeker bent van de inhoud van die variabele. PHP maakt de variabele automatisch leeg, maar ik hou niet van aannames, en dus ook niet van de aanname dat "het wel goed zal gaan". ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

offtopic:
Idd, assumption is the mother of all f***ups. Ben blijkbaar lui geworden door alleen nog maar php te doen laatste anderhalf jaar... java deed altijd wel moeilijker, dan moest je wel.

[ Voor 48% gewijzigd door UltimateB op 26-04-2005 15:24 ]

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
-NMe- schreef op dinsdag 26 april 2005 @ 15:08:
Gebruik nooit session_register() en de $_SESSION array door elkaar, dat gaat altijd fout. In plaats van session_register() te gebruiken kun je gewoon een waarde toekennen aan de $_SESSION-array. :)

Overigens had je niet per se al je code hoeven posten hoor, volgende keer mag het ook met wat minder. ;)
in de voorbeelden die ik tegenkwam tijdens het zoeken stonden die dingen wel beide genoemd, ging er ook vanuit dat het dan op die manier werkte.
heb nu alles vervangen door $_SESSION en dan geeft hij iig alles netjes mee :)
-NMe- schreef op dinsdag 26 april 2005 @ 15:13:
[...]

Het werkt, maar netjes is het niet. ;)
vraag ik me af.
1. wat is er niet netjes aan (ik heb zelf altijd zoiets van als het naar behoren werkt is het best)
en
2. wat zou jij dan als alternatief aandragen dat netter is en ik hetzelfde resultaat mee kan krijgen.
ik gooi namelijk om de vars nog wat html tags zodat ze gelijk als html mail verstuurd kunnen worden.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Terw_Dan schreef op dinsdag 26 april 2005 @ 15:41:
vraag ik me af.
1. wat is er niet netjes aan (ik heb zelf altijd zoiets van als het naar behoren werkt is het best)
"Het werkt toch" is altijd een slecht argument. Geen superglobals gebruiken, en gewoon register_globals op on zetten werkt ook, en toch is dat zeker iets wat je niet wil. Feit is dat je in elke fatsoenlijke programmeertaal niet weet wat er in een variabele staat als je hem niet eerst instantieert. In PHP weet je dat toevallig wel, maar het is gewoon good practice om van tevoren zeker te zijn wat er in een variabele staat. :)
2. wat zou jij dan als alternatief aandragen dat netter is en ik hetzelfde resultaat mee kan krijgen.
ik gooi namelijk om de vars nog wat html tags zodat ze gelijk als html mail verstuurd kunnen worden.
Als alternatief kun je gewoon een regeltje opnemen: $varnaam = ''. Dan is je variabele ook leeg, en dan kun je 100% veilig de .= operator gebruiken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

session_start() moet toch altijd helemaal bovenin de pagina zonder iets ervoor te hebben staan of zeg ik iets verkeerd?

Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

Hey Terw, kan je aub ff uitleggen wat die

code:
1
if ( action == versturen ) {


is? Zie het nergens in je code terug komen en in dat if blok worden nieuwe waarden toegevoegd in de sessie.

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
UltimateB schreef op dinsdag 26 april 2005 @ 16:18:
Hey Terw, kan je aub ff uitleggen wat die

code:
1
if ( action == versturen ) {


is? Zie het nergens in je code terug komen en in dat if blok worden nieuwe waarden toegevoegd in de sessie.
Dat stuk gebruik ik omdat het gaat om een form dat meerdere keren herhaald kan worden. als de actie niet gelijk is aan versturen laat hij het standaard form zien, is de actie wel gelijk aan versturen dan knalt hij de gepostte waarden in de sessie en vervolgens laat hij het form weer zien.

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

Denk dat UltimateB hier op doelt:
PHP:
1
2
    action = $_POST['action'];
    if (action == 'versturen')

[ Voor 20% gewijzigd door mulder op 26-04-2005 16:59 ]

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Don Facundo schreef op dinsdag 26 april 2005 @ 16:58:
Denk dat UltimateB hier op doelt:
PHP:
1
2
    action = $_POST['action'];
    if (action == 'versturen')
Ik denk eerder dat hij op zijn eerdere post doelt. Jij hebt overigens nog steeds een foutje ($). ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Het ding werkt nu bijna, maar op het laatste stukje gaat het fout.

Je kunt namelijk meerdere bestellingen plaatsen op het laatste form, maar deze gegevens worden niet allemaal netjes weggeschreven.

De laatste 3 variabelen krijgen namelijk niet alle waarden. Als ik 1 ding invul blifjt deze var leeg. Als ik meerdere invul staan ze er wel in op de laatste na.

Ik heb inmiddels mijn form wat aangepast, maar nog steeds werkt het niet helemaal.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?

session_start();

//$_SESSION['naam'] = ""; <-- die heb ik eruit gehaald, omdat anders mijn naam variabele continu leeg was.

echo session_id();

if ($_GET['action'] == "afronden")
{

$_SESSION['naam'] .= $_POST['naam'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

header("Location: check.php");

}

if ($_GET['action'] == "versturen")
{

$_SESSION['naam'] .= $_POST['naam'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

//hier volgt de form


de rest van het documentje bestaat gewoon uit een aantal forms zoals hierboven ook gepost is.
Iemand een idee waarom hij die variabelen niet meeneemt?

de pagina die hier op volgt (check.php) doet niet meer dan de variabelen echoen. (en daarbij krijg ik dus alle resulaten -1)

[ Voor 13% gewijzigd door TERW_DAN op 27-04-2005 10:11 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je binnen een if statement iets echo'd kan je zien waar je code misloopt. Iets als dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?

session_start();

$_SESSION['naam'] = "";

echo session_id();

if ($_GET['action'] == "afronden")
{
echo 'we zijn nu aan het afronden';

$_SESSION['naam'] .= $_POST['naam'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

header("Location: check.php");

}

if ($_GET['action'] == "versturen")
{
echo 'we zijn nu aan het versturen';

$_SESSION['naam'] .= $_POST['naam'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

//hier volgt de form
Verder is het niet heel handig om eerst te echo'en en dan nog headers te versturen. ;) Ga je wel verder met die sessie trouwens in check.php?

Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Verwijderd schreef op woensdag 27 april 2005 @ 10:15:
Als je binnen een if statement iets echo'd kan je zien waar je code misloopt. Iets als dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?

session_start();

$_SESSION['naam'] = "";

echo session_id();

if ($_GET['action'] == "afronden")
{
echo 'we zijn nu aan het afronden';

$_SESSION['naam'] .= $_POST['naam'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

header("Location: check.php");

}

if ($_GET['action'] == "versturen")
{
echo 'we zijn nu aan het versturen';

$_SESSION['naam'] .= $_POST['naam'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

//hier volgt de form
Verder is het niet heel handig om eerst te echo'en en dan nog headers te versturen. ;) Ga je wel verder met die sessie trouwens in check.php?
Hij gaat wel netjes naar het juiste stukje code toe, echter, iets echo-en in het afronden stukje is niet te zien omdat hij gelijk doorgaat naar check.php.
Hij echo-et het wel netjes, gezien ik het wel te zien krijg als ik die header location eruit haal.

dus op een of andere manier wordt de laatste niet meegepikt, de sessie gaat geweoon verder, de rest echot hij namelijk wel.

en wat bedoel je trouwens met " het is niet heel handig om eerst te echo'en en dan headers te versturen" ?

[edit]
net nog even een ranzige manier geprobeerd (in een los filetje nog wat meuk aan de variabele toevoegenin de hoop dat je dan wel alle goede data had).
probleem is alleen dat je dan alsnog de laatste data mist, maar wel de meuk aan het einde erbij krijgt.

Daarbij lijkt me dit sowieso geen lekkere manier om mee te werken.

[ Voor 20% gewijzigd door TERW_DAN op 27-04-2005 10:36 ]


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Terw_Dan schreef op woensdag 27 april 2005 @ 10:27:
en wat bedoel je trouwens met " het is niet heel handig om eerst te echo'en en dan headers te versturen" ?
Headers geven het begin van je verstuurde data aan. Informatie wat de browser als eerste ontvangt. De server verstuurd dus eerst headers en daarna je data. En andersom lusten ze het niet. Voor een gedetaileerdere beschrijven moet je even kijken bij de header() functie op php.net

Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Sybr_E-N schreef op woensdag 27 april 2005 @ 10:31:
[...]

Headers geven het begin van je verstuurde data aan. Informatie wat de browser als eerste ontvangt. De server verstuurd dus eerst headers en daarna je data. En andersom lusten ze het niet. Voor een gedetaileerdere beschrijven moet je even kijken bij de header() functie op php.net
PHP:
1
2
3
4
5
6
7
8
9
10
if ($_GET['action'] == "afronden")
{

header("Location: check.php"); 

$_SESSION['naam'] .= $_POST['naam'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

//en verder...


Dus je bedoelt dat het op deze manier beter zou staan. Heb het al wel geprobeerd en het haalt helaas niets uit.

Acties:
  • 0 Henk 'm!

Verwijderd

Dat klopt, want je komt nu nooit bij regel 6 aan... header("Location: check.php") stuurt je meteen door naar check.php he :P

Als je wel op de goede plek in je code komt, doe dan eens een print_r($_POST). Wellicht gaat er iets fout met het posten van je formdata.

Acties:
  • 0 Henk 'm!

Verwijderd

De header staat VOOR de toekenning van de session variabelen.
nogal logisch dat ie ze niet onthoudt toch?!

Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Verwijderd schreef op woensdag 27 april 2005 @ 11:34:
De header staat VOOR de toekenning van de session variabelen.
nogal logisch dat ie ze niet onthoudt toch?!
Het verklaard verder niet waarom hij ze dan niet onhoudt als ik ze erachter zet. Het was ook gewoon puur om te testen ofhet iets uithaalde, maar dat deed het dus niet.
Verwijderd schreef op woensdag 27 april 2005 @ 11:24:
Dat klopt, want je komt nu nooit bij regel 6 aan... header("Location: check.php") stuurt je meteen door naar check.php he :P

Als je wel op de goede plek in je code komt, doe dan eens een print_r($_POST). Wellicht gaat er iets fout met het posten van je formdata.
de gegevens van de print_r($POST) zijn helemaal leeg.
Ik denk dat het toch ergens fout gaat met het feit dat er 2 submit knopjes zijn (gezien de 2e aan een ander form hangt).
Iemand een idee om beide knopjes op 1 form te krijgen. Van wat ik gelezen heb zou deze manier moeten werken, maar blijkbaar doet hij dat dus niet :(

Acties:
  • 0 Henk 'm!

Verwijderd

als je twee submit knoppen hebt moet je iets regelen waarmee je ze toch kan identificeren. Check bijvoorbeeld niet alleen op if($_POST['submit']), maar op if($_POST['submit'] && $_POST['submit'] == 'afronden')

http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.4 staat meer uitleg over het input element ;)

Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Verwijderd schreef op woensdag 27 april 2005 @ 13:01:
als je twee submit knoppen hebt moet je iets regelen waarmee je ze toch kan identificeren. Check bijvoorbeeld niet alleen op if($_POST['submit']), maar op if($_POST['submit'] && $_POST['submit'] == 'afronden')
Als ik zo'n check uitvoer dan gaat hij blijkbaar random maar wat doen.
Als ik de $_POST['submit'] laat echoen krijg ik ook verder niets terug.

't zou toch mogelijk moeten zijn deze dingen door php te laten echo'en

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je twee formulieren hebt en twee submit knopjes, dan wordt, als je geen javascript gebruikt, ook maar één formulier verstuurd. Dan is het nogal logisch dat als je op de submit knop van het ene formulier drukt, je de waarden uit het andere formulier niet te zien gaat krijgen. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
-NMe- schreef op woensdag 27 april 2005 @ 15:14:
Als je twee formulieren hebt en twee submit knopjes, dan wordt, als je geen javascript gebruikt, ook maar één formulier verstuurd. Dan is het nogal logisch dat als je op de submit knop van het ene formulier drukt, je de waarden uit het andere formulier niet te zien gaat krijgen. :P
Daarom heb ik de knopjes nu op 1 form gezet en geprobeerd dmv de value en/of naam die die dingen hebben er een van de 2 acties aan te hangen. Maar hij reageert dus niet op de acties.

Acties:
  • 0 Henk 'm!

Verwijderd

Wat is precies je plan dan? 1 form, 2 knoppen met verschillende acties?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form method="post" action="?">
    <input type="text" name="txt1">
    <input type="submit" name="submit1" value="actie1">
    <input type="submit" name="submit2" value="actie2">
</form>

<?

if ($_POST['submit1']) {
    echo 'actie 1';
    echo $_POST['txt1'];
    }

if ($_POST['submit2']) {
    echo 'actie 2';
    echo $_POST['txt1'];
    }
?>
Werkt hier zonder problemen.

[ Voor 26% gewijzigd door Verwijderd op 27-04-2005 15:58 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 27 april 2005 @ 15:57:
Wat is precies je plan dan? 1 form, 2 knoppen met verschillende acties?

PHP:
1
//code
Werkt hier zonder problemen.
Druk eens op enter op de tekstregel. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Dan.... ?

Hier wordt gesubmit met de eerste button.

Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Verwijderd schreef op woensdag 27 april 2005 @ 15:57:
Wat is precies je plan dan? 1 form, 2 knoppen met verschillende acties?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form method="post" action="?">
    <input type="text" name="txt1">
    <input type="submit" name="submit1" value="actie1">
    <input type="submit" name="submit2" value="actie2">
</form>

<?

if ($_POST['submit1']) {
    echo 'actie 1';
    echo $_POST['txt1'];
    }

if ($_POST['submit2']) {
    echo 'actie 2';
    echo $_POST['txt1'];
    }
?>
Werkt hier zonder problemen.
Dat heb ik nu dus ook gedaan, maar op geen manier wil hij dan de juiste actie uitvoeren.

heb nu dit stukje

PHP:
1
2
3
<form method="POST" action="<? $PHP_SELF ?>">
<input type="submit" value="meer bestellen" name="verstuur"> 
<input type="submit" value="afronden" name="verstuur"> 


en de statements die vervolgens uitgevoerd worden

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if ($_POST['verstuur'] == "verstuur")
{

echo $_POST['verstuur'];
$_SESSION['recept'] .= $_POST['recept'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 

header("Location: check.php");
}

if ($_POST['verstuur'] == "meer")
{
$_SESSION['recept'] .= $_POST['recept'];
$_SESSION['sterkte'] .= $_POST['sterkte'];
$_SESSION['inhoud'] .= $_POST['inhoud']; 
echo $_POST['verstuur'];?>

... de rest van het form


de echo van $_POST['verstuur'] evenals $_POST['submit'] geeft geen output.
Dus ergens pikt hij het niet op.

Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
$_POST['submit'] heb je nergens gemaakt, een type van een veld heeft niets te maken met iets opvragen.

Maar als je even goed kijkt naar wat elguapo zei:
Je ziet dat je aan een knop geen "waarde" kunt meegeven. POST is gewoon TRUE of FALSE. je kunt ook kijken if deze "is gezet" door if (isset($_POST['iets']))

Dus het juiste zou zijn door de knoppen beide een andere "name" te geven, en vervolgens te kijken of een van beide namen is ingesteld met de "isset" functie, of zonder wat misschien ook werkt, ik weet alleen neit of je dan notices krijgt als je error reporting op E_ALL hebt staan.

In een knop vind je dus nooit een waarde terug, je kunt dus niets echo-en!

edit:
Voorbeeldje dus:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
if (isset($_POST['verstuur'])) {
    echo 'Er is net op de "meer bestellen" knop gedrukt!';

} elseif (isset($_POST['verstuur2'])) { // 2e knop dus met aparte naam
    echo 'Er is net op de "afronden" knop gedrukt!';
} else {
    echo 'Er is op een andere knop of niet op een knop gedrukt!';
}
?>


Je maakt overigens gebruik van de C-style manier van coden geloof ik.
Meestal zetten php-ers de brackets achter het if gedeelte, ik zelf ook, anders wordt de pagina zo lang ;)

[ Voor 48% gewijzigd door pierre-oord op 27-04-2005 17:15 ]


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
pierre-oord schreef op woensdag 27 april 2005 @ 17:09:
$_POST['submit'] heb je nergens gemaakt, een type van een veld heeft niets te maken met iets opvragen.

Maar als je even goed kijkt naar wat elguapo zei:
Je ziet dat je aan een knop geen "waarde" kunt meegeven. POST is gewoon TRUE of FALSE. je kunt ook kijken if deze "is gezet" door if (isset($_POST['iets']))

Dus het juiste zou zijn door de knoppen beide een andere "name" te geven, en vervolgens te kijken of een van beide namen is ingesteld met de "isset" functie, of zonder wat misschien ook werkt, ik weet alleen neit of je dan notices krijgt als je error reporting op E_ALL hebt staan.

In een knop vind je dus nooit een waarde terug, je kunt dus niets echo-en!

edit:
Voorbeeldje dus:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
if (isset($_POST['verstuur'])) {
    echo 'Er is net op de "meer bestellen" knop gedrukt!';

} elseif (isset($_POST['verstuur2'])) { // 2e knop dus met aparte naam
    echo 'Er is net op de "afronden" knop gedrukt!';
} else {
    echo 'Er is op een andere knop of niet op een knop gedrukt!';
}
?>
Dit werkte dus in ieder geval wel. Nu alleen nog zorgen dat hij ook html tags mee kan sturen, maar daar zal ook vast wel wat voor te vinden zijn.
Je maakt overigens gebruik van de C-style manier van coden geloof ik.
Meestal zetten php-ers de brackets achter het if gedeelte, ik zelf ook, anders wordt de pagina zo lang ;)
ik zet mijn brackets er altijd onder, anders zijn dit echt dingen waar ik gewoon niet meer uitkom. En ach, lange paginas is niet zo erg, scrollen zal ik toch moeten op een 12" schermpje.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 27 april 2005 @ 16:12:
Dan.... ?

Hier wordt gesubmit met de eerste button.
Goed. En doe het nu eens in Internet Explorer. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
-NMe- schreef op donderdag 28 april 2005 @ 10:44:
[...]

Goed. En doe het nu eens in Internet Explorer. :P
onder Internet Explorer 5.2 submit hij dan ook gewoon met de eerste :P


maar goed, wat ik me nu nog afvraag is of het ook mogelijk is om ook tags of newlines mee te sturen.
Want zodra ik dat doe krijg ik enkel de $_POST waardes terug, zonder tags of newlines.

Acties:
  • 0 Henk 'm!

Verwijderd

IE 6 doet helemaal niks dan, maargoed, als je als brave IE-usert lekker alles met je muis bediend is er niks aan 't handje :P

Wat bedoel je met tags (html?) en newlines die je mee wilt sturen?
Iets als dit: $_POST['foo'] == "<strong>bar</strong>" ?

Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Verwijderd schreef op donderdag 28 april 2005 @ 12:52:
IE 6 doet helemaal niks dan, maargoed, als je als brave IE-usert lekker alles met je muis bediend is er niks aan 't handje :P

Wat bedoel je met tags (html?) en newlines die je mee wilt sturen?
Iets als dit: $_POST['foo'] == "<strong>bar</strong>" ?
datis idd de bedoeling.
maar dan met variabelen ertussen. heb nu
PHP:
1
2
3
$naam2 .= '<TR><TD>'. $_POST['naam'] .'</TD><TD>'. $_POST['sterkte'] .'</TD><TD>'. $_POST['inhoud'] .'</TD></TR>';

$_SESSION['naam'] = $naam2;


probleem is dat hij de tags niet mee oppikt en de gegevens meerdere keren in de $_SESSION var zet (naam staat er dus bijv 3x in).

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 07:09

MaNdM

1000-dingen-doekje

Asjeblieft

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?PHP
session_start();

if(!empty($_POST['recept']) && !empty($_POST['inhoud']) && !empty($_POST['sterkte']))
{
    $_SESSION['recept'] .= "<tr><td>".$_POST['recept']."</td><td>".$_POST['inhoud']."</td><td>".$_POST['sterkte']."</td></tr>\n";
}


if (isset($_POST['afronden']))
{
header("Location: check.php");
}


?>


Je moet uitkijken met de single-quotes door elkaar te gebruiken. Verder moet je voor jezelf zorgen dat je code eenvoudig blijft en vooral ook overzichtelijk. Voor je probleem met "2 submit knoppen" is het vrij eenvoudig, als je voor een van de knoppen een soort uitzondering maakt dat als die ingedrukt is dat ie de opdrachten uitvoerd die afwijken van wanneer je op de andere knop klikt. Kortom maak onderscheid in standaard acties en de uitzonderingen daarop en die uitzonderingen hang je vervolgens aan de knoppen. Scheelt je veel dubbele code ;) .

To be determined...


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

Loop ik te piepen als ik zeg dat die html niet in de sessie hoort?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 07:09

MaNdM

1000-dingen-doekje

Don Facundo schreef op vrijdag 29 april 2005 @ 12:49:
Loop ik te piepen als ik zeg dat die html niet in de sessie hoort?
Ben het met je eens dat het niet erg netjes coden is maar dit was wat hij wilde. Ik geef de voorkeur aan opmaak en inhoud scheiden van elkaar en zo een pagina samen te laten stellen.

To be determined...


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Don Facundo schreef op vrijdag 29 april 2005 @ 12:49:
Loop ik te piepen als ik zeg dat die html niet in de sessie hoort?
Tja, die html moet ergens blijven natuurlijk, kan die natuurlijk ook niet gewoon weglaten
Pagina: 1