2013-11-22 43 views
0

$error顯示所有的時間,而不是當腳本中發現錯誤時。我將else設置爲showForm,然後打算在<?php echo $error; ?>框中顯示$error上的代碼。PHP簡單登錄腳本,不顯示錯誤

感謝您提前給予的幫助,希望能儘快找到問題的答案。

<?php 

$Password = 'password'; // Password here 

    if (isset($_POST['submit_pwd'])){ 
     $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; 

     if ($pass != $Password) { 
     showForm("Wrong password"); 
     exit();  
     } 
    } else { 
     showForm(); 
     exit(); 
    } 

function showForm($error="Error, please try again."){ 
?> 

<!DOCTYPE html> 
<head> 
HEAD CONTENT HERE 
</head> 
<body> 
    <section class="container"> 
    <div class="login"> 
     <h1>Login Area</h1> 
     <br /> 
     <div class="error"> 
     <h2><?php echo $error; ?></h2> 
     </div> 
     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="pwd"> 
     <p><input type="password" name="pass" value="" placeholder="Password"></p> 
     <p class="submit"><input type="submit" name="submit_pwd" value="Login"></p> 
     </form> 
    </div> 
    </section> 
</body> 
</html> 

<?php 
} 
?> 
+0

真的很奇怪的編碼實踐有一個什麼都不做,但基本上產生一個HTML文件的功能。爲什麼不在這裏使用include?如果有像'login_form.php'這樣的文件,然後只是'include'login_form.php'而不是進行函數調用? –

+0

Mike,上面的代碼是登錄表單,我在我保護的頁面上使用require_once('protect.php')。 – mjwrocks

回答

4

你有一個默認的錯誤值..所以當你第一次加載頁面,$ _POST沒有設置。進入函數的$ error值最初應該是空白的,並且只有在出現錯誤時纔會設置。另外,我會將h2標籤添加到函數調用中。這樣,當沒有錯誤時,空h2不會佔用任何空間。

<?php 

$Password = 'test'; // Password here 

    if (isset($_POST['submit_pwd'])){ 
     $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; 

     if ($pass != $Password) { 
     showForm("<h2>Wrong password</h2>"); 
     exit();  
     } 
    } else { 
     showForm(); 
     exit(); 
    } 

function showForm($error=""){ 
?> 

<!DOCTYPE html> 
<head> 
HEAD CONTENT HERE 
</head> 
<body> 
    <section class="container"> 
    <div class="login"> 
     <h1>Login Area</h1> 
     <br /> 
     <div class="error"> 
     <?php echo $error; ?> 
     </div> 
     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="pwd"> 
     <p><input type="password" name="pass" value="" placeholder="Password"></p> 
     <p class="submit"><input type="submit" name="submit_pwd" value="Login"></p> 
     </form> 
    </div> 
    </section> 
</body> 
</html> 

<?php 
} 

?> 
+0

感謝您的幫助。 – mjwrocks

+0

沒問題,很高興我可以幫助..不要忘記接受答案,如果它伎倆。 – Mattt

1

正如mjayt在他的回答中解釋的那樣,您的showForm()函數將始終輸出錯誤消息。

如果沒有錯誤,請不要調用showForm()函數。

因此,代碼改變爲:

if (isset($_POST['submit_pwd'])){ 
     $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; 

     if ($pass != $Password) { 
     showForm("Wrong password"); 
     exit();  
     } 
    } 

換句話說,沒有必要爲else條件。或者,您可以將其他代碼塊留在那裏,但什麼也不做。

exit()命令不是必需的,因爲它是您最後一次代碼執行的操作。無論如何,它會停止。但是,如果您稍後添加其他PHP代碼,則如果您不想處理該代碼,則可能需要exit()。