carrello

Sto realizzando un carrello.

Per ora riesco solo ad inserire i vari prodotti all'interno del carrello

ed è gia tanto 

quando inserisco un prodotto nel carrello x memorizzarlo faccio nel seguente modo

session_start(); 
$_SESSION['carrello'][] = $_POST['descrizione']; 
$_SESSION['quantity'][] = $_POST['quantita']; 
$_SESSION['costo'][] = $_POST['prezzo']; 
header("Location: carrello.php");

Memorizzo nel carrello la descrizione del prodotto,la quantità e il prezzo.

supponiamo che nel mio carrello ho messo (scrivania q.tà 1 prezzo 10e)

se ritorno alla pagina dei prodotti e voglio aggiungere un'altra scrivania

non faccio altro che riclikkare su aggiungi prodotto nel carrello.

Il problema è che quando vado a vedere nel carrello ho 2 volte scritto

(scrivania q.tà 1 prezzo 10e)

(scrivania q.tà 1 prezzo 10e)

invece di avere

(scrivania q.tà 2 prezzo 20e)

come posso fare se aggiungo uno stesso prodotto,invece di aggiungerlo

lo aggiorna?

 :bye:

inviato 9 anni fa
leoneweb
X 0 X

io cambierei approccio nella memorizzazione dei prodotti nel carrello:

supponiamo che ciascun prodotto abbia un ID e ad esempio al prodotto "cartella" sia associato l'ID 32 mentre per il prodotto "astuccio" ci sia l'ID 43 allora per memorizzare nel carrello una cartella e due astucci:

$_SESSION['carrello'][32] = array('descrizione'=>'cartella', 'prezzo'=>40, 'quantita'=>1);

$_SESSION['carrello'][43] = array('descrizione'=>'astuccio', 'prezzo'=>10, 'quantita'=>2);

ogni volta che aggiungi un elemento al carrello controlla prima che non sia già presente (array_key_exist). Se esiste ti basta incrementare la quantità:

$_SESSION['carrello'][43]['quantita']++;

altrimenti lo inserisci per intero, come mostratro prima

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

allora nella pagina scegli prodotto ho fatto in questo modo:

if (!isset($_SESSION['carrello'])) {
$_SESSION['carrello'] = array('id_prod'=>$codice, 'descriz'=>$descrizione, 'quant'=>$quantita,'prezzo'=>$prezzo);}

appena clikk sul pulsante x la scelta passo alla pagina memorizzazione

session_start();
$a=array("a"=>$codice);
if (array_key_exists("a",$a))
{
$_SESSION['carrello'][$codice]['quantita']++;
}
else {
$_SESSION['carrello'][$codice] = $_POST['codice'];
$_SESSION['carrello'][$descrizione]= $_POST['descrizione'];
$_SESSION['carrello'][$quantita]= $_POST['quantita'];
$_SESSION['carrello'][$prezzo]= $_POST['prezzo'];
}
header("Location: index_2.php");

però quando poi vado a vedere nel carrello

visualizzo solo la scritta Array

dove sbaglio??

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

ciao,

perchè la variabile $_SESSION['carrello'] è un Array, per vedere il contenuto in maniera rapida prova

print_r ($_SESSION['carrello'])

attento che se fai un reindirizzamento con header, le variabili di sessione potrebbero andare perse, per sicurezza, nella riga prima del redirect, metti la funzione

session_write_close()

che obbliga il parser di PHP a salvare le variabili di sessione come tu hai indicato precedentemente!

 :bye:

risposto 9 anni fa
robertomigli
X 0 X

allora nella pagina dove visualizzo tutti i prodotti nel carrello ho :

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

ho provato a sostituire il tutto con

print_r ($_SESSION['carrello']);

e la funzione incremento va xchè ottengo come risposta

Array ( [id_prod] => [descriz] => [quant] => [prezzo] => [12] => Array ( [quantita] => 2 ) )

xrò ancora non ho capito dove sbaglio???

