2015-11-05 67 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