Conservare temporaneamente delle info con le variabili

salve gente,

devo realizzare un piccolo e-commerce ed ho bisogno di conservare i prodotti (codice-prodotto, prezzo)selezionati nelle varie pagine dagli utenti nelle sessioni e, solo alla conferma stampare a video il resoconto, inserire i dati nel db e, stampare sempre a video il totale.

Putroppo non sò usare le variabili di sessioni che ritengo siano l'unica soluzione (scartando i cookie) per il mio problema e per essere sicuro che quella richiesta provenga proprio da quell'utente....certo dovrei inserire anche l'ip e magari la data.

Sareste così gentili da farmi un esempio pratico?...ho provato a dare un'occhiata in giro compreso il tutorial qui presente ma proprio non ce la fò! :(

 

inviato 10 anni fa
yusizu
X 0 X

L'uso delle sessioni in sè èmolto semplice, dipende poi da come e cosa ci devi memorizzare.

Di base per usare le sessioni:

* in tutte le pagine, prima di qualsiasi cosa: session_start(); che avvia la sessione (o mantiene quella esistente)

- per scrivere una variabile nella sessione: $_SESSION["prezzo"] = 39;

- per leggere la variabile $prezzo = $_SESSION["prezzo"]; (e $prezzo sarà 39)

(Ovviamente prezzo è un nome d'esempio! )

Poi ci sono molti fattori per scegliere come fare, potresti anche creare un file di testo temporaneo con il nome della sessione per memaorizzare il tutto e cancellarlo alla fine della sessione ma richiede una gestione un po' più complessa.

risposto 10 anni fa
LonelyWolf
X 0 X

grazie mille, con questo semplice script, quanto meno la variabile mi restituisce un valore!

ma nel mio caso specifico immagina una pagina che contiene dei dati su delle righe provenienti dal db stampate a video, alla fien di ogni riga inserisco un bottone aggiungi al carrello.

dovrei creare un semplicissimo script che una volta premuto il pulsantino mi salvi il codice prodotto, l'ip(se necessario) e, mi riporti alla pagina precedente dove in alto mi stampa quanto "acquistato" e, mi da la possibilità di aggiungere a "quella variabile" un'altra.

in pratica dovrei creare tante variabili di sessini per quanto sono le righe? Spero di no, xchè vengono generate automaticamente!

e come faccio a drgli onSubmit1 passami questo codice-prodotto

al secondo......??

credimi, non ci riesco!

risposto 10 anni fa
yusizu
modificato 10 anni fa
X 0 X

..però pensandoci, seguendo quanto mi hai postato posso scrivere:

 $_SESSION["codice-prodotto"] = $array[codice-prodotto];  ??

così avrò sempre un valore diverso giusto?....non so se la sintassi sia giusta

e poi alla seconda pagina come faccio a dirgli aggiungi questa variabile?

grazie

risposto 10 anni fa
yusizu
X 0 X

Una piccola soluzione di botto, quindi non prenderla come soluzione ottimale, ipotizzo dei nomi, se non è chiaro qualche cosa chiedi:

acquista.php

<?php
session_start();
$carrello = array();
$cp = $_POST["codice_prodotto"];
if (isset($_SESSION["carrello"]) {
    $carrello = $_SESSION["carrello"];
}
$carrello[count($carrello)] = $cp = $_POST["codice_prodotto"];
header("location:/*pagina prcedente*/");

?>
risposto 10 anni fa
LonelyWolf
X 0 X

Aspetta ho dimenticato di salvare l'aggiornamento in sessione, prima di header va messo:

$_SESSION["carrello"] = $carrello;

risposto 10 anni fa
LonelyWolf
X 0 X

scusami ma non ti seguo....

$carrello = array();  ----------non so cosa voglia significare!

e questo:

$_POST["codice_prodotto"]; non dovrei prima inserirgli il valore proveniente dal db?

 :'(

risposto 10 anni fa
yusizu
X 0 X

mi da un errore all'apertura della parentesi graffa..

risposto 10 anni fa
yusizu
X 0 X

Dunque:

$carrello = array();

serve per inizializzare la variabile carrello e dire a php che sarà un array.

$_POST["codice_prodotto"];

è il codice del prodotto che arriva dalla pagina con l'elenco; può anche essere $_GET se usi il metodo get, dipende da come fai l'invio.

Prima ho scritto di fretta, ora ti riposto il codice corretto:

<?php
session_start();
$carrello = array();
if (isset($_SESSION["carrello"])) {
    $carrello = $_SESSION["carrello"];
}
$carrello[count($carrello)] = $_POST["codice_prodotto"];

$_SESSION["carrello"] = $carrello;

header("location:/*pagina prcedente*/");

?>

Edit:

L'errore è dovuto che mancava la chiusura di una tonda!

Ora è a posto

risposto 10 anni fa
LonelyWolf
X 0 X

scusa se ti scoccio, ma poi come faccio a visualizzare nella pagina successiva quanto precedentemente inviato tramite POST?

grazie mille, veramente!

risposto 10 anni fa
yusizu
X 0 X

ho provato ad inserire nella "pagina precedente":

<?php 
session_start(); 

$carrello = $_SESSION["carrello"];

print ("$carrello");
?>

ma visualizzo Array

vuol dire che nella sessione non c'è nulla?

grazie mille, veramente!

risposto 10 anni fa
yusizu
X 0 X

Vuol solo dire che è un array, per vedere se contiene valori devi usare:

print_r ($carrello);

Ovviamente non lo usi per una visualizzazione

risposto 10 anni fa
LonelyWolf
X 0 X

ahh e chi ci sarebbe arrivato!

un'ultima cosa e poi non ti scoccio più:

non mi fa la "somma degli array" in pratica una volta cliccato sul carrello, vengono reindirizzato alla pagina di prima dover per comodità ho messo

<?php
session_start();

$_SESSION["carrello"] = $carrello;

print_r ($carrello);


?>

ed il valore è sempre uguale, non lo somma con il precedente!

e poi scusa se provassi ad inserire  $carrello nel db che succederebbe? perchè io al momento ce l'ho stampato a video così:

Array ( [0] => salumi1 )

grazie ancora

risposto 10 anni fa
yusizu
X 0 X

aiuto please  :'(

risposto 10 anni fa
yusizu
X 0 X

Non voglio fare il guasta feste ma per gestire un carrello nelle sessioni conviene organizzare tutto in un array, da salvare appunto in una variabile di sessione. Il problema quindi sta nella corretta gestione di un array contenente tutti i prodotti selezionati e non tanto nelle sessioni.

Uno studio accurato degli array in PHP è quindi doveroso (gli array in PHP non sono affatto banali!). Potresti iniziare da quì:

http://www.phpnews.it/corsi/corso-php-base/gli-array/

per poi spulciarti tutte le fuzioni di gestione degli array (dal loro numero si capisce quanto gli array siano importanti e "potenti" in PHP):

http://www.php.net/manual/it/ref.array.php

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Gianni, ti ringrazioper l'interessamento, non ci speravo +.

'E  da stamani che cerco di creare le basi per questo banalissimo e-commerce ma non ho concluso niente!

Avevo già avuto modo di leggere il tuo tutorial sugli array ma, nella fattispecie non saprei proprio come fare a salvare i dati in singole array e a loro volta contenute in variabili di sessioni.

Non sarei in grado di richiamare "tutti" i post che l'utente invia, fin'ora con le variabili di sessioni riesco appena a visualizzare l'ultima variabile ed il resto non so proprio che fine faccia.

saresti gentilissimo se potessi darmi una dritta un pò più pratica.

grazie mille

risposto 10 anni fa
yusizu
X 0 X

Per prima cosa devi "progettare" l'array contenente i prodotti selezionati dall'utente.

Ad esempio se volessi memorizzare i diversi prodotti (identificati da un ID prodotto)e la quantità si potrebbe procedere così:

Prodotto        ID           quantità         caratteristiche

frullatore       323              1                    verde

piatto            124             12                   decorazione oro

bicchiere        154             12

Per inserire i prodotti nel carrello:

$_SESSION['carrello'][323] = array('quantita' => 1, 'carat' => 'verde');

$_SESSION['carrello'][124] = array('quantita' => 12, 'carat' => ' decorazione oro');

$_SESSION['carrello'][154] = array('quantita' => 12);

Per aggiungere un frullatore:

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

per cambiare il numero dei piatti:

$_SESSION['carrello'][124] = 24;

per cancellare l'ordine dei bicchieri

unset($_SESSION['carrello'][154]);

Per avere un riepilogo dell'ordine:

foreach($_SESSION['carrello'] as $ID_prodotto => $dettagli)

{

   echo "ID prodotto: $ID_prodotto\n";

   echo "quantità: $dettagli[quantita]\n";

   echo "Altre caratteristiche: $dettagli[carat]";

}

i nomi dei prodotti dovresti recuperarli dal DB oppure memorizzare anche quelli nella sessione:

$_SESSION['carrello'][154] = array('nome' => bicchiere', 'quantita' => 12);

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ho provato così

<?
session_start();
session_name('nome_sessione');
$codice = $_POST[codice];
$quantita = $_POST[quantita];
$titolo = $_POST[titolo];


$_Session['carrello'][$codice] = array('quantita'=>$quantita,'titolo'=>'$titolo');

foreach($_SESSION['carrello'][$codice] as $ID_prodotto =>$dettagli)
{
echo"ID prodotto: $ID_prodotto\n";
echo"quantita: $dettagli[quantita]\n";
}

?>

mi restituisce un errore

Warning: Invalid argument supplied for foreach() in .....

non so se la sintassi sia giusta, io i dati (titolo, prezzo, quantita, codice) li recupero dal db e li passo tramite POST

grazie ancora

risposto 10 anni fa
yusizu
modificato 10 anni fa
X 0 X

Scusa ma ero assente, vedo che cmq il buon Gianni ti ha dato una mano!

Il tuo errore è dovuto alla gestione dell'array, stai usando come indice quantita e titolo in assegnamento e poi in "visualizzazione" (con il foreach) vuoi usare il codice.

risposto 10 anni fa
LonelyWolf
X 0 X

Qundi una cosa del genere:

<?
session_start();
session_name('nome_sessione');
$codice = $_POST[codice];
$quantita = $_POST[quantita];
$titolo = $_POST[titolo];


$_Session['carrello'][$codice] = array('quantita'=>$quantita);

foreach($_SESSION['carrello'] as $ID_prodotto =>$dettagli)
{
echo"ID prodotto: $ID_prodotto\n";
echo"quantita: $dettagli[quantita]\n";
/*recupera dal db il resto dei dati*/
/*il cod. prodotto è $ID_prodotto*/
}

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