没有正确返回PHP函数的值?

时间:2013-04-17 00:32:11

标签: php mysql validation

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

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

我的意图是,无论何时用户输入任何内容,都将“未指定”数据库的条目。我做错了吗?

3 个答案:

答案 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的返回值“未指定”一样,您不会触发该条件。