e logicamente come risposta non posso avere una stringa del genere ma

solo il codice , desrizione , quantità e il prezzo

 :bye:

risposto 9 anni fa
leoneweb
X 0 X
foreach($_SESSION['carrello'][id_prod] as $chiave => $valore)
print " $valore \n";

Se non gli dai il prodotto da ciclare cosa dovrebbe darti?

risposto 9 anni fa
Marco Grazia
X 0 X

ma sei sicuro???

come ho fatto io prende tutto quello che c'e nel carrello 

Come mi hai postato mi dice:

Warning: Invalid argument supplied for foreach() in C:\wamp\www\carrello\carrello_2.php on line 22

per scrupolo ho provato

foreach($_SESSION['carrello']['id_prod'] as $chiave => $valore)
print " $valore \n";

foreach($_SESSION['carrello'][$id_prod] as $chiave => $valore)
print " $valore \n";

foreach($_SESSION['carrello'][$codice] as $chiave => $valore)
print " $valore \n";

foreach($_SESSION['carrello']['codice'] as $chiave => $valore)
print " $valore \n";

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

ho scritto id_prod perché tu l'avevi scritto in un tuo post precedente, ma se non gli dice su quale prodotto deve iuniziare il ciclo è ovvio che lo fa su tutto il carrello.

Credevo che fosse questo il tuo problema, altrimenti mi sono sbagliato :)

risposto 9 anni fa
Marco Grazia
X 0 X

il mio problema è questo

supponiamo che nel mio carrello ho messo (scrivania q.tà 1 prezzo 10e)
se ritorno alla pagina dei prodotti e voglio aggiungere un'altra scrivania
non faccio altro che riclikkare su aggiungi prodotto nel carrello.
Il problema è che quando vado a vedere nel carrello ho 2 volte scritto 

(scrivania q.tà 1 prezzo 10e) 
(scrivania q.tà 1 prezzo 10e) 

invece di avere 

(scrivania q.tà 2 prezzo 20e)

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

php]session_start();

$a=array("a"=>$codice);

if (array_key_exists("a",$a))

{

$_SESSION['carrello'][$codice]['quantita']++;

}

else {

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

$_SESSION['carrello'][$descrizione]= $_POST['descrizione'];

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

$_SESSION['carrello'][$prezzo]= $_POST['prezzo'];

}

se invece usi ancora il primo codice che hai postato la prima volta, otterrai il risultato non corretto di avere 2 elementi invece di avere un solo elemento dato dalla somma dei due.

 :bye:

risposto 9 anni fa
robertomigli
X 0 X

Riprendendo la mia proposta, per aggiungere un prodotto bisognerebbe fare così:

supponiamo che i dati del nuovo prodotto siano nelle variabili $_POST['codice'], $_POST['descrizione'], ecc..

<?php
session_start();
if (array_key_exists($_POST['codice'],$_SESSION['carrello']))
{
   $_SESSION['carrello'][$_POST['codice']]['quantita'] += $_POST['quantita'];
}
else
{
   $_SESSION['carrello'][$_POST['codice']] = array('descrizione'=>$_POST['descrizione'], 'prezzo'=>$_POST['prezzo'], 'quantita'=>$_POST['quantita']);
}
?>

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Allora ho modifica un pò di cose.

La pagina dove scelgo i prodotti

session_start();
if (!isset($_SESSION['carrello'])) {
$carrello = array();
$carrello=$_SESSION['carrello'];
}
<form id="form1" name="form1" method="post" action="memorizzo_2.php">
    <label>
    <input name="codice" type="text" id="codice" value="<?php echo $row_Recordset1['id_prodotto']; ?>" size="6">
    <input name="descrizione" type="text" value="<?php echo $row_Recordset1['descrizione']; ?>" size="10" />
    <input name="quantita" type="text" value="1" size="5" />
    <input name="prezzo" type="text" value="<?php echo $row_Recordset1['prezzo']; ?>" size="5" />
    </label>
    <label>
    <input type="submit" name="Submit" value="Submit" />
    </label>
  </form>

