【问题标题】:Checking all $_POST values for answer and printing检查所有 $_POST 值以获取答案和打印
【发布时间】:2016-02-06 23:32:33
【问题描述】:

我正在创建一个在线杂货网站,用户可以在其中输入他/她的全名和地址,然后继续购买杂货。

有 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"; 

?>

谁能指出我做错了什么或如何解决这个问题以获得所需的输出?

【问题讨论】:

  • 在你的代码中究竟有什么问题在你运行它时会发生什么
  • 从一开始:可能想使用 isSet() 而不是 $_POST['key'] > 0 ,除此之外,有什么问题?你得到什么错误?
  • @techedryan 我收到服务器 500 错误;我尝试添加整个错误检查内容,但不确定将其放在哪里
  • @AndriyLysak 我真的不知道如何让 PHP 告诉我错误是什么
  • 您是否连接到您的代码所在文件中的数据库。如果没有,那么这可能就是它无法正常工作的原因

标签: php html variables post output


【解决方案1】:

不需要 foreach 循环,因此也不需要 $POSTvalues 数组。

使用独立 if 语句而不使用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
}

【讨论】:

  • 穆宾的回答没有修复逻辑错误。除非没有设置牛奶、面包和鸡蛋,否则谷物永远不会加工。
【解决方案2】:

有趣的事实:PHP 将具有names 结构的元素转换为 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

【讨论】:

  • 两个代码sn-ps一起去吗?我试图比较所有的答案
  • 另外——我们可以假设价格永远不会改变
  • 我讨厌在代码中做假设...尤其是当不做假设同样容易或更容易的时候。它总是倾向于咬我。是的,一起使用代码。第一个 sn-p 应该在 &lt;form&gt; 标签内。
  • 我编辑了。我会鼓励你只非常小心地做出这些假设。例如,这可能是真的。在现实生活中,这永远不会是真的,所以为最接近现实生活的事物进行编码是我一直尝试做的事情,除非为最常见的用例编写代码要快得多(有时它肯定是......这不是其中一次)。
【解决方案3】:

你做错了很多事情。

那么,您如何尝试在不使用print/echo 的情况下在php 中显示html

所以这里是修改后的代码,希望这能解决你的问题。

<?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) 并将所有elseif 更改为if

if这样的&amp;&amp; $_POST['amtCereal'] &gt; 0语句中添加另一个条件,以确保它的值大于0

【讨论】:

  • 一切似乎都在工作,但唯一的问题是在打印订购的物品时 - Milk 只列出 20 次而不是实际订购的物品
  • 你在输入什么,你期望输出什么?
  • 这不会在确认页面上显示任何内容。
  • 请再试一次 - 抱歉正在玩其他答案 - 而且总费用似乎完全没有
  • 你在别处搞砸了,你能把你的完整文件发布到 pastebin 上并分享链接,这样我就可以查看你在哪里得到错误
猜你喜欢
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 2011-03-30
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多