确保既没有收到电子邮件也没有用户名

时间:2017-09-30 00:12:29

标签: php mysql

所以我想确保输入的电子邮件和输入的用户名都没有被删除。我不确定为什么它不起作用,我一次只能成功完成一项工作。

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';
}

也没有用。我可能做错了什么,但我不知道是什么。

3 个答案:

答案 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(没有正确终止你的字符串)。这可能与你的问题有关吗?