2011-04-19 120 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; 
} 

很明显,你可以添加功能,使之更加冗长,但是这是一个非常基本的验证你这是可扩展性。