-2

ユーザーがユーザー名を忘れたときにユーザー名を返そうとしています。メールアドレスを再度検証しましたが、何らかの理由で「エラー: ユーザー名が見つかりません」と表示され続けます。私は正しいmysqli構文を使用しています。

if (isset($_POST['user'])) {
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $username = "";
    if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
        $errmsg = 'Error: ' . $email . ' is not a valid email address';
    } else {
        $query = "SELECT email FROM admin WHERE email = '$email'";
        $results = mysqli_query($con, $query);

        $query2 = mysqli_fetch_array($results);

        if ($query2 == 0) {
            $errmsg = 'Error: ' . $email . ' is not found, please try again';
        }
        if (!errmsg) {
            $getuname = "SELECT * FROM admin WHERE email = '$email'";
            if (!mysqli_query($con, $getuname)) {
                die('Error: ' . mysqli_error($con));
            }
            $row = mysql_fetch_array($getuname);
        }
        $username = '<div class="registersuccess">Your username is: ' . $row['username'] . '</div>';
    }
    $username = '<div class="registererror">Error: cannot find username</div>';

    mysqli_close($con);
}

私はこれに関して初心者ですが、これが正しいと確信しています。そうでない場合、どこで間違ったのですか?

4

4 に答える 4

0

私はあなたのコードにいくつかの間違いを見つけました.Mark BとAmal Muraliの答えで間違いを見ることができます. elseあなたのブロックをよりシンプルで明確にしましょう。2 つのクエリではなく、1 つのクエリのみを使用できます。

else {
    $query = mysqli_query("SELECT * FROM admin WHERE email = '$email'");
    $row = mysqli_fetch_array($query);
    $numrows = mysqli_num_rows($query);
    if (!$errmsg){
        if($numrows == 0) {
            $errmsg = 'Error: '.$email.' is not found, please try again'; 
                // or here you can add message like Cannot find username
        }
        else
        {
            $username = '<div class="registersuccess">Your username is: '.$row['username'].'</div>';
        }
 }  
于 2013-09-27T18:47:25.927 に答える
0

コードのこのセクションを変更します。

    if (!errmsg){
      $getuname = "SELECT * FROM admin WHERE email = '$email'";
      if (!mysqli_query($con,$getuname))
        {
          die('Error: ' . mysqli_error($con));
        }
      $row = mysql_fetch_array($getuname);
    }       
    $username = '<div class="registersuccess">Your username is: '.$row['username'].'</div>';
 }
 $username = '<div class="registererror">Error: cannot find username</div>';

に:

    if (!errmsg){
      $getuname = "SELECT * FROM admin WHERE email = '$email'";
      $uresult = mysqli_query($con, $getuname);
      if (!$uresult))
        {
          die('Error: ' . mysqli_error($con));
        }
      $row = mysqli_fetch_array($uresult);
      if ($row) {
        $username = '<div class="registersuccess">Your username is: '.$row['username'].'</div>';
      } else {
        $username = '<div class="registererror">Error: cannot find username</div>';
    }
  }

あなたの間違い:

  • mysql_fetch_arrayの代わりにあなたが電話していましmysqli_fetch_arrayた。
  • mysql_fetch_arrayの結果ではなく、SQL 文字列を に渡しましたmysqli_query
  • 行が返されたかどうかを確認していませんでした$username。最初は成功メッセージに、次に失敗メッセージに、無条件に設定していました。
于 2013-09-27T18:39:59.930 に答える