Realizzazione pagina web per ordinazioni prodotti online

Salve, avrei bisogno del vostro aiuto. Ho bisogno di un tutorial per creare un sistema di ordini online che però invece di terminare con il pagamento degli articoli deve solo inserire i dati dell'ordine in un database,  in modo tale che il cliente abbia uno storico ordini da visualizzare. Quello che mi interessa capire è la progettazione del form e soprattutto come fare ad utilizzare i campi checkbox per l'eventuale rinuncia di un prodotto dalla lista ordine che il cliente effettua prima di confermare il tutto.

Spero di essere stato chiaro.

Grazie.

inviato 7 anni fa
MGbyte78
X 0 X

Ora vi dico ciò che avevo pensato io senza aver la minima idea se sia ottimale:

1) in un campo di testo inserisco il codice del prodotto (prodotti che sono inseriti in una tabella)

2)recupero la descrizione del prodotto e la visualizzo tramite AJAX nella pagina stessa e la inserisco in output in un campo di testo

3)Clicco sul pulsante Aggiungi e si ricarica la pagina con la differenza che inizierà a visualizzarsi uno spazio riservato alla lista dei prodotti che vengono man mano aggiunti e che inserirò in una tabella che chiamerò temporanea in quanto mi servirà solo per far visualizzare gli articoli ordinati nella pagina.

4)Ogni prodotto è preceduto da un campo checkbox che di default sarà selezionato e servirà eventualmente per escludere un articolo

5)Tramite un pulsante effettuerò finalmente l'ordine e ogni articolo sarà immagazzinato in un'altra tabella che servirà come storico. I dati della tabella precedente, quella temporanea, saranno rimossi.

Sempre se tutto ciò per voi sia possibile, rimane il fatto che non so come escludere i campi checkbox selezionati da quelli non selezionati, in pratica vorrei capire il codice che mi permetta di inviare nel database solo gli articoli che l'utente ha selezionato tramite il campo checkbox.

risposto 7 anni fa
MGbyte78
X 0 X

Tutto quello che vuoi fare è possibilissimo!! ;-)

Allora devi studiarti i form e l'invio dei dati tramite array POST.

Non occorre che crei una tabella "temporanea" nel database, semplicemente fa in modo di avere un form tipo quello che segue:

<form name="myform" action="pagina_che_deve_processare_le_cose.php" method="POST">
<ul>
  <li><input type="checkbox" value="1" name="articolo[]" checked="checked"/>1</li>
  <li><input type="checkbox" value="2" name="articolo[]" checked="checked"/>2</li>
  <li><input type="checkbox" value="3" name="articolo[]" checked="checked"/>3</li>
</ul>
</form>

Ogni volta che l'utente vuole aggiungere un "articolo/oggetto" fai in modo che venga richiamata la "pagina_che_deve_processare_le_cose.php" con un tasto per l'invio del nuovo articolo da inserire in modo tale che aggiunga un altro   "<li><input type="checkbox" value="4" name="articolo[]" checked="checked"/>4</li>", ovviamente anche gli altri valori potranno essere inviati assieme, per cui puoi ricostruire tutto l'elenco.

Se invece vuoi salvare i dati all'interno del database crei un secondo tasto per l'invio dei dati, ma con valore differente dal primo in modo tale che la "pagina_che_deve_processare_le_cose.php" può capire se deve salvare le cose nel database o semplicemente visualizzare l'elenco.

Non so se mi sono spiegato.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Sinceramente non saprei come fare a far aggiungere un altro campo checked come dici tu. Io ho un campo text che ha come value l' articolo scelto dall 'utente, poi clicco sul pulsante che dovrebbe come dici tu aggiungere un campo checked. E come si fa? Io sarei capace solo con la tabella temporanea in modo tale che ogni volta che c'è un nuovo record e quindi un nuovo articolo si ricarica la pagina e lo si aggiunge. Ma sinceramente è molto più semplice il tuo metodo.

risposto 7 anni fa
MGbyte78
X 0 X

Allora se il tuo script php riceve sia il nuovo articolo dal campo text e sia tutti gli altri elementi il discorso è semplice:

Hai praticamente un form costituito sia dal tuo campo text sia con tutti i campi di tipo checked.

Quando l'utente preme il bottone "aggiungi" il tuo script recupera l'array articoli[] (come nell'esempio che ti ho fatto), e con un ciclo for (per esempio) ricostruisci il codice che ti ho mandato, finito tale ciclo fai aggiungere sotto anche l'articolo che ha inserito nel campo text, come nell'esempio che ti ho fatto prima.

Invece se l'utente preme "salva" (o quello che è) fai in modo che il tuo script salvi tutti i dati nel database.

Mi sono spiegato? Non è difficile  ::)

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Provo a realizzare la tua idea e poi ti faccio sapere........

risposto 7 anni fa
MGbyte78
X 0 X

Rieccomi,ho fatto una versione molto semplificata giusto per vedere come aggiungere i prodotti in lista ma purtroppo ogni volta che clicco sul pulsante "aggiungi" il prodotto me lo sovrascrive. Come faccio per metterlo in coda? Di seguito ti inserisco il codice:

<?php

$aggiungi=$_GET['var'];

$articoli=$_POST['articoli'];

?>

<html>

<head>

<title>Documento senza titolo</title>

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

