verifica e invio ordine php

cardelly

Nuovo Utente
13 Feb 2008
19
0
0
Ciao ragazzi, intanto vi ringrazio per tutti gli aiuti "indiretti" che mi avete già dato ;)
veniamo al mio problema, sto realizzando un form per ordine take away di un sito, purtroppo non sono molto pratico di php e quindi la soluzione da me trovata potrebbe essere molto lunga da relizzare o ancora peggio, sbagliata.
questo è il codice:

Codice:
              <form method="post" action="ordina.php" name="ordina" id="ordina">
                
                <div id="antipasti" style="display:none; padding-top:2.5em;">
                <p class="pMenu"><a class="pMenu" id="antipasti"> Antipasti </a><a class="pMenu" href="#top"><i class="icon-arrow-up"></i></a></p>
                
                <div class="col-sm-12 text-center" >
                <img class="img-thum " src="img/thumbs/antipasti1.png" alt="menu antipasti kaori">
                </div>
                 
                 <div class="clearfix"></div>
                
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                <label class="lMenu"> Harumaki </label><br>
                <p>Involtino giapponese</p>
                 <p>5€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="harumaki" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Edamame </label><br>
                <p>Fagiolini di soia verde</p>
                 <p>3.5€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="edamame" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Gyosa </label><br>
                <p>Ravioli di carne</p>
                 <p>4.5€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="gyosa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Ravioli di Gamberi </label><br>
                <p>Al vapore</p>
                 <p>5€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Salmone tartare </label><br>
                <p>Salmone tritato con olio di sesamo</p>
                 <p>7€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Tonno tartare </label><br>
                <p> Tonno tritato con olio di sesamo </p>
                 <p>8€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Bianco tartare </label><br>
                <p>Bianco tritato con olio di sesamo</p>
                 <p>7€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Ika tartare </label><br>
                <p>Calamaro tritato con olio di sesamo</p>
                 <p>9€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Tartare di tonno ponzu </label><br>
                <p>Tonno tritato con salsa ponzu</p>
                 <p>8€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div>
                <div class="col-sm-4 text-center" > 
                <div class="articoli"> 
                 <label class="lMenu"> Salmone tartare ponzu </label><br>
                <p>Salmone tritato con salsa ponzu</p>
                 <p>7€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Hiyayakko </label><br>
                <p>Tofu crudo alla giapponese</p>
                 <p>3.5€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Agedashi doufu </label><br>
                <p>Tofu fritto con salsa aroma</p>
                 <p>4€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Nanban zuke </label><br>
                <p>Pesce fritto in salsa agrodolce</p>
                 <p>4.5€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Sunomono </label><br>
                <p>Pesce con alghe in aceto di riso</p>
                 <p>9€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
                <div class="col-sm-4 text-center" > 
                <div class="articoli">
                 <label class="lMenu"> Ebi </label><br>
                <p>Gamberi cotti con alghe in aceto di riso</p>
                 <p>7€</p>
               <input type="number" class="form-control" id="zuppa" min="0" name="zuppa" style="width:100px; margin:auto; text-align:center;"   /><br>
                </div> <!-- articoli-->
                </div> 
              
                
                
                </div> <!-- /.id antipasti -->
                
                
                
                
                
                
                
                </form>
             
                       
                </div> <!-- /.form ordine -->
                </div> <!-- /.row -->
        </div> <!-- /.box -->

        
                <div class="clearfix"></div>
                
               
               <?php
			   
$to = "      \n mailAcuiInviareOrdine      Indirizzo e-mail protetto dal bots spam , deve abilitare Javascript per vederlo    ";
$headers = "From: " . $_POST['mail'] . "\n"; 
$subject = "Ordine";		 // soggetto della mail
$body = "Ordine:\n\n";			    

 if ((trim($_POST['harumaki']) != ""))
{  $body .= "Harumaki: " . trim(stripslashes($_POST["harumaki"])) . "\n"; 

  if ((trim($_POST['edamame']) != ""))
{  $body .= "Edamame: " . trim(stripslashes($_POST["edamame"])) . "\n";  
  

mail($to, $subject, $body, $headers); // SE L'INOLTRO E' ANDATO A BUON FINE...
 } }
 
 

 
 else {// altrimenti
  

  ?>
  <p style="color:#999; text-align:center; padding-bottom:2em;">Devi compilare tutto il modulo prima di inviare.</p>
  <?
  echo "";

  }
  
  ?>

