所以我有一个用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;
}
}
?>
答案 0 :(得分:2)
请更改原始
echo "Sum is " . $val_1+$val_2;
到
echo "Sum is " . ($val_1+$val_2);
这是一个运算符优先级问题,因为.
首先执行。因此,您将2附加到“Sum is”,然后将字符串增加8,这会导致这种奇怪的行为。
另外,对你的代码有些挑剔,我只想说出3个问题:
使用cleanStr()
请求参数不是一个好主意,最好使用
$val_1 = (int)trim($_POST['val_1']);
因为$val_1
将是该行之后的整数。这对于后期开发可能很重要,例如:比较数字。
缩进正确,阅读你的代码会伤害我的眼睛
emptyFileds()
是不必要的,只需检查3个参数是否填充,它很简单且可读。