la Pagina dove memorizzo ho messo come mi hai detto

<?php
session_start();
if (array_key_exists($_POST['codice'],$_SESSION['carrello']))
{
   $_SESSION['carrello'][$_POST['codice']]['quantita'] += $_POST['quantita'];
}
else {
$_SESSION['carrello'][] = array('id_prod'=>$codice, 'descriz'=>$descrizione, 'quant'=>$quantita,'prezzo'=>$prezzo);}
header("Location: prodotti_2.php");
?>

La pagina per visualizzare tutti i prodotti nel carrello

<?php 
foreach ($_SESSION['carrello'] as $key) {
   echo 'id: '.$key['codice'].'<br>'
      .'nome: '.$key['descrizione'].'<br>'
      .'quantità: '.$key['quantita'].'<br>'
      .'prezzo: '.$key['prezzo'].'<br>';}
?>

Però in questo modo anche alla prima scelta di un prodotto la pagina memorizza_2

mi da questo errore

Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in C:\wamp\www\carrello\memorizzo_2.php on line 3

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

prova a cambiare così:

f (!isset($_SESSION['carrello'])) {

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

}

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ora funge grazie

alla pagina di memorizzazione avevo dimenticato una cosa

<?session_start();
if (array_key_exists($_POST['codice'],$_SESSION['carrello']))
{
   $_SESSION['carrello'][$_POST['codice']]['quantita']++;
}
else
{
   $_SESSION['carrello'][$_POST['codice']] = array('codice'=>$_POST['codice'],'descrizione'=>$_POST['descrizione'], 'prezzo'=>$_POST['prezzo'], 'quantita'=>$_POST['quantita']);
}
header("Location: prodotti_2.php");
?>

Una cosa ma in alcuni post ho letto che per svuotare il carrello bastava fare

if(!isset($_SESSION['carrello'])) {
$_SESSION['carrello'] = array();
}

ho cambiato come mi hai detto,ma non capisco ,non dovrebbe svuotarlo???

Inoltre come inizio la struttura è giusta oppure no??

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

Il codice:

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

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

}

serve a creare un carrello vuoto, quindi serve anche a svuotarlo

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Sto provanod a fare l'aggiornamento del carrello,cioè

alla pagina visualizza carrello (tutti i prodotti dentro)

Ho messo un campo di testo

<form id="form1" name="form1" method="post" action="aggiorna_carrello_2.php"> 
  <?php 
foreach ($_SESSION['carrello'] as $key) {
   echo 'Cod.Prodotto: '. $key['codice'].'  ' .'nome: '.$key['descrizione'].'' .'prezzo: '.$key['prezzo'].'<br>';}

echo "Quantità";
foreach ($_SESSION['carrello'] as $key) { 
$qua_agg=$key['quantita'];
echo "<input name=\"quantita_bis\" type=\"text\" id=\"quantita_bis\" value=\"$qua_agg\" size=\"7\"/>";}
echo  "<input type=\"submit\" name=\"Submit\" value=\"Aggiorna\" />"
?>
</form>

nella pagina aggiorna ho messo

<?php 
session_start();
if(isset($_SESSION['carrello'])){
    $_SESSION['carrello'][$_POST['codice']]['quantita'] = $_POST['quantita_bis'];
}
("Location: carrello_2.php");
?>

xrò non fa nessun aggironamento dove sbaglio??

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

se fai un reindirizzamento con header, le variabili di sessione potrebbero andare perse, per sicurezza, nella riga prima del redirect, metti la funzione

session_write_close()

che obbliga il parser di PHP a salvare le variabili di sessione come tu hai indicato precedentemente!

<?php 
session_start();
if(isset($_SESSION['carrello'])){
    $_SESSION['carrello'][$_POST['codice']]['quantita'] = $_POST['quantita_bis'];
}
session_write_close();
("Location: carrello_2.php");
?>

 :bye:

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