</head>

<body bgcolor="green">

<form name="miofofm" method="post" action="ordini.php?var=aggiungi">

<input type="text" name="articoli"><input type="submit" value="Aggiungi">

<?php

if($articoli!="")

echo "<input type='check box' name='articolo[]'  checked> $articoli";

?>

</form>

</body>

</html>

risposto 7 anni fa
MGbyte78
X 0 X

Il parametro $_POST è un multiarray, per inserirlo in un array devi fare un ciclo for per esempio:

for($i=0; $i<count($_POST['articolo']);$i++)
    $articoli[] = $_POST['articolo'][$i];

Questo non è necessario nel tuo caso, lo puoi anche saltare a meno che non vuoi avere un ordine logico nel codice.

Poi trattandosi di un array, devi fare un ciclo per la visualizzazione di ogni campo:

for ($i=0; $i < count($articoli); $i++) {
  echo "<input type='check box' name='articolo[]'  checked> $articoli[$i]";
}

In poche parole uno script semplicissimo potrebbe essere questo:

<html>
<head>
<title>Documento senza titolo</title>
</head>
<body bgcolor="green">
<form name="miofofm" method="post" action="">
<input type="text" name="articoli"><input type="submit" value="Aggiungi">
<?php
if($_POST){
   for ($i=0; $i < count($_POST['articoli']); $i++) {
      echo "<input type='check box' name='articolo[]'  checked> ".$_POST['articolo'][$i];
   }
   echo "<input type='check box' name='articolo[]'  checked> ".$_POST['articoli']; # per il campo testo
}
?>
</form>
</body>
</html>

Ok?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

Rimane il solito problema.......sovrascrive il primo articolo e non aggiunge niente......... :-\

risposto 7 anni fa
MGbyte78
X 0 X

Si il codice non è perfetto...

Questo funziona :-)

<html>
<head>
<title>Documento senza titolo</title>
</head>
<body bgcolor="green">
<form name="miofofm" method="post" action="">
<input type="text" name="articoli" />
<input type="submit" value="Aggiungi" /><br />
<?php
if($_POST){
   if(isset($_POST['articolo']))
   for ($i=0; $i<count($_POST['articolo']); $i++) {
       echo "<input type='checkbox' name='articolo[]' value=\"{$_POST['articolo'][$i]}\" checked=\"checked\" /> ".$_POST['articolo'][$i]."<br />\n";
   }
   echo "<input type='checkbox' name='articolo[]' value=\"".$_POST['articoli']."\" checked=\"checked\" /> ".$_POST['articoli']." aggiunto"; # per il campo testo
}
?>
</form>
</body>
</html>
risposto 7 anni fa
Mario Santagiuliana
X 0 X

Sei stato grande, grazie veramente tanto!!! ma per favore siccome voglio capire e non solo copiare mi potresti spiegare dettagliatamente dopo la "if" che succede? Ho capito che ci sono di mezzo gli array ma vorrei capire i passi e la logica.......

risposto 7 anni fa
MGbyte78
X 0 X

E' un codice talmente semplice che credevo fosse autoesplicativo...comunque te lo commento un po'  :)

#Se è stato premuto il pulsante per inviare dei dati esegue queste operazioni
if($_POST){
   # se erano già presenti degli altri articoli, per cui esiste l'array $_POST['articolo']
   # fa in modo di stampare tutti i valori di questo array
   # altrimenti non fa niente, metti che si tratta del primo articolo inserito l'array $_POST['articolo'] non esiste
   if(isset($_POST['articolo']))
   # passo tutti i valori dell'array e li stampo creando il codice html per il i tag di input di tipo checkbok
   for ($i=0; $i<count($_POST['articolo']); $i++) {
       echo "<input type='checkbox' name='articolo[]' value=\"{$_POST['articolo'][$i]}\" checked=\"checked\" /> ".$_POST['articolo'][$i]."<br />\n";
   }
   # dato che l'utente ha sicuramente premuto aggiungi allora bisognerà aggiungere l'articolo che ha inserito nel campo text
   # che è salvato nella variabile $_POST['articoli']
   echo "<input type='checkbox' name='articolo[]' value=\"".$_POST['articoli']."\" checked=\"checked\" /> ".$_POST['articoli']." aggiunto"; # per il campo testo
}

Ok?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Ma perchè  se lascio solo questa stringa non stampa niente?

echo "<input type='checkbox' name='articolo[]' value=\"{$_POST['articolo'][$i]}\" checked=\"checked\" /> ".$_POST['articolo'][$i]."<br />\n"

risposto 7 anni fa
MGbyte78
X 0 X

Perchè $_POST['articolo'] è un array. Il php mica passa in automatico tutti i valori dell'array quando lo si vuole stampare.

Devi indicare quali valori dell'array stampare:

echo $_POST['articolo'][0];
echo $_POST['articolo'][1];
...
echo $_POST['articolo'][50];

Qualsiasi linguaggio di programmazione non permette l'operazione che vuoi compiere, è una cosa illogica. Quali valori dovrebbe stampare e che pezzi di codice dovrebbe utilizzare? Se non glielo indichi non lo fa.

Io ho creato un ciclo for per stamparli.

Mi sono spiegato?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

Grazie di tutto, sei stato gentile.

Ciao.

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