2011-04-19 96 views
1

目標:試圖確保沒有任何字段留空,包括單選按鈕組和下拉。任何人?Php驗證的形式

HTML

​​

** PHP(add_p_c.php)**

<?php 
if (isset($_POST['submit'])) { 
if (empty($selected_radio)){ echo "You need to select a prof or course";} else(return;) 
    $selected_radio = $_POST['addType']; 
if (empty($course_prof_name)){ echo "You need to enter a name";} else(return;) 
    $course_prof_name = $_POST['name']; 
if (empty($select_dep)){ echo "You select a dept";} else(return;) 
    $select_dep = $_POST['deptName']; 
$email = $_POST['email'] = "[email protected]"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
    return; 
} 
else { 
    echo "<span color='red;'>Invalid email address.</span>"; 
} 
} 
?> 

回答

0

爲了安全起見,你應該在某些事情中添加,以提高安全性,因爲如果你做的任何疑問數據庫,你可以得到一個SQL注入。試試這個:

<?php 
if(isset($_POST['submit']){ 

    $_POST['name']= trim(strip_tags(addslashes($string))); 
    $_POST['deptName']= trim(strip_tags(addslashes($string))); 
    $_POST['email']= trim(strip_tags(addslashes($string))); 

      /* I can't remember if it should be '' or NULL, but some simple testing will let you know which it is*/ 
    if($_POST['addType'] != ''){ 
     if($_POST['name'] != ''){ 
      if($_POST['deptName'] != ''){ 
       if($_POST['email']) != ''){ 
        $selected_radio = $_POST['addType']; 
        $course_prof_name = $_POST['name']; 
        $select_dep = $_POST['deptName']; 
        $email = $_POST['email'] = "[email protected]"; 
        if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
         return; 
        } 
        else { 
         echo "<span color='red;'>Invalid email address.</span>"; 
        } 
       } 
       else{ 
        // email wasn't set 
       } 
      } 
      else{ 
       //deptName wasn't set 
      } 
     } 
     else{ 
      //name wasn't set 
     } 
    } 
    else{ 
     // add type wasn't set 
    } 
} 
?> 
+1

4嵌套if語句? – Galen 2011-04-19 15:08:05

+0

它不是必需的,但是如果提問者想要對未設置的字段做出響應,這很容易讓他這樣做。如果他不想單獨解決缺失的字段,他可以在第二個if語句中使用OR(||)運算符。 – reeeky2001 2011-04-19 15:32:15

0

您可以使用if (empty($variable)) {,只需記住,任何的計算結果爲false,包括數0將被捕獲。

PHP DOC:http://php.net/manual/en/function.empty.php

+0

你能看到我更新的代碼嗎?這是正確的實施。 empty()是否適用於下拉框和單選按鈕? – Jshee 2011-04-19 14:53:15

0

只是檢查它的字面:

if($_POST['foo'] === ""){

+0

代碼看起來不錯,可以像4或5條語句一樣放入。我可以把這個全部放在一個調用中,就像'if($ _ POST ['addType'] ===「」|| if($ _ POST ['name'] ===「」){){... etc' – Jshee 2011-04-19 14:55:54

+0

當然,如果你想。我個人認爲,多行看起來更好,特別是如果它包裹在一個布爾函數中,但對每個行都是自己的。你剛纔寫的不應該有任何問題評估。 – 2011-04-19 15:17:48

+0

真棒,感謝死亡。 – Jshee 2011-04-19 15:39:35

0

如果你打算有一個特別大的表單,你可能想看看使用數組和for循環。當我構建了30個字段數組時,嵌套一系列if語句的速度非常快,非常快。

我建議你寫一個快速功能像

function validatePost($checkValues) 
{ 
    foreach($checkValues as $value) 
    { 
     $checked = 0; 
     foreach($_POST as $key => $value) 
     { 
      if($key == $checkValues) 
      { 
       $checked = 1; 
       if(empty($value)) 
       { 
        return false; 
       } 
      } 
     } 

     if($checked == 0) 
     { 
      return false; 
     } 
    } 
} 

請記住,這不包括任何正則表達式檢查,但你可以添加在中間foreach循環。然後在你的代碼行,你會叫這樣的功能:

$checkValues = array('addType', 'deptName', 'email', 'name') 
$return = validatePost($checkValues); 
if($return == false) 
{ 
    echo "<span color='red;'>Please fill out entire form.</span>" 
} 
else 
{ 
    return; 
} 

很明顯,你可以添加功能,使之更加冗長,但是這是一個非常基本的驗證你這是可擴展性。