0

我正在使用一个函数来验证表单的每个部分。对于此特定表格,电话号码是可选条目。所以我想出了以下功能:

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());
}

我的意图是每当用户没有输入任何内容时,数据库的条目将是“未指定”的。我做错了什么吗?

4

3 回答 3

2
if (!empty(trim($phone))

将匹配 $phone = 0, "", null, false 所以这将是一个包罗万象的

更重要的是,您应该考虑进行测试驱动开发,因为它将提高您的开发速度并减少错误。结帐 PHPUnit - https://github.com/sebastianbergmann/phpunit/

于 2013-04-17T00:39:00.703 回答
0

更改if ($phone != '') {if (trim($phone) != '') {

于 2013-04-17T00:37:22.153 回答
0

问题的出现是因为比较器松散==

如果$phone= null(就像没有发布值一样),$phone == ''评估为真。因为''大致相当于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;
    }
}

此外,您应该真正考虑mysql_*用 mysqli 或 PDO 等效项替换代码中已弃用的函数。请注意,您还需要将代码更改为 populate $mistake,因为对于 'not specified' 的返回值$phone,您不会触发该条件。

于 2013-04-17T01:01:47.980 回答