我有两种获取球员用户名的方法,一种是在他们登录时,另一种是在他们使用电子邮件登录时。然而,当他们作为新玩家登录时,它会连接到Minecraft.net数据库并检查用户名/密码/电子邮件是否正确,如果是,它会将它们添加到我们的数据库而不需要密码。
但是我似乎无法使第二个MYSQL查询起作用,没有mysql错误或连接错误,但是当内部有一行时,行继续显示为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)
{
答案 0 :(得分: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);
答案 1 :(得分:0)
如果你没有错误和0行,那么查询“工作”,它根本找不到符合条件的任何行。 你需要做的是回应查询:
echo "SELECT * FROM users WHERE user_name='$username'";
然后,您将准确地看到它正在搜索的内容。实际上,使用回显的查询并尝试使用类似phpMyAdmin的方式对数据库运行它。
但是,我注意到的一点是你的逻辑说,如果你没有在发布的用户名字段中找到@,那么在user_email列中查找用户名,如果有@,那么请在user_name字段。也许你的支票应该是:
if (strpos($_POST['username'],'@') !== false) {