我怎样才能使这个PDO mysql查询与if语句正确工作


How can I make this PDO mysql query with if statements work correctly?

我正在为一个小项目从头开始构建一个网站。

我偶然发现了一个小问题,绞尽脑汁也无济于事!这是我的代码;
else if (isset($_POST['hidden']) && $_POST['hidden'] = 1) {
$q = $dbc -> prepare("SELECT username FROM accounts WHERE username = ?");
$q -> execute(array($_POST['username']));
    if ($q -> rowCount() > 0) {
        echo 'USERNAME TAKEN<br />';
    }
$q = $dbc -> prepare("SELECT email FROM accounts WHERE email = ?");
$q -> execute(array($_POST['email']));
    if ($q -> rowCount() > 0) {
        echo 'EMAIL TAKEN<br />';
    }
    else {
        $q = $dbc -> prepare("INSERT INTO accounts (fname, lname, email, password, username, gender) VALUES (?, ?, ?, ?, ?, ?)");       $q -> execute(array($_POST['fname'], $_POST['lname'], $_POST['email'], $_POST['password'], $_POST['username'], $_POST['gender']));
        echo 'YOUR ACCOUNT NEEDS ACTIVATING';
    }
}

现在我的问题在于检查用户名和电子邮件是否已经被占用。

我有一个if语句来检查用户名。

我有一个if语句来检查电子邮件。

如果一切正常,我还有一条语句用于将数据插入mysql表。

问题是用户名是一样的,电子邮件不是然后else语句仍然触发,我知道它就像我在html文档

'USERNAME TAKEN' &"账号需要激活"

我想把它们放在'else if'语句中,但我需要用户名和电子邮件一起工作,而不是一个工作,然后不是另一个。有什么想法?

这是你要找的吗?

else if (isset($_POST['hidden']) && $_POST['hidden'] = 1) {

    $q = $dbc -> prepare("SELECT username FROM accounts WHERE username = ?");
    $q -> execute(array($_POST['username']));
    $username_taken = $q->rowCount() > 0;
    $q = $dbc -> prepare("SELECT email FROM accounts WHERE email = ?");
    $q -> execute(array($_POST['email']));
    $email_taken = $q->rowCount() > 0;
    if ($username_taken || $email_taken) {
        if ($username_taken) {
            echo 'USERNAME TAKEN<br />';
        }
        if ($email_taken) {
            echo 'EMAIL TAKEN<br />';
        }
    }
    else {
        $q = $dbc -> prepare("INSERT INTO accounts (fname, lname, email, password, username, gender) VALUES (?, ?, ?, ?, ?, ?)");       $q -> execute(array($_POST['fname'], $_POST['lname'], $_POST['email'], $_POST['password'], $_POST['username'], $_POST['gender']));
        echo 'YOUR ACCOUNT NEEDS ACTIVATING';
    }
}