2016-05-14 5 views
3

Ich versuche eine Restaurantzusammenfassung zu erstellen, wo der Kunde seine Bestellung über CheckBox und Menge auswählen und die Summe der Preise am Ende erhalten kann. Bei der Auswahl Huhn funktioniert perfekt ex: Sie haben 3 Huhn ausgewählt und gibt den richtigen Preis, aber wenn ich einen anderen und andere Menge wählen, ist es entweder geben 0 Auswahl oder geben 1 Menge, auch wenn ich 5 zum Beispiel. Nur Huhn arbeitet andere nicht.HTML PHP Hinzufügen von Menge und Preis zu meinen Menüpunkten

Sehen Sie sich meinen Code und Screenshot von Beispiel mit Ausgabe. Test 2 should give: you have selected 2 Meat Total 6

Hier ist mein Code:

<body> 
<h3>Select what you want to eat</h3> 

<form action="PlaceOrder.php" method="get"/> 
<input type="checkbox" name="choice[]" value="1"/>Chicken,Price:8 
<input name="quantity[]" type="text" /><br /> 

<input type="checkbox" name="choice[]" value="2"/>Meat,Price:3 
<input name="quantity[]" type="text" /><br /> 

<input type="checkbox" name="choice[]" value="3"/>Souvlaki,Price:2.50 
<input name="quantity[]" type="text" /><br /> 

<input type="checkbox" name="choice[]" value="4"/>Pizza,Price:12 
<input name="quantity[]" type="text" /><br /> 

<input type="submit" value="Order"/> 
</form> 

und php:

<?php 
if(isset($_GET["choice"])){ 
$food=$_GET["choice"]; 
$quantity=$_GET["quantity"]; 
$c = count($food); 
$price = 0.0; 


for ($i=0; $i<$c ; $i++){ 
    if ($food[$i] == 1){ 
     $price = $price + 8 * $quantity[$i]; 
//here it's not working with quantity 
     echo "You have selected " .$quantity[$i]." Chicken <br>"; 
    } 

    if ($food[$i] == 2){ 
     $price = $price + 3 * $quantity[$i]; 
     echo "You have selected" .$quantity[$i]." Meat <br>"; 
    } 

    if ($food[$i] == 3){ 
     $price = $price + 2.5 * $quantity[$i]; 
     echo "You have selected " .$quantity[$i]."Souvlaki <br>"; 
    } 

    if ($food[$i] == 4){ 
     $price = $price + 12 * $quantity[$i]; 
     echo "You have selected" .$quantity[$i]." Pizza <br>"; 
    }  
    } 

    echo "Total: ".$price . "<br>"; 
} 
else { 
echo "Please select something!"; 
} 


?> 




</body> 

Antwort

2

Das Problem ist, dass die Kontrollkästchen, die nicht überprüft werden, nicht erhalten zu PHP senden Dein Code funktioniert also nicht so, wie du ihn hast. Sie müssen mehr Informationen über jedes Element in Ihrem Formular angeben, damit Sie einfacher mit den Daten auf der PHP-Seite arbeiten können. Außerdem müssen Sie sich nicht wiederholen, wenn es darum geht, die Elementnamen anzuzeigen. Versuchen Sie etwas wie folgt:

<?php 
$total = 0; 
$items = []; 
$info = 'Select something to order.'; 

