2011-08-31 100 views
-3

我有一個基本的登錄表單,我想添加一些驗證。我想出了這些:PHP:IF語句問題

$errors = array(); 

if($_SERVER['REQUEST_METHOD'] == 'POST'){ 

    if(0 === preg_match("/[email protected]+\..+/", $_POST['email'])){ 
     $errors['email'] = "Please enter a valid email address"; 
    } 

    if(0 === preg_match("/.{6,}/", $_POST['password'])){ 
     $errors['password'] = "Please enter you correct password"; 
    } 

    if(0 === count($errors)){ 
     // SUBMIT THE FORM, <form action='auth.php' method='post'... 
    } 
} 

所以,我怎麼能完成最後的IF部分,這將提交表單如果沒有錯誤?在此先感謝

+5

如果你可以看到$ _ POST [ '電子郵件']不是形式已經提交。 – CaNNaDaRk

+1

這個腳本是由AJAX調用的嗎? – Mike

+0

不,先生。只有php – tmrhmdv

回答

2

我會想象如果這段代碼是在auth.php那麼你已經提交表單。

想想這樣:無論如何都要提交表單,但如果出現錯誤,請停止提交。你的過程可能看起來像下面這樣:

form.php的

<?php 
    if($_GET['error']){ echo '<p>There was a problem with your input</p>'; } 
?> 
<form method="post" action="auth.php"> 
    <input ... /> 
    <button type="submit">Submit</button> 
</form> 

auth.php

$errors = array(); 

if($_SERVER['REQUEST_METHOD'] == 'POST'){ 

    if(0 === preg_match("/[email protected]+\..+/", $_POST['email'])){ 
     $errors['email'] = "Please enter a valid email address"; 
    } 

    if(0 === preg_match("/.{6,}/", $_POST['password'])){ 
     $errors['password'] = "Please enter you correct password"; 
    } 
} 

if(0 === count($errors)){ 
    // do your form action as normal 
} 
else { 
    header('Location: form.php?error=1'); 
    exit(); 
} 
+0

謝謝!這樣做 – tmrhmdv

+1

我建議尋找由@ShaneC提供的答案,Javascript更適合'即時反饋'。但是,不要依靠它自己進行驗證,它很容易被繞過。 – phindmarsh

4

我想你想在你需要JavaScript的情況下使用PHP。

如果您正在討論實際上在HTML頁面上提交<form>元素,那麼您需要JavaScript。在這種情況下,PHP只會在表單提交時觸發。

但是,如果您的意圖不是提交表單元素,而是基於經過驗證的表單執行任務(或一系列任務),那麼您只需要適當地包含您的邏輯。

例如:

if(count($errors) > 0){ 
    // THERE IS A PROBLEM, RETURN THE ERRORS 
    include('myHTML.html'); 
    exit(); 
} 

// If the above didn't fire, then we have no errors 
echo("Wonderful! Now we can add this information to a database, or something."); 
+0

你說得對。我應該用javascript驗證它們,並禁用提交按鈕,直到清除錯誤。但是,如果用戶被JS阻止,這將毫無用處。 – tmrhmdv

+0

無論如何誰現在禁用JS? – yoda

+0

那麼最好的事情是在兩個驗證。您需要確保您將應用程序放入您的應用程序中(即有效的電子郵件),因此您需要在PHP端進行操作以防出現問題。 JS只是讓用戶更容易。對於PHP的一部分,你應該在你說的include('myHTML.html')'的部分包含你的表單的HTML,並添加一個說<?php if(isset($ errors) ):?>這裏有錯誤!<?php endif; ?>'。 @yoda:哦,如果只有 – ShaneC

0

我看不出問題在那裏。你應該做的唯一事情就是將if部分向上移動,這樣只有在請求方法發佈後纔會調用它。這是解決你的問題嗎?如果沒有,請詳細描述您的問題。

+0

會做先生。但是,如果沒有發現錯誤,告訴PHP提交表單的語法是什麼? – tmrhmdv

+0

@Timur,這取決於請求的類型。 – yoda

+0

@Timur:表單已經提交。它已經是服務器端了。你只需要把你的表單處理代碼(即數據庫調用,或任何你要做的提交表單)放在最終的IF塊中。 – mwan