il codice php ovviamente non l'ho completato, i controlli di if !="" dovrei farlo su circa 100 valori e mi sembra una cosa "stupida" da fare. Vorrei fare un controllo con un ciclo su tutti gli <input type="number"> e se diversi da null inserire nel "$body" il testo con il valore name"" e poi il valore inserito dall'user.
Come posso realizzare tutto questo?
Non so se sono riuscito a spiegarmi bene, ma spero di si..!

grazie mille in anticipo
 
ciao
spero di aver capito il tuo problema.
cambia il nome di tutti i campi type="number" in modo da renderli un array
PHP:
<input type="number" class="form-control" id="zuppa" min="0" name="zuppa[]" style="width:100px; margin:auto; text-align:center;" />
<?php
//........
foreach($_POST['zuppa'] as $valore){
	if($valore==""){
		//fai quello che devi fare se vuoto
	}else{
		//fai quello che devi fare se giusto
	}
}
//....
?>
detto tra noi i cambierei anche il modo di generare i vari compi di input, possibilmente appoggiandomi ad un db o mal che vada ad un array
 
ciao e grazie per la risposta, si credo che siamo sulla strado giusta, ma ora mi dici: Warning: Invalid argument supplied for foreach() in /web/htdocs/www.kaorisushi.it/home/ordina.php on line 324
questo è il codice php
PHP:
  <?php
			   
  $to = "      \n [email protected]      Indirizzo e-mail protetto dal bots spam , deve abilitare Javascript per vederlo    ";
$headers = "From: " . $_POST['mail'] . "\n";
  // soggetto della mail
  $subject = "Ordine";
  // corpo messaggio
  $body = "Ordine:\n\n";

foreach($_POST['menu'] as $valore){ 
 if ($valore != "") {    //questo fa si che se i campi "oggetto" e "messaggio" sono vuoti la form non invia nessuna mail
  $body .= "Harumaki: " . trim(stripslashes($_POST["menu"])) . "\n"; 
  
  
  // invio mail
 
  
 
  
  } else {// altrimenti
   echo "";
  ?>
  <p style="color:#999; text-align:center; padding-bottom:2em;">Devi compilare tutto il modulo prima di inviare.</p>
  <?
 
  ?>
  <p style="color:#999; text-align:center; padding-bottom:2em;">Devi compilare tutto il modulo prima di inviare.</p>
  <?
  echo "";

  }
} //fine for

 mail($to, $subject, $body, $headers); // SE L'INOLTRO E' ANDATO A BUON FINE...
  ?>

e questo il form:
HTML:
<input type="number" class="form-control" id="zuppa" min="0" name="menu[]" style="width:100px; margin:auto; text-align:center;"   /><br>

non riesco a capire se sbaglio io o devo inserire qualcosa..
vorrei poi nell'if
PHP:
  $body .= "qui dovrebbe prendere l'id " . trim(stripslashes($_POST["menu"])) . "\n";

in questo modo dovrebbe scrivere in $body l'id del valore che sta analizzando il ciclo e poi il valore inserito dall'user, giusto?

grazie
 
Ultima modifica di un moderatore:
ciao
domani ci do un occhio, comunque una domanda non hai un db, facendo in quella maniera usi un sacco di codice che poi è difficile quando devi andare eventualmente a modificare, oppure usare un metodo che ti semplifichi eventuali aggiunte o modifiche nell'elenco dei prodotti
 