// form submitted 
if(!empty($_POST['choice']) && is_array($_POST['choice'])) 
{ 
    // loop all item choices 
    foreach($_POST['choice'] as $item) 
    { 
     // filter item info 
     $name  = trim($item['name']); 
     $price = floatval($item['price']); 
     $quantity = intval($item['quantity']); 

     // only add if item was checked and quantity is more than 0 
     if(isset($item['checked']) && $quantity > 0) 
     { 
      $items[] = $quantity .' '. $name; 
      $total += $price * $quantity; 
     } 
    } 
    // update info if items were selected 
    if(count($items)) 
    { 
     $info = 'You selected ('.implode(', ', $items).'), total: '.$total; 
    } 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Order Form</title> 
    <meta charset="utf-8" /> 
</head> 
<body> 

    <form id="order-form" action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
     <div class="form-item"> 
      <input type="checkbox" name="choice[0][checked]" /> 
      <span>Chicken, Price: 8</span> 
      <input type="number" name="choice[0][quantity]" value="1" /> 
      <input type="hidden" name="choice[0][price]" value="8" /> 
      <input type="hidden" name="choice[0][name]" value="Chicken" /> 
     </div> 
     <div class="form-item"> 
      <input type="checkbox" name="choice[1][checked]" /> 
      <span>Meat, Price: 3</span> 
      <input type="number" name="choice[1][quantity]" value="1" /> 
      <input type="hidden" name="choice[1][price]" value="3" /> 
      <input type="hidden" name="choice[1][name]" value="Meat" /> 
     </div> 
     <div class="form-item"> 
      <input type="checkbox" name="choice[2][checked]" /> 
      <span>Souvlaki, Price: 2.50</span> 
      <input type="number" name="choice[2][quantity]" value="1" /> 
      <input type="hidden" name="choice[2][price]" value="2.50" /> 
      <input type="hidden" name="choice[2][name]" value="Souvlaki" /> 
     </div> 
     <div class="form-item"> 
      <input type="checkbox" name="choice[3][checked]" /> 
      <span>Pizza, Price: 12</span> 
      <input type="number" name="choice[3][quantity]" value="1" /> 
      <input type="hidden" name="choice[3][price]" value="12" /> 
      <input type="hidden" name="choice[3][name]" value="Pizza" /> 
     </div> 
     <input type="submit" value="Order"/> 
    </form> 

    <hr /> 
    <p><?= $info ?></p> 

</body> 
</html> 
1

Die Länge der Lebensmittel-Array und Menge Array sind nicht immer gleich.

Beispiel:

Nahrungs array (Var_dump)

array(2) { [0]=> string(1) "2" [1]=> string(1) "3" } 

Menge Array auch leere Werte (Var_dump)

array(4) { [0]=> string(0) "" [1]=> string(1) "4" [2]=> string(1) "5" [3]=> string(0) "" } 

Dies funktionierte für mich hat:

if ($food[$i] == 1){ 
    $price = $price + 8 * $quantity[0]; 
    echo "You have selected " .$quantity[0]." Chicken <br>"; 
    continue; 
} 

if ($food[$i] == 2){ 
    $price = $price + 3 * $quantity[1]; 
    echo "You have selected" .$quantity[1]." Meat <br>"; 
} 

if ($food[$i] == 3){ 
    $price = $price + 2.5 * $quantity[2]; 
    echo "You have selected " .$quantity[2]."Souvlaki <br>"; 
} 

if ($food[$i] == 4){ 
    $price = $price + 12 * $quantity[3]; 
    echo "You have selected" .$quantity[3]." Pizza <br>"; 
} 

Hoffe es funktioniert fo r du, korrigiere mich, wenn ich falsch liege!

+0

können Sie bitte genauer und geben Sie mehr Erklärung über das Beispiel? mit Kommentaren, wenn möglich. Vielen Dank. – Johnny

+0

Überprüfen Sie die Länge der Array von Essen und Menge Array mit var Dump in Ihrem Fehlerfall –

2

Statt

$price = $price + 3 * $quantity[$i]; 

Es ist

$price = $price + 8 * $quantity[$food[$i]-1]; 

BTW, müssen Sie den Wert in den ‚Lebensmittel‘ zu Nummer ändern, ist es eine Zeichenfolge, wenn Sie es aus der Form erhalten.

if(isset($_GET["choice"])){ 
$food=$_GET["choice"]; 
$quantity=$_GET["quantity"]; 
// begin type-cast 
// without the '&',this code won't modify a array element directly 
// We could iterate the array normally(without '&') and push the value to a new array, 
// But that may change the order of the $quantity, I am not sure, so I'd better reference the element directly. 
foreach ($food as &$value) { 
//(int) change it to a number. 
    $value = (int)$value; 
} 
foreach ($quantity as &$value) { 
    $value = (int)$value; 
} 
// type-cast done 
$c = count($food); 
$price = 0.0; 


for ($i=0; $i<$c ; $i++){ 
if ($food[$i] == 1){ 
    $price = $price + 8 * $quantity[$food[$i]-1]; 
    echo "You have selected " .$quantity[$food[$i]-1]." Chicken <br>"; 
} 

if ($food[$i] == 2){ 
    $price = $price + 3 * $quantity[$food[$i]-1]; 
    echo "You have selected " .$quantity[$food[$i]-1]." Meat <br>"; 
} 

if ($food[$i] == 3){ 
    $price = $price + 2.5 * $quantity[$food[$i]-1]; 
    echo "You have selected " .$quantity[$food[$i]-1]." Souvlaki <br>"; 
} 

if ($food[$i] == 4){ 
    $price = $price + 12 * $quantity[$food[$i]-1]; 
    echo "You have selected " .$quantity[$food[$i]-1]." Pizza <br>"; 
}  
} 

    echo "Total: ".$price . "<br>"; 
} 
else { 
echo "Please select something!"; 
} 


?> 

HTML // Sie haben hier einen Tippfehler Huhn, Preis:, 8

<input type="checkbox" name="choice[]" value="2"/>Meat,Price:3 
<input name="quantity[]" type="text" /><br /> 

<input type="checkbox" name="choice[]" value="3"/>Souvlaki,Price:2.50 
<input name="quantity[]" type="text" /><br /> 

<input type="checkbox" name="choice[]" value="4"/>Pizza,Price:12 
<input name="quantity[]" type="text" /><br /> 

<input type="submit" value="Order"/> 
Verwandte Themen