Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php表单计算器如何修复此问题_Php_Calculator - Fatal编程技术网

php表单计算器如何修复此问题

php表单计算器如何修复此问题,php,calculator,Php,Calculator,好的,我正在制作一个表格,计算第1行+第2行+*.01%,然后加上第3行+第4行,然后给出一个总数。我对*.01有一个问题,它只适用于前两个,但当我添加最后两个时,如果我将其全部删除,则会删除一行。添加罚款 <?php if (count($_POST) > 0 && isset($_POST["calc15TextArea2"])){ // add First and Second Numbers $sum = $_POST["indexEditbo

好的,我正在制作一个表格,计算第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";
}
?>

将所有post变量包装在
intval()
中,如
intval($\u post['indexEditBox2'))

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

编辑:也尝试使用
0.01
代替
.01
。考虑到这只是一种疯狂的预感,我可能只是觉得
。作为连接运算符拾取

因此,请尝试:

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

edit2:查看评论!乘法和除法优先于加法和减法。

如果您使用的是HTML5,您可以通过在html标记中指定表单输入的输入类型,使用
floatval
intval
进行操作

例如:

<input type="number" name="indexEditBox1" />
此外,我建议您将计算结果用括号括起来,以获得所需的结果,这也使阅读更容易,尤其是当您的计算变得更复杂时。我不会把它改成

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

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

JavaScript在浮点数学方面是出了名的差劲。最好先缩放到整数,然后再进行除法done@Orangepill这是php@Orangepill你真的让我咯咯地笑了一下(虽然不相关,但仍然是真的:)即使使用html5,我仍然会使用intval/floatval函数来清理任何用户输入,因为攻击者仍然可以很容易地发送一个字符串,其中您需要一个数字。好的,第一个代码仍然删除一个calc15editbox,只添加3个框。第二个代码只添加indexeditbox1和2以及*.01。第二个代码块执行:((index1+index2)*0.01)+(calc15box3+calc15box4)。如果你想把0.01的总数加到index1和2的总数中,你可以这样做:((index1+index2)*0.01)+(index1+index2+calc15box3+calc15box4)。链接到第一个测试页面[derolds.com/calc15.php][1]第二个测试页面[derolds.com/calc18.php][2]效果很好。希望这将有助于一些人,如果他们试图使相同类型的表单计算器。谢谢你的帮助----------------------@DeroldFellmeth,如果它帮助你考虑接受它作为帮助他人的答案,祝你好运!这里有一个指向测试页面的链接,您可以看到它在做什么。我不明白为什么当我添加*.01时我得到1=如果我删除了*.01所有四个工作????链接到我检查的测试页面,它只会添加奇怪的内容。当我将其添加到代码*.01中时,我得到的是302而不是402100+100x1%+100+100=402,我使用了x和%example@DeroldFellmeth只是猜测而已。但是您是否也尝试了
0.01
而不是
.01
?我真的不确定,但是
也可能被选为连接运算符。@DeroldFellmeth 100+100*0.01+100+100=301!!!天啊。这是白费力气吗?计算时,乘法和除法。始终优先于加法/减法。(幂/根优先于乘法和除法。)。。。所以你必须自动处理100+(100*0.01)+100+100,也就是301。这是微积分101,在小学里。
$sum = (($_POST["indexEditbox1"] + $_POST["indexEditbox2"]) * .01) 
       + ($_POST["calc15Editbox3"] + $_POST ["calc15Editbox4"]);