0

プレイヤーのユーザー名を取得する方法は 2 つあります。1 つはログイン時、もう 1 つは電子メールを使用してログインするときです。しかし、彼らが新しいプレイヤーとしてログインすると、Minecraft.net データベースに接続し、ユーザー名/パスワード/電子メールが正しいかどうかを確認します。正しい場合は、パスワードなしでデータベースに追加されます。

しかし、2 番目の MYSQL クエリを動作させることができないようです。mysql エラーや接続エラーはありませんが、内部に 1 行ある場合、行は 0 として出力され続けます。

if (strpos($_POST['username'],'@') === false) {
                $username = $_POST['username'];
                $res = mysql_query("SELECT * FROM users WHERE user_email='$username'");
                $ign_exists_check = mysql_num_rows($res);
                $username_exists_check = 0;
                if(!$res) die ('Unable to run query1:'.mysql_error());
            }
            else {
                $username = $_POST['username'];
                $res2 = mysql_query("SELECT * FROM users WHERE user_name='$username'");
                $username_exists_check = mysql_num_rows($res2);
                $ign_exists_check = 0;
                if(!$res2) die ('Unable to run query1:'.mysql_error());
            }
            die($username_exists_check . $ign_exists_check);
            if ($usernamea_exists_check == 0 && $ign_exists_check == 0)
                {
4

2 に答える 2

0

あなたの論理は逆さまに見えます。

ユーザー名に @ が含まれていない場合user_email
は、コード内での繰り返しが多すぎます。

if (strpos($_POST['username'],'@') === false) {
    $username = mysql_real_escape_string($_POST['username']);
    $sql = "SELECT * FROM users WHERE user_name='$username'"
    $username_exists_check = 1;
} else {
    $email = mysql_real_escape_string($_POST['username']);
    $sql = "SELECT * FROM users WHERE user_email='$email'"
    $username_exists_check = 0;
}
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
$user = mysql_fetch_array($res);
if ($user) {
    $ign_exists_check = !$username_exists_check;
} else {
    $ign_exists_check = $username_exists_check = 0;
}
var_dump($row,$username_exists_check,$ign_exists_check);
于 2013-03-07T14:52:28.833 に答える
0

エラーが発生せず、行が 0 だった場合、クエリは「機能しました」。基準に一致する行が見つからなかっただけです。あなたがする必要があるのは、次のようにクエリをエコーアウトすることです:

echo "SELECT * FROM users WHERE user_name='$username'";

その後、何を探しているかを正確に確認できます。実際、エコーされたクエリを取得し、phpMyAdmin などを使用してデータベースに対して実行してみてください。

ただし、投稿されたユーザー名フィールドに @ が見つからない場合は、user_email 列でユーザー名を検索し、@ がある場合は user_name フィールドで検索するというロジックがあることに気付きました。多分あなたのチェックは次のようになるはずです:

if (strpos($_POST['username'],'@') !== false) {
于 2013-03-07T14:53:02.577 に答える