我正在使用一个函数来验证表单的每个部分。对于此特定表单,电话号码是可选条目。所以我提出了以下功能:
if(isset($_POST['phone'])) { $phone = $_POST['phone']; }
//Call phone validation function
$phone = validPhone($phone);
if (strlen($phone) == 0) {
$mistakes[] = 'Your phone number must contain only NUMERIC characters.';
}
function validPhone($phone) {
if ($phone != '') {
$phone = trim($phone);
if (!ctype_digit(str_replace(' ', '', $phone))) {
$phone = '';
} else {
//accept phone entry and sanitize it
$phone = mysql_real_escape_string(stripslashes($phone));
}
} else {
$phone = 'not specified';
}
return $phone;
}
我的问题是,当你没有输入$ phone的东西时,这一点:
else {
$phone = 'not specified';
}
似乎跳过了,因为没有任何内容输入数据库。
以下是适当的数据库PHP:
//Insert Into Database
$sql="INSERT INTO signups (phone)
VALUES
(''".$phone."')";
if (!mysql_query($sql)) {
die('Error: ' . mysql_error());
}
我的意图是,无论何时用户输入任何内容,都将“未指定”数据库的条目。我做错了吗?
答案 0 :(得分:2)
if (!empty(trim($phone))
匹配的是$ phone = 0,“”,null,false所以它将是一个全部的
更重要的是,您应该考虑进行测试驱动开发,因为它将提高您的开发速度并减少错误。结帐PHPUnit - https://github.com/sebastianbergmann/phpunit/
答案 1 :(得分:0)
将if ($phone != '') {
更改为if (trim($phone) != '') {
答案 2 :(得分:0)
问题出现是因为比较器==
松散。
如果$phone
= null
(如果未发布该值,则$phone == ''
评估为true。因为''
与null
松散等同。您要么使用严格的比较===
,要么更好地使用empty()
。我在初始化变量时会亲自处理所有这些事情(包括清理输入值,因为将不安全数据进一步传递到应用程序中是没有意义的。以下是我的建议:
$phone = '';
if (!empty($_POST['phone'])) {
$phone = mysql_real_escape_string(stripslashes(trim($_POST['phone'])));
}
$phone = validPhone($phone);
if ($phone === '') {
$mistakes[] = 'Your phone number must contain only NUMERIC characters.';
}
function validPhone($phone) {
if ($phone === '') {
return 'not specified';
} else if (!ctype_digit(str_replace(' ', '', $phone))) {
return '';
} else {
return $phone;
}
}
另外,您应该考虑使用mysqli或PDO等效替换代码中已弃用的mysql_*
函数。请注意,您还需要更改代码以填充$mistake
,就像$phone
的返回值“未指定”一样,您不会触发该条件。