简体   繁体   English

如何使用PHP在我的if语句中显示两个回声中的一个?

[英]How to show one echo out of two from my if statement using PHP?

I'm having a school project and I'm making a login system where you can login with email or username. 我正在进行一个学校项目,并且正在制作一个登录系统,您可以在其中使用电子邮件或用户名登录。 But I'm having a problem with showing the correct echo that the email or username is incorrect. 但是我在显示正确的回声(电子邮件或用户名不正确)时遇到问题。

Here's my code: 这是我的代码:

if(strpos($emailOrUsername, "@")){
    $query = $dbh->prepare('SELECT * FROM register WHERE email = ?');
    $query->execute(array($emailOrUsername));
}

        if($query->rowCount() == 0){
                echo('Email is incorrect');

             }


if($emailOrUsername){
    $query2 = $dbh->prepare('SELECT * FROM register WHERE username = ?');
    $query2->execute(array($emailOrUsername));
}
        if($query2->rowCount() == 0){
                echo('Gebruikersnaam bestaat niet');

             }

Now I want to show only one echo. 现在我只想显示一个回声。 Because if you fill in the wrong email and username it's going to show both echo's and I want it to show only one. 因为如果您输入错误的电子邮件和用户名,它将显示两个回显,而我只希望它显示一个。

You don't need to. 不用了 Query for both in one query and if no rows are returned then you answer that "No such user", otherwise you are helping the hacker one step closer to deduct which usernames or emails are correct or not. 在一个查询中查询,如果没有返回任何行,则回答“没有这样的用户”,否则,您正在帮助黑客更进一步,以推断出哪些用户名或电子邮件正确无误。

Addition: 加成:

Don't reveal if the username/email or password was incorrect. 不要透露用户名/电子邮件或密码是否错误。 Just give a general error message. 只需给出一般错误消息即可。

I think you have to change 我认为你必须改变

if(strpos($emailOrUsername, "@"))

to

if(strpos($emailOrUsername, "@") !==false)

and

if($emailOrUsername)

to

elseif($emailOrUsername) or elseif(!empty($emailOrUsername)) elseif($emailOrUsername)elseif(!empty($emailOrUsername))

Although there is plenty of room to improvise your query, yet I have refined it to fit your needs as of now. 尽管有很多空间可以即兴查询,但到目前为止,我已经对其进行了改进以满足您的需求。

if(strpos($emailOrUsername, "@")){
    $query = $dbh->prepare('SELECT * FROM register WHERE email = ?');
    $query->execute(array($emailOrUsername));

    if($query->rowCount() == 0){
        echo('Email is incorrect');
    }
}
else {
    $query2 = $dbh->prepare('SELECT * FROM register WHERE username = ?');
    $query2->execute(array($emailOrUsername));

    if($query2->rowCount() == 0){
        echo('Gebruikersnaam bestaat niet');
    }
}

You don't need to have multiple if conditions when you can achieve this in one if else block. 您可以在一个if else块中实现多个if条件,而无需多个条件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM