carrello con le sessioni

Ciao a tutti, avrei bisogno di un grosso aiuto se vi è possibile.

Sto tentando di costruire un carrello utilizzando le sessioni e senza DB di supporto però riesco a memorizzare un solo codice ed una sola quantità.

Queste sono le pagine che ho preparato

index

<?php

session_start();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Untitled Document</title>

</head>

<body>

<p>

  <?php

print("ID: " . session_id() . "<br>\n");

?>

  <a href="prodotto.php">prodotto</a></p>

<p><a href="prodotto1.php">prodotto1</a></p>

</body>

</html>

prodotto

<?php

session_start();

if (!isset($_SESSION['cart'])) {

$_SESSION['cart'] = array();

}

if (!isset($_SESSION['quantity'])) {

$_SESSION['quantity'] = array();

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Untitled Document</title>

</head>

<body>

<p>

<?php

print("ID: " . session_id() . "<br>\n");

?>

</p>

<form id="form1" name="form1" method="post" action="memorizzo.php">

<label>

<input name="codice[]" type="text" value="CASSETTO INOX FIORE 1000" size="50" />

<input name="quantita[]" type="text" value="" size="5" />

</label>

<label>

<input type="submit" name="Submit" value="Submit" />

</label>

</form>

<form id="form2" name="form2" method="post" action="memorizzo.php">

<label>

<input name="codice[]" type="text" value="CASSETTO TERMOPLASTICA" size="50" />

<input name="quantita[]" type="text" value="" size="5" />

</label>

<label>

<input type="submit" name="Submit2" value="Submit" />

</label>

</form>

<p><a href="carrello.php">carrello </a></p>

<p> Il tuo carrello contiene <?php echo count($_SESSION['cart']); ?> articoli.</p>

</body>

</html>

prodotto 1 ( uguale a prodotto)

memorizzo

<?php

session_start();

if (!isset($_SESSION['cart'])) {

$_SESSION['cart'] = array();

}

if (!isset($_SESSION['quantity'])) {

$_SESSION['quantity'] = array();

}

$_SESSION['cart'] = $_POST['codice'];

$_SESSION['quantity'] = $_POST['quantita'];

header("Location: index.php");

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Untitled Document</title>

</head>

<body>

</body>

</html>

carrello

<?php

session_start();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Untitled Document</title>

</head>

<body>

<form id="form1" name="form1" method="post" action="">

  <label>

  <textarea name="textarea" cols="80" rows="10"><?php

if ($_SESSION['cart'] == 0)

{

print "Il tuo carrello è vuoto";

}

else

{

foreach($_SESSION['cart'] as $chiave)

echo " $chiave. \n";

}

?>

  </textarea>

  </label>

  <label>

  <textarea name="textarea2" cols="4" rows="10"><?php foreach ($_SESSION['quantity'] as $chiave => $valore)

echo " $valore \n";

?>

</textarea>

  </label>

</form>

</body>

</html>

E' un bel pò che ci sbatto la testa senza trovare la soluzione, qualcuno sa dirmi dov'è l'errore.

Grazie per la cortesia e ciao a tutti :)

inviato 10 anni fa
aldebaran
X 0 X

Innanzitutto benvenuto nel forum.

Leggendo frettolosamente credo che il problema sia il seguente.

Se dichiari:

$_SESSION['quantity'] = array();

Successivamente per aggiungere valori non devi scrivere così:

$_SESSION['quantity'] = $_POST['quantita'];

Altrimenti $_SESSION['quantity'] diventa string e sovrascriverai sempre i valori.

Prova:

$_SESSION['quantity'][] = $_POST['quantita'];

 :bye:

risposto 10 anni fa
usecram
modificato 10 anni fa
X 0 X

meglio ancora se associ magari con chiave -> valore gli articoli alla sessione...

es..:

cod_art

1

2

3

4

ecc.

$_SESSION['carello'][$_POST['cod_art'] = $_POST['quantita'];

 :bye:

risposto 10 anni fa
Marco Dario
X 0 X

manca una parentesi quadra:

$_SESSION['carello'][$_POST['cod_art']] = $_POST['quantita'];

comunque fate molta attenzione quando utilizzate i dati provenienti da $_POST, $_GET e simili. Non inseriteli in una istruzione senza prima aver accuratamente verificato che il valore contenuto è tra quellli possibili.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Esatto Gianni!!!  O0

 :bye:

risposto 10 anni fa
Marco Dario
X 0 X

Grazie a tutti.

Ho provato con $_SESSION['quantity'][] = $_POST['quantita']; ed in effetti nel carrello vedo 2 articoli come numero, però quando vado in visualizzazione anzichè il nome dell'articolo e la quantità mi scrive solamente array nella casella articolo ed array nella casella quantità.

Help   :'(

risposto 10 anni fa
aldebaran
X 0 X

L'array leggilo con un ciclo foreach non con echo

risposto 10 anni fa
usecram
X 0 X

Ho modifcato l'istruzione in questo modo

if ($_SESSION['cart'] == 0)

{

print "Il tuo carrello è vuoto";

}

else

{

foreach($_SESSION['cart'] as $chiave)

print " $chiave. \n";

}

però purtroppo il risultato non cambia

risposto 10 anni fa
aldebaran
X 0 X

Per prima cosa dai un'occhiata qui: http://www.php.net/manual/it/control-structures.foreach.php

Poi qui: http://www.phpnews.it/forum/index.php?topic=588.0

e in fine dovresti fare più o meno così perchè vado a memoria

if ($_SESSION['cart'] == 0)
{ 
print "Il tuo carrello è vuoto";
}
else
{
foreach($_SESSION['cart'] as $chiave => $valore)
print " $chiave $valore /n";
}

 :bye:

risposto 10 anni fa
Marco Dario
X 0 X

aaahhhrg

non va neanche così

 :'(

la sintassi è corretta però mi visualzza sempre solo la scritta array

risposto 10 anni fa
aldebaran
X 0 X

 :nono: :'(

foreach ($_SESSION['cart'] as $array_articoli)  {
  foreach ($array_articoli as $valore )  echo $valore."<br />";
}

Trattandosi di un array bidimensionale devi usare due cicli annidati

 :bye:

risposto 10 anni fa
usecram
X 0 X

Grazieeeeeeeeee.

Sei un grande funziona tutto alla perfezione

risposto 10 anni fa
aldebaran
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda