【问题标题】:php Form calculater how can i fix thisphp表单计算器我该如何解决这个问题
【发布时间】:2013-05-20 22:41:03
【问题描述】:

好的,我正在制作一个计算第 1 行+ 第 2 行 +*.01% 然后添加第 3 行+ 第 4 行然后给出总数的表格。我在使用 *.01 时遇到问题,它只适用于前两个,但是当我添加最后两个时,如果我把它全部取出,它会掉一行。

<?php
if (count($_POST) > 0 && isset($_POST["calc15TextArea2"])){
    // add First and Second Numbers
    $sum = $_POST["indexEditbox1"] + $_POST["indexEditbox2"]*.01+ $_POST      ["calc15Editbox3"] + $_POST ["calc15Editbox4"];
    // their sum is diplayed as
    echo "Total is $ $sum";
}
?>

【问题讨论】:

  • JavaScript 在浮点数学方面是出了名的糟糕。你最好先缩放为整数,然后在完成后除以
  • @Orangepill 这是 php
  • @Orangepill 你真的让我笑了一点
  • 不相关但仍然正确:)

标签: php calculator


【解决方案1】:

如果您使用的是 html 5,则可以通过在 html 标记中指定表单输入的输入类型来绕过使用 floatvalintval

一个例子是;

<input type="number" name="indexEditBox1" />

然后在你的 php 代码中你可以简单地做;

$sum = $_POST["indexEditbox1"] + $_POST["indexEditbox2"] * .01 + $_POST["calc15Editbox3"] + $_POST ["calc15Editbox4"];

此外,我还建议您将计算结果放在括号中以获得所需的结果,这也使阅读变得更容易,尤其是当您的计算变得更加复杂时。我不会把它改成;

$sum = (($_POST["indexEditbox1"] + $_POST["indexEditbox2"]) * .01) 
       + ($_POST["calc15Editbox3"] + $_POST ["calc15Editbox4"]);

如果您不使用 html5 或觉得需要安全,因为人们可以将数据注入表单,您应该使用 intvalfloatval 函数。

【讨论】:

  • 即使使用 html5,我仍然会使用 intval/floatval 函数来清理任何用户输入,因为攻击者仍然可以轻松地在您期望数字的地方发送字符串。
  • OK 第一个代码仍然丢了一个 calc15editbox 只添加了 3 个框。第二个只添加了 indexeditbox1 和 2 和 *.01
  • 第二个代码块,执行:((index1 + index2) * 0.01) + (calc15box3 + calc15box4)。如果您想将总和 0.01 添加到 index1 和 2 的总和中,您可以:((index1 + index2) * 0.01) + (index1 + index2 + calc15box3 + calc15box4)。
  • 好的,我添加了括号并将 .01 更改为 1.01,我不得不更改其中一个括号。链接到第一个测试页面 [derolds.com/calc15.php][1] 第二个测试页面 [derolds.com/calc18.php][2] 很好。如果他们正在尝试制作相同类型的表格计算器,希望这会对他们有所帮助。谢谢大家的帮助!! ---------------------- 0 && isset($_POST["calc15TextArea2"])){ $sum = (floatval($_POST["indexEditbox1"]) + floatval($_POST["indexEditbox2"])) * 1.01+ floatval($_POST["calc15Editbox3"]) + floatval($_POST["calc15Editbox4"]); echo "总计为 $$sum"; } ?>
  • @DeroldFellmeth 如果它帮助你考虑接受它作为帮助他人的答案,祝你好运!
【解决方案2】:

将所有帖子变量包装在 intval() 中,例如 intval($_POST['indexEditBox2'])

此函数将从字符串中获取整数值。 (如果不是整数则使用floatval()等等价函数)

编辑: 也可以尝试用0.01 代替.01。鉴于这只是一种疯狂的预感,我可能就是.。被拾取为连接运算符。

那就试试吧:

    $sum = floatval( $_POST["indexEditbox1"] ) + floatval( $_POST["indexEditbox2"] ) * 0.01+ floatval( $_POST["calc15Editbox3"] ) + floatval( $_POST["calc15Editbox4"] ) ;

edit2: 看看 cmets!乘法和除法优先于加法和减法。

【讨论】:

  • 这里是测试页面的链接,您可以看到它在做什么。我不明白为什么当我添加 *.01 我得到 1= 而如果我删除 *.01 所有四个工作?????
  • 链接到测试页面derolds.com/calc15.php 我检查了,它只是增加了奇怪。当我将此添加到代码 *.01 中时,我得到 302 而不是 402 100+100 x 1% +100+100=402 我使用 x 和 % 作为数学示例
  • @DeroldFellmeth 只是一个猜测。但是您是否也尝试过0.01 而不是.01?我真的不确定,但. 也可能被用作连接运算符。
  • @DeroldFellmeth 100+100*0.01+100+100=301 !!!我的天啊。这是一场大乱斗吗?计算时,乘法和除法。总是优先于加/减。 (并且幂/根优先于乘法和除法。)...因此,您必须自动处理 100+(100*0.01)+100+100,即 301。这是小学给出的微积分 101。跨度>
猜你喜欢
  • 1970-01-01
  • 2020-03-25
  • 2020-02-14
  • 2021-10-23
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多