【问题标题】:Php - form validation, inconsistent resultsphp - 表单验证,结果不一致
【发布时间】:2015-12-21 07:19:17
【问题描述】:

我最近创建了一个 PHP 表单(我的第一个表单),我想要一个电话号码验证功能。现在,我已经编写了代码。但它可以运行两三次,然后停止一起工作。我没有收到任何错误。它只接受我输入的任何内容。其余的验证(名称和单选按钮条目)可以正常工作。我正在检查一个 10 位数字(无特殊字符)。验证必须检查条目的长度,并应确保只输入数字。

我在这里做错了什么?

if (empty($_POST["mobile"])) {
    $mobileerr = "Mobile number is required";
} else {
    $mobile = test_input($_POST["mobile"]);
    if (preg_match('/[^0-9]{10}/', $mobile)) {
        $mobileerr = "Please enter a valid 10-digit mobile number";
    } else {
        $postmobile = true;
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

【问题讨论】:

  • 请使用 firebug 检查任何其他 javascript 错误。如果您在加载页面时遇到任何 java 脚本错误,它将无法按预期工作。
  • 感谢您的回复。我没有包含任何javascript。该页面包含 HTML、CSS 和 PHP。但是,我注意到如果我删除代码并再次输入,它就会开始工作。到目前为止,这种情况已经发生了两次。

标签: php validation


【解决方案1】:

如何更改此代码:

if (preg_match('/[^0-9]{10}/', $mobile)) {
        $mobileerr = "Please enter a valid 10-digit mobile number";
    }

用这个;

if(strlen($mobile) != 10 || $mobile != ctype_digit($mobile)) {
$mobilerr = "Please..";
}

它将检查用户输入的长度是否为 10 个字符以及是否仅包含数字。

【讨论】:

  • 感谢您的提示,LetsSeao,这不起作用。我输入了一个完整的 10 位数字,但它仍然给出了一个错误,要求输入一个有效的条目。
  • 更新:这行得通。我犯了一个小错误,导致它失败了。现在我必须检查它是否继续工作而不会像以前那样失败。谢谢你,LetsSeo!
  • 我很高兴能提供帮助。如果你愿意,可以接受我的回答:)
  • 接受!我希望它始终如一地工作。谢谢! :)
【解决方案2】:

初始化

$postmobile = 假;

在开始,然后在结束时检查它是真还是假。

您修改后的代码版本可能是

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

$postmobile = false;
if (empty($_POST["mobile"])) {
    $mobileerr = "Mobile number is required";
} else {
    $mobile = test_input($_POST["mobile"]);
    if (preg_match('/[^0-9]{10}/', $mobile)) {
        $mobileerr = "Please enter a valid 10-digit mobile number";
    } else {
        $postmobile = true;
    }
}

if ($postmobile === false) {
    die("Invalid Mobile Number"); //Here you can postback error message and skip further execution.
}

【讨论】:

  • 我已经将 $postmobile 设置为 false。我很抱歉我没有提到它。但问题不在于 $postmobile。验证本身没有返回所需的结果,我无法弄清楚原因。
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
相关资源
最近更新 更多