php
  • mysql
  • 2012-05-02 121 views 5 likes 
    5

    我试图创建用户名或电子邮件登录用的用户名或电子邮件地址在PHP

    我的代码登录为:

    $username=$_REQUEST['login']; 
    $email=$_REQUEST['login']; 
    $password=$_REQUEST['password']; 
    
    if($username && $password) { 
        $query="select * from user_db where username='$username' and password='$password'"; 
    } else if ($email && $password) { 
        $query="select * from user_db where email='$email' and password='$password'"; 
    } 
    

    登录用的用户名是成功的,但与电子邮件不工作密码。请帮帮我!

    +0

    $ email = $ _ REQUEST ['login'];这真的是电子邮件吗? –

    +0

    是的,我有user_db表中的电子邮件 –

    +0

    检查$ _REQUEST ['login']是否设置 - isset($ _ REQUEST ['login']),并且只设置$ username。 – dweiss

    回答

    19

    电子邮件和用户名的登录参数相同。如果您有一个接受其中一个的单一登录框,则不完全不正确。

    如果您不确定它是否是电子邮件或用户名,您可以将条件放入查询本身。

    $login=$_REQUEST['login']; 
    $query = "select * from user_db where (username='$login' OR email = '$login') and password='$password'" 
    

    编辑: 甲PDO状溶液更加优选时下与上述受SQL注入。逻辑保持不变,但你必须看起来是这样的:

    $query = " 
        SET @username = :username 
        SELECT * FROM user_db 
         WHERE (username = @username OR email = @username) 
         AND password = :password 
    "; 
    
    $statement = $pdoObject->prepare($query); 
    $statement->bindValue(":username", $login, PDO::PARAM_STR); 
    $statement->bindValue(":password", $password, PDO::PARAM_STR); 
    $statement->execute(); 
    
    +0

    它是伟大的工作......感谢分享 –

    +0

    什么将索引哪里..或 – Alien

    0
    $username=$_REQUEST['login']; 
    $email=$_REQUEST['login']; 
    

    这是不对的,你正在使用$_REQUEST['login']的电子邮件和用户名。你为什么不使用电子邮件?

    如果$_REQUEST['login']没有电子邮件地址,当然这不会返回任何东西。

    此外,两个if语句将始终执行,除非字段为空。对?

    取出登录,强制用户使用电子邮件地址登录。还要取密码的md5。谁最近存储原始密码?

    +0

    @ Darth Vader我想为用户提供一个选项,只有一个参数要么登录用户名或电子邮件 –

    2

    您正在为两个变量设置相同的值,然后使用if/else。两个if语句都是等价的。

    您需要弄清楚$_REQUEST[login]是否包含有效的电子邮件地址,如果是,请使用数据库的电子邮件字段。否则,请使用用户名字段。

    此外,你不应该把变量直接放入查询。使用预准备的语句

    -1
    $username=$_REQUEST['username'];//I'm assuming your code here was wrong 
    $email=$_REQUEST['email'];//and that you have three different fields in your form 
    $password=$_REQUEST['password']; 
    
    if (validate_username($username)) { 
        $query="select * from user_db where username='".$username".' and password='".validate_password($password)."'"; 
    } else if (validate_email($email)) { 
        $query="select * from user_db where email='".$email."' and password='".validate_password($password)."'"; 
    } 
    
    //... elsewhere... 
    
    function validate_username(&$username) { 
        if (strlen($username) <= 1) { return false; } 
        //return false for other situations 
        //Does the username have invalid characters? 
        //Is the username a sql injection attack? 
        //otherwise... 
        return true; 
    } 
    
    function validate_email(&$email) { 
        //same deal as with username 
    } 
    
    function validate_password(&$password) { 
        //same deal as with username 
    } 
    

    注意,如果你只有两个字段(用户名和密码),然后电子邮件和用户名之间的区别是没有意义的。此外请注意,您应该真的使用PHP PDO来构建和执行您的查询,以防止安全漏洞并使您的生活变得更轻松。

    0
    if (validate_username($username)) { 
        $query="select * from user_db where username='".$username".' and password='".validate_password($password)."'"; 
    } else if (validate_email($email)) { 
        $query="select * from user_db where email='".$email."' and password='".validate_password($password)."'"; 
    } 
    
    +0

    什么是验证方法,你需要解释它们。另外你不应该把变量连接到查询中。这不安全。 – scriptmonster

    0

    嗯,我知道这是一个老的文章,但我发现,有些人还是会认为它,所以我希望把一个简单的方法来允许在相同的输入电子邮件和用户名

    我的代码如下

    if 
        (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $name_of_same_input)) 
        { 
        $un_check = mysql_query("SELECT uname FROM eusers WHERE uname = '' ") or die(mysql_error()); 
    
        echo "loging in with username"; //code 
        } 
        elseif 
        (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $name_of_same_input)) 
        { 
        $un_check = mysql_query("SELECT umail FROM eusers WHERE umail = '' ") or die(mysql_error()); 
    
        echo "loging in with email"; //code 
    
        } 
    
    相关问题