2015-11-05 66 views
2

我創建的在線購物網站,用戶可以輸入他/她的全名&地址,然後進行購買雜貨。

有20件雜貨可供選擇 - 如果用戶想要的物品,他們可以簡單地輸入他們有多少該項目的單位要;這是20個項目中只有1個的html代碼。

 <tr> 
      <td> Milk - $3.99/carton </td> 
      <td> <input type="number" name="amtMilk" min=0> </td> 
     </tr> 

在頁面的底部有一個提交按鈕導致一個確認頁面,在PHP。確認頁面輸出用戶名稱,地址,所有訂購的項目以及稅前和稅後總額。

我已經寫不過從PHP這一點,它似乎並沒有正常工作。下面是我的代碼縮短爲4項:

<?php 
    <h2> Customer Details: </h2> 
    <p>Customer Name: </p> echo $_POST['Name']; 
    <p>Address: </p> echo $_POST['Address']; 
    $total = 0; 
    <p>You ordered: </p> 
    $POSTvalues = array('amtMilk', 'amtEggs', 'amtBread', 'amtCereal'); 
    foreach($POSTvalues as $key) { 
     if ($_POST['amtMilk'] > 0) { 
     $total+= 3.99*($_POST['amtMilk']); 
     echo "Milk"; 
     } 
     elseif ($_POST['amtEggs'] > 0) { 
     $total+= 2.99*($_POST['amtEggs']); 
     echo "Eggs"; 
     } 
     elseif ($_POST['amtBread'] > 0) { 
     $total+= 1.50*($_POST['amtBread']); 
     echo "Bread"; 
     } 
     elseif ($_POST['amtCereal'] > 0) { 
     $total+= 4.99*($_POST['amtCereal']); 
     echo "Cereal"; 
     } 
    } 
    echo "Your total before Tax is: $total"; <br> 
    $afterTax = $total*0.13 + $total 
    $afterDelivery = $afterTax + 3.50 
    echo "Your total after tax is: $afterTax"; <br> 
    echo "Your total after delivery is: $afterDelivery";<br> 

    <h3> GRAND TOTAL: </h3> echo "$afterDelivery"; 

?> 

任何人都可以指出我做錯了什麼或如何解決這個所以得到所需的輸出?

+1

代碼中不起作用當你從頭開始運行 – RyanM

+1

時會發生什麼:可能想使用isSet()而不是$ _POST ['key']> 0除此之外,有什麼問題?你得到什麼錯誤? –

+0

@techedryan我得到一個服務器500錯誤;我試圖添加整個錯誤檢查的事情,但不知道確切地把它放在哪裏 – JustAskingThings

回答

1

你正在做的很多事情是錯誤的。

那麼,你怎麼試圖顯示html裏面php而不使用print/echo

因此,這裏修改後的代碼,希望這可以解決您的問題。

<?php 
echo '<h2> Customer Details: </h2>'; 
echo '<p>Customer Name: </p>'. $_POST['Name']; 
echo '<p>Address: </p>'. $_POST['Address']; 
$total = 0; 
echo '<p>You ordered: </p>'; 
$POSTvalues = array('amtMilk', 'amtEggs', 'amtBread', 'amtCereal'); 
//foreach($POSTvalues as $key) 
{ 
    if (isset($_POST['amtMilk']) && $_POST['amtMilk'] > 0) { 
     $total+= 3.99*($_POST['amtMilk']); 
     echo "Milk"; 
    } 
    if (isset($_POST['amtEggs']) && $_POST['amtEggs'] > 0) { 
     $total+= 2.99*($_POST['amtEggs']); 
     echo "Eggs"; 
    } 
    if (isset($_POST['amtBread']) && $_POST['amtBread'] > 0) { 
     $total+= 1.50*($_POST['amtBread']); 
     echo "Bread"; 
    } 
    if (isset($_POST['amtCereal']) && $_POST['amtCereal'] > 0) { 
     $total+= 4.99*($_POST['amtCereal']); 
     echo "Cereal"; 
    } 
} 
echo "Your total before Tax is: $total<br />"; 
$afterTax = $total*0.13 + $total; 
$afterDelivery = $afterTax + 3.50; 
echo "Your total after tax is: $afterTax<br />"; 
echo "Your total after delivery is: $afterDelivery<br />"; 

