0

複数の入力フィールドに対してnum_rowチェックを実行して、すべてのフィールドにデータベース内の電子メールがあるかどうかを確認する必要があります。また、1つのフィールドがデータベースにない場合は、その値が登録済みの電子メールではないことをエコーする必要があります。また、フィールドが空の場合は、すべてのフィールドが空でない限り無視されます。空の場合は、メッセージがエコーされます。最初の入力フィールドが空の場合は機能しないため、私が作成したものには欠陥があります。これにもっと良い方法はありますか?

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

foreachループ内で、

uは最初の反復自体で壊れているようです。次のものにどうやって行くのだろうか。ブレークを削除し、他のコードを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 に答える
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 に答える