所以我想确保输入的电子邮件和输入的用户名都没有被删除。我不确定为什么它不起作用,我一次只能成功完成一项工作。
session_start();
$con = mysqli_connect('localhost','root','');
-
$Email = $_POST['email'];
$Username = $_POST['username'];
-
$sqltwo = "SELECT Username FROM user WHERE `Username`='$Username'";
$resulttwo = $con->query($sqltwo);
if ($resulttwo->num_rows == 0) {
$UsernameTaken = false;
} else {
$_SESSION['usravailability'] = "Username already taken." ;
header ('location: index');
}
$sqlthree = "SELECT Email FROM user WHERE `Email`='$Email'";
$resultthree = $con->query($sqlthree);
if ($resultthree->num_rows == 0) {
$EmailTaken = false;
} else {
$_SESSION['emlavailability'] = "Username already taken." ;
header ('location: index');
}
if ($UsernameTaken == false && $EmailTaken == false) {
echo 'not taken;
} else {
echo 'taken';
}
我也试过
if ($UsernameTaken == false || $EmailTaken == false) {
echo 'not taken;
} else {
echo 'taken';
}
也没有用。我可能做错了什么,但我不知道是什么。
答案 0 :(得分:1)
我认为更简单的版本是有一个sql语句:
$sqlquery = "SELECT Username, Email FROM user WHERE `Username`='$Username` OR `Email`='$Username`";
然后检查是否找到任何行并将该值存储在新变量中(例如,hasExists)。
对于消息,如果找到任何行,检查$ Username变量是否与行中的用户名匹配,然后输出"用户名已存在"的消息,否则如果电子邮件匹配,则输出那个"电子邮件已经存在"。
像这样你只需要一个查询,减少与数据库的连接,只有一个要检查的变量,已经存在'
答案 1 :(得分:1)
我看到的一些问题可以改善您的脚本。
1st - 在运行查询之前选择数据库
2nd - 使用预准备语句清理用户输入,或者至少使用mysqli_real_escape_string。
第3名 - 正如@CliveCiappara在他的回答中写道,一个查询就足够了。
第4步 - 在你的回音中添加一个'回声'未被采取';)
session_start();
$con = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$Email = $con->mysqli_real_escape_string($_POST['email']);
$Username = $con->mysqli_real_escape_string($_POST['username']);
$q = "SELECT Username, Email
FROM user
WHERE `Username`='$Username'
OR `Email`='$Email'";
$r = $con->query("$q");
echo ($r->num_rows === 0) ? "Not Taken" : "Taken";
答案 2 :(得分:1)
'
之后你似乎错过了not taken
(没有正确终止你的字符串)。这可能与你的问题有关吗?