我有一个这样的表格:
<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"]; ?>" />
<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";
}
同样,因为复选框的名称是可变的。
答案 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
}
}