2015-09-06 93 views
0

我正在學習php新功能。在使用isset之後的下面的腳本中,不是顯示welcome abc,而是顯示welcome1。無法理解問題。我如何解決它「歡迎ABC」。任何幫助?使用isset後用戶名不顯示

   <?php 
        session_start(); 

       $username = isset($_POST['username']); 
       $password = isset($_POST['password']); 

       if($username == "abc" && $password =="123") { 
        echo 'Welcome' .$username ; 
        echo '<br>'; 
        echo '<a href="logout.php">Logout</a>'; 
       } 
       else 
        die ('wrong password'); 

       ?> 
+0

按預期方式在此處運行,https://eval.in/428962。你能製作一個可重複的版本嗎? – chris85

+0

因爲'isset()'會返回一個布爾值,表示它是否被設置,這與預期完全相同。但是你永遠不會去使用這個代碼的地方。 –

+0

@SamiKuhmonen可以改變這裏的代碼,但如果這是OP會得到'錯誤的密碼'​​條件檢查用戶名,'$用戶名==「abc」' – chris85

回答

0

如果你想與歡迎一起打印的用戶名,你需要改變你的代碼第四行這一個:

$username = isset($_POST['username']) ? $_POST['username'] : ''; 

OR

$username = $_POST['username']; 

現有的代碼正在評估的表達式返回true,並且存儲在用戶名中,所以如果將username用作字符串,它將返回爲「1」。

+0

它現在正在工作......感謝您的幫助 – Nazmul

1

Isset回報truefalse如果變量設置,它不會返回實際的可變數據。

在下面的代碼我用三元操作返回POST方法值或空字符串,如果值不POST方法

session_start(); 

$username = (isset($_POST['username'])) ? $_POST['username'] : ''; 
$password = (isset($_POST['password'])) ? $_POST['password'] : ''; 

if($username == "abc" && $password =="123") { 
    echo 'Welcome' .$username ; 
    echo '<br>'; 
    echo '<a href="logout.php">Logout</a>'; 
} 
else 
    die ('wrong password'); 
1

isset() returns a boolean value。因此,您將$username$password變量設置爲值truefalse。因此他們永遠不會等於字符串​​或"123"

檢查isset()與檢查值分開。這可能是這樣簡單的事情:

if (!isset($_POST['username']) || !isset($_POST['password'])) { 
    die ('Please supply a username and password.'); 
} 

$username = $_POST['username']; 
$password = $_POST['username']; 

// etc... 

作爲一個附註,錯誤消息「錯誤的密碼」是​​誤導。首先,它可能是錯誤的用戶名。其次,絕不要向未經授權的用戶提供比他們已有的更多信息。如果你告訴攻擊者他們有一個正確的用戶名並且密碼錯誤,那麼你已經給他們提供了登錄信息。如果登錄中有任何內容不匹配,只需說登錄失敗。

+0

感謝您的幫助David,嘗試了您的代碼。其工作也是如此。此代碼是測試目的,這就是爲什麼我使用該錯誤消息。感謝您的支持。 – Nazmul