【问题标题】:PHP: very basic validationPHP:非常基本的验证
【发布时间】:2015-01-24 02:33:46
【问题描述】:

所以我正在尝试将 $_POST 值与我的数据库进行比较,如果匹配,则回显“已采用。输入另一个”。但这似乎不起作用..所以我正在尝试将 $_POST 值与我的数据库进行比较,如果匹配,则回显“已采用。输入另一个”。但它似乎不起作用..

//if form has been submitted process it
if(isset($_POST['submit'])){


    //collect form data
    extract($_POST);

    //very basic validation

if($idnumber ==''){
        $error[] = 'Please enter the ID Number.';
    }

    if($password ==''){
        $error[] = 'Please enter the password.';
    }

    if($passwordConfirm ==''){
        $error[] = 'Please confirm the password.';
    }

    if($password != $passwordConfirm){
        $error[] = 'Passwords do not match.';
    }

    if($fullname ==''){
        $error[] = 'Please enter the Full Name.';
    }
    if($role ==''){
        $error[] = 'Please select a role type.';
    }

$idmatch=$mysqli->query('SELECT idNUMBER from members where idnumber=$idnumber');
if (mysqli_num_rows($idmatch)==1) {
  echo'Id number already taken';
}?>

【问题讨论】:

  • idNUMBERidnumber 在某些服务器上可能不一样。
  • idNUMBER 和 idnumber?
  • 您不能在带有单引号的字符串中插入变量。无论如何,这都是一个坏主意,因为它使您容易受到 SQL 注入的影响。您应该改用绑定参数。见stackoverflow.com/q/60174/3794472
  • 第一个 if 的右括号 } 也丢失了
  • 您需要检查错误。 IE。 if(!$result = $mysqli->query($idmatch)){ die('There was an error running the query [' . $mysqli->error . ']'); } - 另外,请确保 id 号是 int 而不是字符串。

标签: php validation mysqli


【解决方案1】:

我相信 sql 是区分大小写的! 您正在使用 "idNUMBER" ,然后使用 "idnumber" 进行过滤。

【讨论】:

  • @meda stackoverflow.com/a/2009011 并取决于数据库排序规则。另见dev.mysql.com/doc/refman/5.0/en/…
  • 你对的弗雷德,我想我在考虑 SQL 语法本身
  • @meda OP 的问题可能是多种因素的混合。 OP 未检查的是查询中的错误。
  • 卡洛斯,不在 Windows 上。如果 OP 不是 Windows,那么这将不适用。这就是为什么我在 OP 的问题下说 in a comment 的原因是:“idNUMBER 和 idnumber 在某些服务器上可能不一样。”
  • 我知道,这是蠕虫的罐头@Fred-ii- ;)
【解决方案2】:

我从不使用提取,不是很推荐,尤其是 POST 值。

我建议你直接使用post数组,使用isset()检查是否有值:

if(!isset($_POST['idnumber']){
    $error[] = 'Please enter the ID Number.';
}

if(!isset($_POST['password']){
    $error[] = 'Please enter the password.';
}

if(!isset($_POST['passwordConfirm']){
    $error[] = 'Please confirm the password.';
}

if($_POST['password']!= $_POST['passwordConfirm']){
    $error[] = 'Passwords do not match.';
}

if(!isset($_POST['fullname']){
    $error[] = 'Please enter the Full Name.';
}
if(!isset($_POST['role']){
    $error[] = 'Please select a role type.';
}

您还应该准备好您的查询,或者至少将其转义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2015-04-01
    相关资源
    最近更新 更多