计算器的PHP代码。已验证但无效

时间:2016-01-01 14:19:07

标签: php

所以我有一个用PHP编码的计算器,我已经验证了它,但是有一个问题,它没有用。我使用过服务器端验证。验证效果很好。但它没有做任何工作,例如,当我输入像2 + 8这样的输入时,它会输出8888.这非常令人困惑。这个你能帮我吗。感谢。

HTML页面在这里:

 <html>
 <head>
 <title>Calculator</title>
 </head>
 <body>
 <form method = "post" action = "calc.php">
 <input type = "text" name = "val_1"/>
 <select name="operator">
 <option>+</option>
 <option>-</option>
 <option>*</option>
 <option>/</option>
 </select>
 <input type = "text" name = "val_2"/>
 <input type = "submit" value = "calculate" name = "checker"/>
 </form>
 </body>
 </html>

这是PHP代码。

 <?php
 if(isset($_POST['checker'])) {

 #Clean all values
 function cleanStr($str){
 $str = trim($str);
 $str = addslashes($str);
 $str = htmlspecialchars($str);
 return $str;
 }
 $val_1=cleanStr($_POST['val_1']);
 $val_2=cleanStr($_POST['val_2']);
 $operator=$_POST['operator'];

 function emptyFileds($ar){
 if(!is_array($ar)){
    echo "It must be an array";
    return false;
 }
 #loop through each field to check for empty values
 foreach($ar as $key => $value){
    $value = CleanStr($value);
    if(empty($value)){
        echo $key . " must not be empty";
        return false;
    }
    }
    return true;
    }
    if(!emptyFileds($_POST)){
    exit();
    }
    if($operator==="+"){
    echo "Sum is " . $val_1+$val_2;
    }
    }
    ?>

1 个答案:

答案 0 :(得分:2)

请更改原始

echo "Sum is " . $val_1+$val_2;

echo "Sum is " . ($val_1+$val_2);

这是一个运算符优先级问题,因为.首先执行。因此,您将2附加到“Sum is”,然后将字符串增加8,这会导致这种奇怪的行为。

另外,对你的代码有些挑剔,我只想说出3个问题:

  1. 使用cleanStr()请求参数不是一个好主意,最好使用

    $val_1 = (int)trim($_POST['val_1']);

    因为$val_1将是该行之后的整数。这对于后期开发可能很重要,例如:比较数字。

  2. 缩进正确,阅读你的代码会伤害我的眼睛

  3. 整个emptyFileds()是不必要的,只需检查3个参数是否填充,它很简单且可读。