2011-08-15 114 views
0

我目前有一個html登錄頁面,其中有兩個用於電子郵件地址和密碼的文本框。 HTML包含一個表單和一個按鈕,它會觸發一些javascript來檢查數據輸入是否有效。如果數據是有效的,那麼數據被髮布到php應用程序中。HTML,Javascript,PHP登錄頁面

此php應用程序根據登錄詳細信息是否有效提供響應。

這裏是我的PHP:

if(isset($_POST['username']) && isset($_POST['password'])){ 
    //connect to database 
    $dbh = connect(); 
    $user = mysql_real_escape_string($_POST['username']); 
    $usertype = mysql_real_escape_string($_POST['usertype']); 
    $pass = md5($_POST['password']); 
    $query = ""; 
    if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $user)) { 
     if($usertype == "SupportStaff"){  
     $query = "SELECT staffId, fName, lName, gender, email FROM SupportStaff WHERE email = '$user' AND password = '$pass'"; 
     }else{  
     $date = $_POST['currdate'];  
     $query = "SELECT athleteId, fName, lName, gender, email FROM Athletes WHERE email = '$user' AND password = '$pass'"; 
     } 

     //make query 
     $result = mysql_query($query) or die ("didn't query"); 

     //see if there's an EXACT match 
     $num = mysql_num_rows($result); 
     if ($num == 1){ 
     $row = mysql_fetch_assoc($result); 
     if($usertype == "Athlete"){  
      $user = str_replace("@","at",$user); 
      $user = str_replace(".","dot",$user); 
      $user .= "Entries"; 
      $query = mysql_query("SELECT * FROM $user WHERE date = '$date'"); 
      $exists = false; 
      if(mysql_num_rows($query) == 1){ 
     $exists = "true"; //to see if questionnaire is complete 
      }else{ 
     $exists = "false"; 
      } 
      $row['complete'] = $exists;    
     } 
     echo json_encode($row); 
     } else { 
     echo ($user." "); 
     echo ($pass); 
     echo ("&result=invalid"); 
     } 
    }else{ 
     mysql_close($dbh); 
     echo ("&result=false"); //invalid e-mail address 
    } 
    mysql_close($dbh); 
} 
?> 

如果回聲&result=false OR &result=invalid然後我想用戶送達了登錄頁面再次顯示錯誤消息或類似的東西,如果它是成功的( echo json_encode($row))那麼它應該採取home.html(即主頁)...什麼是最好的方式來實現這一目標?

+0

參見[PHP登錄腳本(http://php-login-script.com/) ,閱讀代碼並瞭解它是如何完成的。祝你好運! – CuriousMind

+0

在您使用代碼更新您的問題之前,我提交了我的答案,但我的建議仍然是一種可能的解決方案。如果您有效地編寫代碼,則可以通過編寫函數(或完整的OO代碼)而不是純粹的程序代碼來防止PHP文件變得太大/不規範。 – ChrisW

回答

0

在完成所需的處理後,使用Ajaxredirect server side

如果你選擇Ajax路線(如果你已經在做客戶端腳本,這將是明智的),你可能想看看jQuery's Ajax功能。具體來說,post可能會符合您的要求。

我相信你知道,但我應該強調,客戶端驗證本身並不足以保護您的網站。客戶端驗證應被視爲改善用戶體驗的一種方式,而不是作爲一種安全形式。人們可以通過手動向服務器發送請求,輕鬆繞過任何客戶端驗證。

0

有幾個選項:

  • 你可以使用AJAX調用服務器完全做到這一點在JavaScript。然後你的javascript會根據登錄是否成功更新頁面的內容。這可能非常棘手,所以如果你對JavaScript和AJAX調用不太熟悉,我不會推薦這個。
  • 你可以添加一些代碼到php頁面,該頁面可以立即重定向到你想要顯示的任何頁面。
  • 您可以更改php頁面,以便立即顯示您想要顯示的內容(例如,如果數據無效,請再次包含登錄頁面)。
1

有沒有什麼好的理由說明爲什麼你需要一個單獨的php文件作爲你的登錄代碼?假設您的登錄表單位於名爲login.php的頁面上,您可以將所有登錄代碼放在同一個文件中;那麼你的表格應該有

<form name="input" action="login.php" method="post"> 

您可以測試是否有任何數據尚未提交使用

if(count($_POST) > 0) 
{ 
    //if data has been submitted, then test whether it's correct, and if it is, show relevant content 

    //If validation fails, show form 
    display_form(); 
} else 
{ 
    display_form(); 
} 
+0

是的,我想提供一個接口數據庫的web服務,因爲這是最佳實踐。它似乎是一個'清潔'的解決方案,以分離從PHP的HTML ... – user559142