allora quel problema l'ho risolto, ma non riesco a far salvare in $body l'ID che sta analizzando ora e il valore, il punto è che dovrebbe poi salvare anche i successivi e questo punto credo non si possa fare in questo modo..
purtroppo non ho DB e non sono per niente pratico di php, mi sto un po arrampicando sugli specchi..!l'avevo pensata troppo facile quando l'ho proposta, (anche perchè non pensavo che il menu avesse cosi tanti piatti) il problema è che ormai devo farla e ci posso lavorare solo un po la sera e non ho molto tempo...credo proprio di aver fatto un bel danno :crying: !
in ogni caso grazie mille ;)
 
ciao
intanto correggi
PHP:
<?php
//......
foreach($_POST['menu'] as $valore){ 
 if (trim($valore) != "") {    //questo fa si che se i campi "oggetto" e "messaggio" sono vuoti la form non invia nessuna mail
  $body .= "Harumaki: " . stripslashes($valore) . "\n"; 
  // invio mail
  } else {// altrimenti
   echo "";//a che ti serve questo?
   //.....
?>
poi in giornata ti faccio uno schema di come potresti fare
 
ciao
ecco uno schema possibile (ho tralasciato i css e formattazione varie)
1. ti prepari una pagina in puro php (senza nessun tag html) in cui scrivi l'elenco dei prodotti, la puoi chiamare prodotti.php e la salvi in una cartella a parte chiamata esempio elenco_prodotti
PHP:
<?php
/*
SEPARI con il carattere |
 nome|descrizione|prezzo
*/
$prodotti[]="Harumaki|Involtino giapponese|5.0";
$prodotti[]="Edamame|Fagiolini di soia verde|3.5";
$prodotti[]="Gyosa|Ravioli di carne|4.5";
//eccetera con tutti gli altri
?>
in questo modo se devi aggiungere/modificare/eliminare un prodotto basta che tu faccia le modifiche in questa pagina e ricaricarla senza toccare altro

2. poi ti fai la pagina con il form, ti conviene fare una pagina unica (io ho fatto così) ma volendo puoi farne due
PHP:
<?php
require_once "elenco_menu/prodotti.php";//richiama la pagina con l'elenco dei prodotti (attento ha come hai chiamato pagina e cartella)
//se fai due pagine il require_once in entrambe
if(isset($_POST['invia'])){
	//verifichi che l'indirizzo email sia un indirizzao valido
	if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
		$indirizzo=$_POST['email'];
	}else{
		echo "indirizzo email non valido";
		//e fai tornare al form
	}
	//comincia a preparare il body
	$data=date("d/m/Y");
	$testo="ordine del $data ricevuto da $email\r\n";
	//inizi a ciclare l'ordine dividendo come nel form
	$totale=0;
	foreach($prodotti as $id => $prodotto){
		if($prodotto !="" && (int)$prodotto > 0){
			//scrivo solo se il valore non è vuoto e maggiore di zero
			$diviso=explode("|",$prodotti[$id]);
			$testo.= "prodotto ".$diviso[0]." - ".$diviso[1].": quantit&agrave; $prodotto\r\n";
			$prezzo=0+$diviso[2];//trasformo il valore da stringa a float
			$totale+= (int)$prodotto * $prezzo;//costruisco il totale dell'ordine
		}
	}
	//verifico il totale
	if($totale ==0){
		//se zero non ordinato nulla
		echo "non hai complato l'ordine";
		//e fai tornare al form
	}else{
		$destinatario ="[email protected]";
		$oggetto="ordine";
		$testo.="TOTALE ORDINE $totale €\r\n";
		$headers="from $indirizzo \r\n";
		/*
		per fare delle prove ti conviene sostutuire questo gruppo if{...}else{...} commentandolo
		e sostituirlo con
		echo "$destinatario, $oggetto, $testo, $headers";
		in modo da vedere se viene giusto
		*/
		if(mail($destinatario, $oggetto, $testo, $headers)){
			echo "grazie, sarai ricontattato a breve";
		}else{
			echo "c'&egrave; un errore di trasmissione, riprova pi&ugrave; tardi";
		}
		//e rimandi alla pagina che vuoi
	}
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" name="ordina" id="ordina">
	email <input type="email" name="email" required /><br>
	MENU' DA ORDINARE<br>
	<table>
  	<tr>
    <td>id</td>
    <td>nome</td>
    <td>descrizione</td>
    <td>prezzo</td>
    <td>ordinare</td>
  	</tr>
<?php
	foreach($prodotti as $id => $prodotto){
		$diviso=explode("|",$prodotto);//separo nome|descrizione|prodotto
		echo "<tr>";
		echo "<td>$id</td>";//mostro l'id
		echo "<td>".$diviso[0]."</td>";//mostro il nome
		echo "<td>".$diviso[1]."</td>";//mostro il nome
		echo "<td>".$diviso[2]."</td>";//mostro la descrizione
		echo "<td>".$diviso[3]." €</td>";//mostro il prezzo
		//attento agli apici
		echo "<td><input type='number' id='menu' name='menu[$id]' min='0' />";
		echo "</tr>";
	}

?>
  	<tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td><input name="invia" type="submit" id="invia" value="invia"></td>
  	</tr>
	</table>
</form>
guarda che l'ho buttato giù di getto senza provarlo, prova e sappimi dire
 
allora, sto provando da un po e purtroppo sembra non passare nessun data (ho utilizzato anche io solo una pagina).
dopo il click scrive : "indirizzo email non validonon hai complato l'ordine"...ho provato ad eliminare tutti i controlli, invia la mail ma senza i dati..!
ho modificato il controlo mail cosi :
Codice:
 if(trim($_POST['email']) != "")
e ora sembrerebbe non andar bene..!
e
Codice:
$testo="ordine del $data ricevuto da $email\r\n";
in questo
Codice:
$testo="ordine del $data ricevuto da $indirizzo\r\n";

ma gli altri valori no..
 
Ultima modifica:
ciao :) allora credo che il problema sia sul conteggio del totale,
Codice:
 <?php 
require_once "elenco_menu/prodotti.php";//richiama la pagina con l'elenco dei prodotti (attento ha come hai chiamato pagina e cartella) 
//se fai due pagine il require_once in entrambe 
if(isset($_POST['invia'])){ 
    //verifichi che l'indirizzo email sia un indirizzao valido 
    if(trim($_POST['email']) != ""){ 
        $indirizzo=$_POST['email']; 
    }else{ 
        echo "indirizzo email non valido"; 
        //e fai tornare al form 
    } 
    //comincia a preparare il body 
    $data=date("d/m/Y"); 
    $testo="ordine del $data ricevuto da $indirizzo\r\n"; 
    //inizi a ciclare l'ordine dividendo come nel form 
    $totale=0; 
    foreach($prodotti as $id => $prodotto){ 
        if($prodotto !=""){ 
            //scrivo solo se il valore non è vuoto e maggiore di zero 
            $diviso=explode("|",$prodotti[$id]); 
            $testo.= "prodotto ".$diviso[0]." - ".$diviso[1].": quantit&agrave; $prodotto\r\n"; 
            $prezzo=0+$diviso[2];//trasformo il valore da stringa a float 
            $totale+= (int)$prodotto * $prezzo;//costruisco il totale dell'ordine 
        } 
    } 
    //verifico il totale 
   /* if($totale==0){ 
        //se zero non ordinato nulla 
        echo  "Non hai selezionato nessun prodotto."; 
        //e fai tornare al form 
    }else{ */
        $destinatario ="[email protected]"; 
        $oggetto="ordine"; 
        $testo.="TOTALE ORDINE $totale Euro\r\n"; 
        $headers="from $indirizzo \r\n"; 
        /* 
        per fare delle prove ti conviene sostutuire questo gruppo if{...}else{...} commentandolo 
        e sostituirlo con 
        echo "$destinatario, $oggetto, $testo, $headers"; 
        in modo da vedere se viene giusto 
        */ 
       if(mail($destinatario, $oggetto, $testo, $headers)){ 
            echo "grazie, sarai ricontattato a breve"; 
        }else{ 
            echo "c'&egrave; un errore di trasmissione, riprova pi&ugrave; tardi"; 
        } 
		
        //e rimandi alla pagina che vuoi 
    //} 
} 
?>

cpsì invia anceh la mail contenente l'ordine, ma il totale rimane 0..!
ecco questa è la mail, mancano le quantità:

prodotto Harumaki - Involtino giapponese: quantit&agrave; Harumaki|Involtino giapponese|5.0
prodotto Edamame - Fagiolini di soia verde: quantit&agrave; Edamame|Fagiolini di soia verde|3.5
prodotto Gyosa - Ravioli di carne: quantit&agrave; Gyosa|Ravioli di carne|4.5
TOTALE ORDINE 0 Euro

grazie mille ancora
 
ciao
per l'email mi era rimasto attaccato un ! che vuol dire NOT, correggi in
PHP:
    if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){

e il foreach al posto di $prodotti (errore di copy/paste dal form)
PHP:
$totale=0;
    foreach($_POST['menu'] as $id => $prodotto){

errori da arteriosclerotico
 
io ti amo !! :D :D :D !! davvero non so come ringraziarti ora va na meraviglia!! date un nobel a quest'uomo!! ;D !!
 
ciao
dimenticavo ancora, se vuoi fare una finezza, non è bello cominciare da zero
sostituisci
HTML:
<td>id</td>
con
HTML:
<td>item</td>
e
PHP:
echo "<td>$id</td>";//mostro l'id
con
PHP:
echo "<td>".($id+1)."</td>";//mostro l'id
così la numerazione che si vede parte da 1
 
ma a dire il vero l'id vorrei proprio nasconderlo, perchè la grafica che ho realizzato sarebbe questa, con div.
sitoOrdine.JPG
quindi ora cercherò di sostituire la tabella con i miei div ..!
ma grazie per il suggerimento e per tutto il resto :D
 
io ti amo !! :D :D :D !! davvero non so come ringraziarti ora va na meraviglia!! date un nobel a quest'uomo!! ;D !!

Guarda come te devo molto a questo utente e a tanti altri qui dentro, se potessi mi aggregherei per proporlo al nobel. Questo piccolo post vuole essere un ringraziamento a tutti coloro che dedicano parte del proprio tempo per aiutare gli altri, senza alcuna ricompensa o ritorno, se non un semplice GRAZIE! Qualche volta basta un semplice ringraziamento sincero e spontaneo per ricompensare coloro che ci regalano tempo e saggezza e i forum ne sono la prova. Un bacio in fronte a chi ha ideato questo splendido mezzo di confronto, supporto e scambio di opinioni e a chi lo popola.


Saluti.
G.G.
 
Guarda come te devo molto a questo utente e a tanti altri qui dentro, se potessi mi aggregherei per proporlo al nobel. Questo piccolo post vuole essere un ringraziamento a tutti coloro che dedicano parte del proprio tempo per aiutare gli altri, senza alcuna ricompensa o ritorno, se non un semplice GRAZIE! Qualche volta basta un semplice ringraziamento sincero e spontaneo per ricompensare coloro che ci regalano tempo e saggezza e i forum ne sono la prova. Un bacio in fronte a chi ha ideato questo splendido mezzo di confronto, supporto e scambio di opinioni e a chi lo popola.


Saluti.
G.G.

concordo pienamente con tutto quello che hai detto!!
 
Buongiorno.

Io devo inviare l'ordine via email ho già creato tutto in php e collegato tutto con il server devo inserire alcune funzioni in più applicare un sconto del 20% se superi 36 euro di ordine
In più se tu sei oltre 4 km dal ristorante non puoi effettuare l'ordine per la consegna a domicilio spero che sapete aiutare Buona giornata
 

Discussioni simili