验证:似乎忽略了字母字符不是数字的事实

时间:2015-02-20 12:37:27

标签: php validation

根据标题,当用户在两个计算字段中的任何一个中输入恶意输入(而不是1或0)时,我遇到了在二进制计算器中触发错误的问题。

输入应限制为1或0.为什么当我输入' a'时,计算是否仍会进行?

$submit = htmlspecialchars(strip_tags(stripslashes($_POST['submit'])));
$val1 = htmlspecialchars(strip_tags(stripslashes($_POST['val1'])));
$val2 = htmlspecialchars(strip_tags(stripslashes($_POST['val2'])));
$val1_length = strlen($val1);
$val2_length = strlen($val2);
$val1 = array_reverse(str_split($val1, 1));
$val2 = array_reverse(str_split($val2, 1));

// Val 1 - Checking
$count = 0; // count variable counts how many times the loop recurs and stops it appropriately
while ($count < $val1_length) {
if(($val1[$count] != 0) && ($val1[$count] != 1) && (is_numeric($binary_input))) { // checks if input is comprised of 0 or 1
    showInputError();   
    exit(); // input does not contain 0 or 1, abort script and do not attempt further calculations
}
$count = $count + 1; // increment the count variable after one successful loop
} // Val1 was fine

2 个答案:

答案 0 :(得分:1)

继续因为a不是数字。 检查这一行:

if(($val1[$count] != 0) && ($val1[$count] != 1) && (is_numeric($binary_input))) {

转换为:如果不等于0且不等于1且为数字a:不等于0且不等于1且数字 - &gt;继续进行。

更改为:

if(!is_numeric($val1[$count]) || !in_array(intval($val1[$count]),array(0,1)))

我不知道$binary_input是什么,请解释一下。

答案 1 :(得分:1)

$binary_input来自哪里?我想你应该在那里检查$val1$val2,并且因为你想要显示错误,如果输入它不是数字,你应该检查!(is_numeric($val1) && is_numeric($val2)) ...