riaw
11-09-2004, 09:04
sto facendo il carrello con le session.
il sistema è composto da una pagina che si chiama "ordine.php" e da una che
si chiama "aggiornamento.php".
la pagina ordine.php visualizza gli articoli inseriti e ha un form dove si
può variare la quantità.
la pagina aggiornamento.php deve prendere il valore dal form della quantità,
aggiornare il campo dell'array della session dove è memorizzata la quantità,
e reindirizzare alla pagina ordine.php che, in teoria, trovandosi l'array
della session modificato, dovrebbe visualizzare la nuova quantità......
è un casino eh?:D
passando al codice, questi sono i pezzi della pagina ordine.php che
riguardano quello che ho detto sopra (poi ovviamente c'è dell'altro codice
per formattare i dati):
session_start();
$sid = $_COOKIE['sid'];
$db=mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("portatili",$db) or die(mysql_error());
foreach ($_SESSION[carrello] as $ordine)
{
$st=mysql_query("SELECT * FROM $ordine[1] WHERE codice = '".$ordine[0]."'
") or die(mysql_error());
// prendi i risultati
while ($row=mysql_fetch_assoc($st)) {
print("$row[marca]");
print("$row[modello]");
print("$row[prezzo]");
if ($ordine[2] == 0) {
$ordine[2] = 1;
}
print('<form action="aggiornamento.php" method="post" name="carrello">');
print ("<input type=\"text\" name=\"quantità\" size=\"2\" maxlength=\"2\"
value=\"${ordine[2]}\">");
$parziale = $row[prezzo]*$ordine[2];
print("$parziale");
}
}
}
print('<input type="submit" value="Aggiorna!">');
mysql_close_db;
se c'è qualche graffa in più o in meno non fateci caso, nel file originale
sono tutte a posto.
tenete presente che
ordine[0] è il codice del prodotto
ordine[1] è la categoria del prodotto
ordine[2] è la quantità.
e $parziale è il prodotto fra il prezzo unitario e la quantità.
la pagina "aggiornamento.php" ha questo codice:
<?php
ob_start();
?>
<head>
<meta http-equiv="refresh" content="3; ordine.php">
</head>
<?php
session_start();
$sid = $_COOKIE['sid'];
if (is_null($sid))
{
print('<br><br><p align="center">Attenzione:sei arrivato a questa pagina
senza averne l\'autorizzazione.<br>
Non è possibile proseguire.</p>');
}
else
{
foreach ($_SESSION[carrello] as $ordine) {
$quantità = $_POST['quantità'];
// $elimima = $_POST['elimina'];
print("$quantità");
$ordine[2] = $quantità;
print("$ordine[2]");
}
print ('Attendere di essere riportati alla pagina di riepilogo
dell\'ordine.') ;
}
?>
come potete vedere, ho inserito due print di controllo, una per verificare
se è corretto il passaggio con metodo post del valore del campo quantità,
l'altra per verificare se viene effettivamente aggiornata la quantità
nell'array.
con quelle due print di controllo ho verificato che è tutto corretto. nel
senso che se inserisco "4" come valore nel campo quantità, e clicco su
"aggiorna", mi salta fuori una pagina in cui c'è scritto
44Attendere di essere riportati alla pagina di riepilogo dell'ordine.
quindi è tutto corretto, in teoria.
in pratica, no, perchè quando avviene il redirect alla pagina "ordine.php",
la quantità visualizzata è ancora 1.....
dov'è che sbaglio?
il sistema è composto da una pagina che si chiama "ordine.php" e da una che
si chiama "aggiornamento.php".
la pagina ordine.php visualizza gli articoli inseriti e ha un form dove si
può variare la quantità.
la pagina aggiornamento.php deve prendere il valore dal form della quantità,
aggiornare il campo dell'array della session dove è memorizzata la quantità,
e reindirizzare alla pagina ordine.php che, in teoria, trovandosi l'array
della session modificato, dovrebbe visualizzare la nuova quantità......
è un casino eh?:D
passando al codice, questi sono i pezzi della pagina ordine.php che
riguardano quello che ho detto sopra (poi ovviamente c'è dell'altro codice
per formattare i dati):
session_start();
$sid = $_COOKIE['sid'];
$db=mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("portatili",$db) or die(mysql_error());
foreach ($_SESSION[carrello] as $ordine)
{
$st=mysql_query("SELECT * FROM $ordine[1] WHERE codice = '".$ordine[0]."'
") or die(mysql_error());
// prendi i risultati
while ($row=mysql_fetch_assoc($st)) {
print("$row[marca]");
print("$row[modello]");
print("$row[prezzo]");
if ($ordine[2] == 0) {
$ordine[2] = 1;
}
print('<form action="aggiornamento.php" method="post" name="carrello">');
print ("<input type=\"text\" name=\"quantità\" size=\"2\" maxlength=\"2\"
value=\"${ordine[2]}\">");
$parziale = $row[prezzo]*$ordine[2];
print("$parziale");
}
}
}
print('<input type="submit" value="Aggiorna!">');
mysql_close_db;
se c'è qualche graffa in più o in meno non fateci caso, nel file originale
sono tutte a posto.
tenete presente che
ordine[0] è il codice del prodotto
ordine[1] è la categoria del prodotto
ordine[2] è la quantità.
e $parziale è il prodotto fra il prezzo unitario e la quantità.
la pagina "aggiornamento.php" ha questo codice:
<?php
ob_start();
?>
<head>
<meta http-equiv="refresh" content="3; ordine.php">
</head>
<?php
session_start();
$sid = $_COOKIE['sid'];
if (is_null($sid))
{
print('<br><br><p align="center">Attenzione:sei arrivato a questa pagina
senza averne l\'autorizzazione.<br>
Non è possibile proseguire.</p>');
}
else
{
foreach ($_SESSION[carrello] as $ordine) {
$quantità = $_POST['quantità'];
// $elimima = $_POST['elimina'];
print("$quantità");
$ordine[2] = $quantità;
print("$ordine[2]");
}
print ('Attendere di essere riportati alla pagina di riepilogo
dell\'ordine.') ;
}
?>
come potete vedere, ho inserito due print di controllo, una per verificare
se è corretto il passaggio con metodo post del valore del campo quantità,
l'altra per verificare se viene effettivamente aggiornata la quantità
nell'array.
con quelle due print di controllo ho verificato che è tutto corretto. nel
senso che se inserisco "4" come valore nel campo quantità, e clicco su
"aggiorna", mi salta fuori una pagina in cui c'è scritto
44Attendere di essere riportati alla pagina di riepilogo dell'ordine.
quindi è tutto corretto, in teoria.
in pratica, no, perchè quando avviene il redirect alla pagina "ordine.php",
la quantità visualizzata è ancora 1.....
dov'è che sbaglio?