Problemen met Update $_SESSION
In het script heb ik bij het script ook een korte uitleg gezet. Maar als je er nog meer vragen over hebt moet je het vragen.
Het is dus de bedoeling dat ik met behulp van de submit button uit het formulier het nieuwe aantal, in de session moet zetten.
Code (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
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
<?php
session_start();
session_register("session");
require "header.php";
if(!$login->get_login_info()) {
include('loginsysteem/login.inc.php');
} else {
if( isset( $_POST['ADD'] ) && ereg('^[1-9][0-9]*$', $_POST['aantal'])) {
$_SESSION['winkelwagen'][$_POST['artikelid']] = $_POST['aantal'];
}
if( isset( $_GET['DEL'] ) ) {
unset($_SESSION['winkelwagen'][$_GET['DEL']]);
}
\\ Het gaat om dit stukje script, alleen werkt dit niet. Hij opent namelijk ook het script op regel 17
if( isset( $_POST['actie'] ) && ereg('^[1-9][0-9]*$', $_POST['p_aantal'])) {
if ($_POST['actie'] == 'Bijwerken') {
$_SESSION['winkelwagen'][$_POST['aantal']] = $_POST['p_aantal'];
}
}
// Laat lijst zien
if( $_SESSION['winkelwagen'] ) {
$totaal = 0;
echo "<p>Uw winkelwagen</p><br>";
echo "<table class=\"winkelwagen\">";
echo "<tr><td class=\"w_product\"><b>Product</b></td><td class=\"prijs_stuk\"><b>Prijs</b></td><td class=\"aantal\"><b>Aantal</b></td><td class=\"prijs_totaal\"><b>Prijs totaal</b></td></tr>";
foreach ( $_SESSION['winkelwagen'] as $key=>$val ) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=$key";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat)) {
echo "<tr>";
echo "<td>".$rij["Naam"]." <a href=\"".$_SERVER["PHP_SELF"]."?DEL=$key\"><img src=\"uploadimages/prullenbak.gif\"></a></td>";
echo "<td>€".number_format($rij["Prijs"], 2, ',', ' ')."</td>";
\\Hier onder roep ik het stukje script waarmee ik de session wil updaten aan...
echo "<td><form><input type=\"text\" value=\"$val\" name=\"p_aantal\"><input type=\"hidden\" value=\"".$rij["ARTIKEL_ID"]."\" name=\"artikelid\"><input name=\"actie\" type=\"submit\" value=\"Bijwerken\"></form> </td>";
$product_totaal = $rij["Prijs"] * $val;
echo "<td>€".number_format($product_totaal, 2, ',', ' ')."</td>";
echo "</tr>";
$totaal = $totaal + ($rij["Prijs"] * $val);
}
}
echo "<tr></tr>";
echo "<tr rowspan=\"2\"><td>Totaalbedrag:<td><td></td><td> €".number_format($totaal, 2, ',', ' ')."</td></tr>";
echo "</table>";
echo ">> <a href=\"bestelling.php\" onClick=\"return Confirm(0)\">[Bestelling uitvoeren]</a>";
} else {
echo "De winkelwagen is momenteel leeg...";
}
if ($_GET["artikelid"]) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=".$_GET["artikelid"];
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
$naam = mysql_result($result, 0, "Naam");
$prijs = number_format(mysql_result($result, 0, "Prijs"), 2, ',', ' ');
echo "<p><div class=\"big\">Artikel toevoegen aan winkelwagen</div>";
echo "<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">";
echo "<input type=\"hidden\" name=\"artikelid\" value=\"".$_GET["artikelid"]."\">";
echo "<input type=\"text\" name=\"aantal\" value=\"1\" size=\"2\" maxlength=2>";
echo " x Artikel: $naam (prijs: $prijs euro)";
echo "<input type=\"submit\" name=\"ADD\" value=\"Toevoegen\">";
echo "</form>";
}
}
}
require "footer.php";
?>
session_start();
session_register("session");
require "header.php";
if(!$login->get_login_info()) {
include('loginsysteem/login.inc.php');
} else {
if( isset( $_POST['ADD'] ) && ereg('^[1-9][0-9]*$', $_POST['aantal'])) {
$_SESSION['winkelwagen'][$_POST['artikelid']] = $_POST['aantal'];
}
if( isset( $_GET['DEL'] ) ) {
unset($_SESSION['winkelwagen'][$_GET['DEL']]);
}
\\ Het gaat om dit stukje script, alleen werkt dit niet. Hij opent namelijk ook het script op regel 17
if( isset( $_POST['actie'] ) && ereg('^[1-9][0-9]*$', $_POST['p_aantal'])) {
if ($_POST['actie'] == 'Bijwerken') {
$_SESSION['winkelwagen'][$_POST['aantal']] = $_POST['p_aantal'];
}
}
// Laat lijst zien
if( $_SESSION['winkelwagen'] ) {
$totaal = 0;
echo "<p>Uw winkelwagen</p><br>";
echo "<table class=\"winkelwagen\">";
echo "<tr><td class=\"w_product\"><b>Product</b></td><td class=\"prijs_stuk\"><b>Prijs</b></td><td class=\"aantal\"><b>Aantal</b></td><td class=\"prijs_totaal\"><b>Prijs totaal</b></td></tr>";
foreach ( $_SESSION['winkelwagen'] as $key=>$val ) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=$key";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat)) {
echo "<tr>";
echo "<td>".$rij["Naam"]." <a href=\"".$_SERVER["PHP_SELF"]."?DEL=$key\"><img src=\"uploadimages/prullenbak.gif\"></a></td>";
echo "<td>€".number_format($rij["Prijs"], 2, ',', ' ')."</td>";
\\Hier onder roep ik het stukje script waarmee ik de session wil updaten aan...
echo "<td><form><input type=\"text\" value=\"$val\" name=\"p_aantal\"><input type=\"hidden\" value=\"".$rij["ARTIKEL_ID"]."\" name=\"artikelid\"><input name=\"actie\" type=\"submit\" value=\"Bijwerken\"></form> </td>";
$product_totaal = $rij["Prijs"] * $val;
echo "<td>€".number_format($product_totaal, 2, ',', ' ')."</td>";
echo "</tr>";
$totaal = $totaal + ($rij["Prijs"] * $val);
}
}
echo "<tr></tr>";
echo "<tr rowspan=\"2\"><td>Totaalbedrag:<td><td></td><td> €".number_format($totaal, 2, ',', ' ')."</td></tr>";
echo "</table>";
echo ">> <a href=\"bestelling.php\" onClick=\"return Confirm(0)\">[Bestelling uitvoeren]</a>";
} else {
echo "De winkelwagen is momenteel leeg...";
}
if ($_GET["artikelid"]) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=".$_GET["artikelid"];
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
$naam = mysql_result($result, 0, "Naam");
$prijs = number_format(mysql_result($result, 0, "Prijs"), 2, ',', ' ');
echo "<p><div class=\"big\">Artikel toevoegen aan winkelwagen</div>";
echo "<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">";
echo "<input type=\"hidden\" name=\"artikelid\" value=\"".$_GET["artikelid"]."\">";
echo "<input type=\"text\" name=\"aantal\" value=\"1\" size=\"2\" maxlength=2>";
echo " x Artikel: $naam (prijs: $prijs euro)";
echo "<input type=\"submit\" name=\"ADD\" value=\"Toevoegen\">";
echo "</form>";
}
}
}
require "footer.php";
?>
Alvast bedankt,
Matthijs
Gewijzigd op 06/12/2010 11:07:50 door Matthijs PHPHULP
Veel interessanter is om een hidden input mee te geven, of een extra GET variabele in de action van je form te zetten.
Verder...
Probeer je locica wat uhhh logischer te maken.
Splits je blokken op in: POST <-> geen POST.
Binnen die eerste block splits je op in "Een nieuw item in je winkelwagen steken" <-> "1 rij aanpassen in het winkelwagentje"
De tweede block bestaat uit: "De volledige tabel laten zien" <-> "Detail van 1 item"
Je zou zo-iets kunnen hebben als geraamte:
Code (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
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
<?php
session_start();
if ($_SERVER['REQUEST_METHOD']=="POST") { // Er is een post request
if (!empty($_GET['edit_row'])) { // 1 rij aanpassen || Dit wordt bepaald door de action="?action=edit_row"; zie verder in script
$_POST['aantal'] = (int) $_POST['aantal']; //
// ... handel je post request af
}
else if (!empty($_GET['new_row'])) { // nieuw item in winkelwagentje || zie action="?new_row=1" verder in script
// ...
}
}
else {
$_GET["artikelid"] = (!empty($_GET["artikelid"]) ? (int) $_GET["artikelid"] : 0); // Zo moet je je verder niet meer aantrekken van eventuele foute/gevaarlijke gegevens
if ($_GET["artikelid"] > 0) { // Detail item
// ...
echo '
<form method="post" action="?new_row=1">
<input type="hidden" name="artikelid" ...
</form>';
}
else { // volledige tabel
// ...
while ($rij = mysql_fetch_array($resultaat)) {
echo'
<form method="post" action="?action=edit_row">
<input type="hidden" name="artikelid" ...
</form>
';
}
}
}
?>
session_start();
if ($_SERVER['REQUEST_METHOD']=="POST") { // Er is een post request
if (!empty($_GET['edit_row'])) { // 1 rij aanpassen || Dit wordt bepaald door de action="?action=edit_row"; zie verder in script
$_POST['aantal'] = (int) $_POST['aantal']; //
// ... handel je post request af
}
else if (!empty($_GET['new_row'])) { // nieuw item in winkelwagentje || zie action="?new_row=1" verder in script
// ...
}
}
else {
$_GET["artikelid"] = (!empty($_GET["artikelid"]) ? (int) $_GET["artikelid"] : 0); // Zo moet je je verder niet meer aantrekken van eventuele foute/gevaarlijke gegevens
if ($_GET["artikelid"] > 0) { // Detail item
// ...
echo '
<form method="post" action="?new_row=1">
<input type="hidden" name="artikelid" ...
</form>';
}
else { // volledige tabel
// ...
while ($rij = mysql_fetch_array($resultaat)) {
echo'
<form method="post" action="?action=edit_row">
<input type="hidden" name="artikelid" ...
</form>
';
}
}
}
?>
Verder nog opmerken: het is gemakkelijker om strings in enkele quotes te steken. Dan moet je niet zoveel dubbele quotes escapen.
echo '<input type="text" value="'. $val .'" name="p_aantal">';
is gemakkelijker dan
echo "<input type=\"text\" value=\"$val\" name=\"p_aantal\">";
Herschrijf zelf eens je code, in zo'n geraamte. Dan zal het veel eenvoudiger zijn voor jezelf om te zien waar precies nog problemen kunnen zitten. Mocht je dan toch nog hulp nodig hebben, zal het ook voor ons duidelijker zijn, zodat we beter/vlugger kunnen helpen.
Gewijzigd op 06/12/2010 13:38:09 door Kris Peeters
Matthijs
Quote:
Warning
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
session_register
Quote:
Warning
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
Dus die moet ik er uit halen?
Ik heb dat nooit gebruikt. Volgens mij doet die functie tegenwoordig niets meer dat al niet gebeurt als je de lijn zou weglaten.
Matthijs Thoolen op 06/12/2010 13:59:51:
Dus die moet ik er uit halen?
Kijk eens op PHP.net, daar staan wat functies die je beter gebruikt;)
Maar het werkt nog steeds niet om het aantal te veranderen, wat moet ik daar nog aan veranderen?
Quote:
Code (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
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
<?php
session_start();
require "header.php";
if(!$login->get_login_info()) {
include('loginsysteem/login.inc.php');
} else {
if ($_SERVER['REQUEST_METHOD']=="POST") {
if (!empty($_GET['edit_aantal'])) {
$_POST['actie'] = (int) $_POST['aantal_product'];
$_SESSION['winkelwagen'][$_POST['artikelid2']] = $_POST['aantal_product'];
}
}
if( isset( $_POST['ADD'] ) && ereg('^[1-9][0-9]*$', $_POST['aantal'])) {
$_SESSION['winkelwagen'][$_POST['artikelid']] = $_POST['aantal'];
}
if( $_SESSION['winkelwagen'] ) {
$totaal = 0;
echo ' <p>Uw winkelwagen</p><br>
<table class="winkelwagen">
<tr><td class="w_product"><b>Product</b></td><td class="prijs_stuk"><b>Prijs</b></td><td class="aantal"><b>Aantal</b></td><td class="prijs_totaal"><b>Prijs totaal</b></td></tr>';
foreach ( $_SESSION['winkelwagen'] as $key=>$val ) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=$key";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat)) {
echo ' <tr>
<td>'.$rij["Naam"].' <a href=\''.$_SERVER["PHP_SELF"].'?DEL=$key\'><img src="uploadimages/prullenbak.gif"></a></td>
<td>€'.number_format($rij["Prijs"], 2, ',', ' ').'</td>
<td><form method="post" action="?action=edit_aantal&artikelid2='.$rij["ARTIKEL_ID"].'&aantal_product='.$val.'">
<input type="hidden" value=\''.$rij["ARTIKEL_ID"].'\' name="artikelid">
<input type="text" name="aantal_product" value="'.$val.'">
<input type="hidden" name="product_aantal">
<input name="actie" type="submit" value="Bijwerken"></form> </td>';
$product_totaal = $rij["Prijs"] * $val;
echo ' <td>€'.number_format($rij["Prijs"], 2, ',', ' ').'</td>
</tr>';
$totaal = $totaal + ($rij["Prijs"] * $val);
}
}
echo ' <tr></tr>
<tr rowspan="2"><td>Totaalbedrag:<td><td></td><td> €'.number_format($totaal, 2, ',', ' ').'</td></tr>
</table>
>> <a href="bestelling.php" onClick="return Confirm(0)">[Bestelling uitvoeren]</a>';
} else {
echo "De winkelwagen is momenteel leeg...";
}
if( isset( $_GET['DEL'] ) ) {
unset($_SESSION['winkelwagen'][$_GET['DEL']]);
}
if ($_GET["artikelid"]) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=".$_GET["artikelid"];
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
$naam = mysql_result($result, 0, "Naam");
$prijs = number_format(mysql_result($result, 0, "Prijs"), 2, ',', ' ');
echo ' <p>Artikel toevoegen aan winkelwagen
<form method="post" action=\''.$_SERVER["PHP_SELF"].'\'>
<input type="hidden" name="artikelid" value=\''.$_GET["artikelid"].'\'>
<input type="text" name="aantal" value="1" size="2" maxlength=2>
x Artikel: '.$naam.' (prijs: '.$prijs.' euro)
<input type="submit" name="ADD" value="Toevoegen">
</form>';
}
}
}
require "footer.php";
?>
session_start();
require "header.php";
if(!$login->get_login_info()) {
include('loginsysteem/login.inc.php');
} else {
if ($_SERVER['REQUEST_METHOD']=="POST") {
if (!empty($_GET['edit_aantal'])) {
$_POST['actie'] = (int) $_POST['aantal_product'];
$_SESSION['winkelwagen'][$_POST['artikelid2']] = $_POST['aantal_product'];
}
}
if( isset( $_POST['ADD'] ) && ereg('^[1-9][0-9]*$', $_POST['aantal'])) {
$_SESSION['winkelwagen'][$_POST['artikelid']] = $_POST['aantal'];
}
if( $_SESSION['winkelwagen'] ) {
$totaal = 0;
echo ' <p>Uw winkelwagen</p><br>
<table class="winkelwagen">
<tr><td class="w_product"><b>Product</b></td><td class="prijs_stuk"><b>Prijs</b></td><td class="aantal"><b>Aantal</b></td><td class="prijs_totaal"><b>Prijs totaal</b></td></tr>';
foreach ( $_SESSION['winkelwagen'] as $key=>$val ) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=$key";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat)) {
echo ' <tr>
<td>'.$rij["Naam"].' <a href=\''.$_SERVER["PHP_SELF"].'?DEL=$key\'><img src="uploadimages/prullenbak.gif"></a></td>
<td>€'.number_format($rij["Prijs"], 2, ',', ' ').'</td>
<td><form method="post" action="?action=edit_aantal&artikelid2='.$rij["ARTIKEL_ID"].'&aantal_product='.$val.'">
<input type="hidden" value=\''.$rij["ARTIKEL_ID"].'\' name="artikelid">
<input type="text" name="aantal_product" value="'.$val.'">
<input type="hidden" name="product_aantal">
<input name="actie" type="submit" value="Bijwerken"></form> </td>';
$product_totaal = $rij["Prijs"] * $val;
echo ' <td>€'.number_format($rij["Prijs"], 2, ',', ' ').'</td>
</tr>';
$totaal = $totaal + ($rij["Prijs"] * $val);
}
}
echo ' <tr></tr>
<tr rowspan="2"><td>Totaalbedrag:<td><td></td><td> €'.number_format($totaal, 2, ',', ' ').'</td></tr>
</table>
>> <a href="bestelling.php" onClick="return Confirm(0)">[Bestelling uitvoeren]</a>';
} else {
echo "De winkelwagen is momenteel leeg...";
}
if( isset( $_GET['DEL'] ) ) {
unset($_SESSION['winkelwagen'][$_GET['DEL']]);
}
if ($_GET["artikelid"]) {
$sql = "SELECT * FROM Artikel WHERE ARTIKEL_ID=".$_GET["artikelid"];
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
$naam = mysql_result($result, 0, "Naam");
$prijs = number_format(mysql_result($result, 0, "Prijs"), 2, ',', ' ');
echo ' <p>Artikel toevoegen aan winkelwagen
<form method="post" action=\''.$_SERVER["PHP_SELF"].'\'>
<input type="hidden" name="artikelid" value=\''.$_GET["artikelid"].'\'>
<input type="text" name="aantal" value="1" size="2" maxlength=2>
x Artikel: '.$naam.' (prijs: '.$prijs.' euro)
<input type="submit" name="ADD" value="Toevoegen">
</form>';
}
}
}
require "footer.php";
?>