php
  • mysql
  • 2012-05-02 120 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 
    
        } 
    
    相關問題