echo "<h3> GRAND TOTAL: </h3>$afterDelivery"; 

?> 

編輯

註釋掉foreach($POSTvalues as $key)和更改所有elseifif

if聲明中這樣&& $_POST['amtCereal'] > 0添加另一個條件,以確保它的價值比0

+0

但是唯一的問題是打印訂購的物品 - 牛奶只列出了20次,而不是實際訂購的物品 – JustAskingThings

+0

你在輸入什麼,你期望輸出什麼? – Mubin

+0

這是不顯示確認頁上的任何東西芽 – Mubin

2

有沒有必要爲foreach循環,因此不需要$ POSTvalues數組。

使用獨立如果語句不ELSEIF

小僞代碼...

if (value1 > 0) 
{ 
    add to total 
    print item 
} 

if (value2 > 0) 
{ 
    add to total 
    print item 
} 

if (value3 > 0) 
{ 
    add to total 
    print item 
} 

if (value4 > 0) 
{ 
    add to total 
    print item 
} 
+0

Mubin的答案並不能解決邏輯錯誤,除非牛奶,麪包和雞蛋沒有設置,否則穀物將永遠不會處理。 – adamdewolf

2

有趣的事實更大:PHP打開與name小號結構類似於數組到PHP數組中的元素。

所以,你可以這樣做:

<?php 
$array = array(
    "milk" => array(
     "price" => 3.99, 
     "unit" => "carton", 
    ), 
    "eggs" => array(
     "price" => 2.99, 
     "unit" => "dozen", 
    ), 
); 
if (isset($_POST['amt'])) { 
    var_dump($_POST['amt']); 
    $total = 0; 
    foreach ($_POST['amt'] as $name=>$num) { 
     if($num > 0) { 
      $price = $array[$name]['price']; 
      $amt = $_POST['amt']; 
      $total += $price * $num; 
      echo $num . " " . ucfirst($name) . ", "; 

     } 
    } 

    echo "<br />Your total before Tax is: $total<br />"; 
    $afterTax = $total*0.13 + $total; 
    $afterDelivery = $afterTax + 3.50; 
    echo "Your total after tax is: $afterTax<br />"; 
    echo "Your total after delivery is: $afterDelivery<br />"; 
    echo '<form method="POST"><button type="submit">Back</button></form>'; 
} else { 
?><form method="POST"><table><?php 
    foreach ($array as $name=>$item) { 

     ?> 
     <tr> 
      <td> <?php echo ucfirst($name); ?> - $<?php echo $item['price']; ?>/<?php echo $item['unit']; ?> </td> 
      <td> <input type="number" name="amt[<?php echo $name; ?>]" min=0> </td> 
     </tr><?php 
    } 
?></table><input type="submit"></form><?php 
} 

我會考慮要麼通過你的價格作爲一個隱藏字段(例如,名爲price[milk]),或確保您的陣列可用您提交後就像我上面所做的那樣。這樣你就不必在價格上進行硬編碼。你擁有它的方式,如果價格改變,它將變成一場噩夢!

要添加一個新項目,您只需將一個新的鑰匙/陣列對添加到$array即可。在後端沒有額外的編碼。只是結果。

看看吧here

+0

這兩個代碼片段一起去嗎?我試圖比較所有的答案 – JustAskingThings

+0

也 - 我們可以假設價格永遠不會變化 – JustAskingThings

+0

我討厭在代碼中做出假設......尤其是當它簡單或容易的時候,不做假設。它總是傾向於咬我。是的,一起使用代碼。第一個片段應該在'

'標籤內。 – smcjones