0

我需要对多个输入字段执行 num_row 检查,以检查所有字段是否都有数据库中的电子邮件。如果一个字段不在数据库中,它应该回显该值不是注册的电子邮件。如果该字段为空,它会忽略它,除非所有字段都为空,在这种情况下它会回显一条消息。我所做的有缺陷,因为如果第一个输入字段为空,它就不起作用。有更好的方法吗?

foreach($_POST as $value){
        $usercheck =  "SELECT email FROM users WHERE email = '$value'";
        $usercheck = $db->query($usercheck);

        if($usercheck->num_rows !== 0 || $value =="") 
          {
            $valid="1";
          }
               break;
       }

     if(empty($value))
 {
    echo "none filled in";
 }  else
    if ($valid == "1")
{
   echo "all good";
}  else
{
  echo $value." is not a user";
}
4

3 回答 3

0

类似于以下内容:

$list = implode('`,`', $_POST);
$usercheck =  "SELECT email FROM users WHERE email IN ('$value')";
$usercheck = $db->query($usercheck);

if(empty($_POST)) {
    echo "all good";
} elseif($usercheck->num_rows > 0) {
    echo "none filled in";
} else {
    echo "$value is not a user";
}

请注意,您的代码是不安全的,可能会被 SQL 注入利用。为了防止这种情况,您可以:

于 2013-01-27T02:47:14.853 回答
0

在 foreach 循环内,

你似乎在第一次迭代本身就中断了。我想知道它会怎么去下一个。我删除了中断并将其他代码移到了它之外的 foreach 循环中。

  foreach($_POST as $value){
            $usercheck =  "SELECT email FROM users WHERE email = '$value'";
            $usercheck = $db->query($usercheck);

            if($usercheck->num_rows !== 0 || $value =="") 
              {
                $valid="1";
              }
        if(empty($value))
     {
        echo "none filled in";
     }  else
        if ($valid == "1")
    {
       echo "all good";
    }  else
    {
      echo $value." is not a user";
    }



       }
于 2013-01-27T02:51:37.313 回答
0

确实。

// Dump all of $_POST into a long, concatenated string
// results in: field1','field2','field3
$group = implode( "','", $_POST );

$sql_statement = "SELECT email FROM users WHERE email IN ('$group'); ";
$results = $db->query( $sql_statement );

if ( $results->num_rows > 0 ){
    // valid
} else {
    // not valid
}
于 2013-01-27T02:40:12.447 回答