2011-08-05 176 views
0

我有以下登錄表單指向文件'../exe/form-exec.php'。PHP登錄表單驗證失敗

<form id="loginForm" name="loginForm" method="post" action="../exe/login-exec.php"> 
    <table width="300" border="0" align="center" cellpadding="2" cellspacing="0"> 
    <tr> 
     <td width="112"><b>Login</b></td> 
     <td width="188"><input name="login" type="text" class="textfield" id="login" /></td> 
    </tr> 
    <tr> 
     <td><b>Password</b></td> 
     <td><input name="password" type="password" class="textfield" id="password" /></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td><input type="submit" name="Submit" value="Login" /></td> 
    </tr> 
    </table> 
</form> 

哪裏登錄,exec.php應該驗證其中輸入登錄密碼&一直領域,如果沒有返回到表單文件,$errflag

文件的login-exec.php:

//Start session 
    session_start(); 

    //Include database connection details 
    require_once('../inc/config.php'); 

    //Array to store validation errors 
    $errmsg_arr = array(); 

    //Validation error flag 
    $errflag = false; 



..... 



//Input Validations 
    if($login == '') { 
     $errmsg_arr[] = 'Login ID missing'; 
     $errflag = true; 
    } 
    if($password == '') { 
     $errmsg_arr[] = 'Password missing'; 
     $errflag = true; 
    } 

    //If there are input validations, redirect back to the login form 
    if($errflag) { 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     session_write_close(); 
     header("location: ../form/login-form.php"); 
      exit(); 
} 

而且部分工作正常 - 這是久違的形式 - 但沒有顯示錯誤。 任何建議非常感謝。

+0

您的PHP代碼顯示錯誤消息的地方在哪裏? –

+0

沒有任何。抱歉。我使用PHP做了一些練習 - 這對我來說是新的。檢查'$ errmsg_arr'數組的PHP應該放在login-form.php中,如果不是的話? – Iladarsda

回答

1

在同一頁上的HTML表單,做同樣的事情對此:

session_start(); 
foreach ($_SESSION['ERRMSG_ARR'] as $msg) { 
    echo $msg . "<br />"; 
} 
etc... 

實際顯示消息。

+0

這是行得通的。但是,在登錄頁面上馬上就會顯示一個錯誤 - 即使沒有輸入任何數據。只是猜測數組是否從以前的登錄失敗中保存。如何改變? – Iladarsda

+0

你收到什麼錯誤信息? –

+0

如果會話是死: '說明:未定義指數:ERRMSG_ARR在C:\瓦帕\ WWW \形式\上線3' 和'警告登錄-form.php的:提供的foreach無效參數()在C:\ wamp \ www \ form \ login-form.php on line 3' **如果會話是直播,但loggout - 錯誤消息立即消失。** 如果忽略錯誤時,會死,然後按「提交」沒有錯誤顯示正確的錯誤味精。 – Iladarsda

0

當越來越從形式POST方法提交的數據,這是更好地使用$_POST['login'],而不是$login因爲如果register_globalsoff將無法​​正常工作。 這可能是你的問題。

+0

是的。 register_globals =關閉,我會嘗試改變它。 – Iladarsda

+1

@Pete:不,讓register_globals關閉。從PHP 5.3.0開始,此功能已被拒絕。依靠這個功能是非常不鼓勵的。 – scube

+0

當然你應該離開它! – Pierre

1

您valorizing的$_SESSION['ERRMSG_ARR']但隨後當你回到你不檢查/使用它的形式...嘗試把它添加到窗體代碼

<?php 
session_start(); 
if(!is_null($_SESSION['ERRMSG_ARR'])) { 
    echo '<div class="errmsg">Error...</div>'; 
} 
?> 
<form id="loginForm" name="loginForm" method="post" action="../exe/login-exec.php"> 
    <table width="300" border="0" align="center" cellpadding="2" cellspacing="0"> 
    <tr> 
... 

反正這種類型的驗證處理(使用會話參數)是嚴重氣餒 ...

儘量遵循一些design patterns代替;)

+0

這將返回'注意:未定義的變量:_SESSION在C:\ wamp \ www \ form \ login-form.php在第二行。對不起,我是PHP新手 - 我的第一個登錄系統 – Iladarsda

+0

您可以爲錯誤處理建議哪些其他選項? – Iladarsda

+0

我會建議首先使用任何PHP框架;)或使用ajax驗證。無論如何,如果這是爲了「實踐」目的,您可以簡單地將驗證和表單代碼放在同一個文件中,並將表單放到自己的表單中。所以你必須檢查$ _POST參數,如果它們是正確的,將頁面轉發到所需的頁面(或直接顯示錯誤) – VAShhh