如何在php中验证表单提交

时间:2011-03-07 00:41:30

标签: php

我有一个这样的表格:

<form method="post" action="">
<?php
$h = mysql_query("select distinct sous_sous_categorie, sous_sous_categorie_url  
                  from articles where sous_categorie_url='".$_GET["s_cat"]."' ");
while($hRow=mysql_fetch_assoc($h)){  
?>
    <span class="submit">
    <input type="checkbox" name="<?php echo $hRow["sous_sous_categorie_url"]; ?>" 
     value="<?php echo $hRow["sous_sous_categorie_url"]; ?>" />&nbsp;&nbsp;
    <a href="?categorie=<?php echo $_GET["categorie"];  ?>&s_cat=<?php echo $_GET["s_cat"]; ?>&s_s_cat=<?php echo $hRow["sous_sous_categorie_url"];  ?>"><?php echo $hRow["sous_sous_categorie"];  ?></a>
    </span>
<?php } ?>
<input type="submit" name="submit_sous_sous_categorie_search" 
 value="search" class="submit" />
</form>

正如您所看到的那样,表单处于循环中,表单由用户将检查的复选框组成,并且对此进行编码将进行搜索查询,问题是复选框具有name属性但该属性是可变的(因为它是从db中获取的)所以我的问题是如何才能做到这一点:

if(checkboxes are empty){
    echo "you must at least select one checkbox"
}

这只是一个例子,但我不知道如何做一个简单的事情,如

if(!$_POST["checkbox"]}{
    echo "you must at least select one checkbox";
}

同样,因为复选框的名称是可变的。

2 个答案:

答案 0 :(得分:4)

您可以通过将名称更改为:

将复选框设置为数组
name="checkboxes[<?php echo $hRow["sous_sous_categorie_url"]; ?>]"

然后你可以使用这样的代码来确保至少检查一个:

$passed = false;
if( isset( $_POST['checkboxes'] ) && is_array( $_POST['checkboxes'] ) )
{
    foreach( $_POST['checkboxes'] as $k => $v )
    {
        if( $v )
        {
            $passed = true;
            break;
        }
    }
}

if( ! $passed )
{
    echo "You must select at least one checkbox";
    exit();
}

另外,你应该小心你的查询,你需要转义它以防止SQL注入。

答案 1 :(得分:0)

您可以将FORM中的数组传递给PHP脚本:

<!-- The brackets [] let PHP know you're passing in an array -->
<input type="checkbox" name="categories[]" value="<?php echo $hRow["sous_sous_categorie_url"]; ?>" />

然后在剧本中:

// $_POST['categories'] is an array when categories are checked.
if (empty($_POST['categories'])) {
  echo 'Please select a category.';
} else {
  foreach ($_POST['categories'] as $url) {
     // do something with $url
  }
}