我正在使用一个函数来验证表单的每个部分。对于这个特定的表单,电话号码是一个可选条目。所以我想出了以下功能:
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());
}
我的意图是,每当用户没有输入任何内容时,数据库的条目都将"未指定"。我是不是做错了什么?
if (!empty(trim($phone))
将匹配$phone=0,",null,false,所以这将是一个包罗万象的
更重要的是,您应该考虑进行测试驱动的开发,因为这将提高您的开发速度并减少错误。签出PHPUnit-https://github.com/sebastianbergmann/phpunit/
问题是由于比较器==
松动引起的。
如果$phone
=null
(就像没有发布值一样(,则$phone == ''
的计算结果为true。因为CCD_ 5与CCD_。您要么需要使用严格的比较===
,要么最好使用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
的返回值"not specified",您将不会触发该条件。
将if ($phone != '') {
更改为if (trim($phone) != '') {