0

我有两种获取玩家用户名的方法,一种是在他们登录时,另一种是在他们使用电子邮件登录时。然而,当他们以新玩家身份登录时,它会连接到 Minecraft.net 数据库并检查用户名/密码/电子邮件是否正确,如果正确,它将在没有密码的情况下将它们添加到我们的数据库中。

但我似乎无法让第二个 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 回答