2011-03-07 120 views
0

我有一個這樣的形式:如何驗證表單提交的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> 

正如你所看到的形式是在一個循環中,形式包括複選框用戶將檢查和accoding這一個搜索查詢會進行,事情是,複選框具有name屬性,但這種屬性是可變的(因爲它是從數據庫獲取),所以我的問題是我怎麼能做出這樣的:

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

這只是一個例如,但我不知道如何做一個簡單的事情,如

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

同樣,因爲複選框的名稱是可變的。

name="checkboxes[<?php echo $hRow["sous_sous_categorie_url"]; ?>]" 

然後你可以使用這樣的代碼,以確保至少有一個被選中:

+0

只是JavaScript來驗證的選項依賴? – 2011-03-07 00:49:37

+0

嗨,不,我想這隻在php – tetris 2011-03-07 00:50:42

+1

'mysql_escape_real_string()'您的輸入查詢 – kjy112 2011-03-07 00:51:25

回答

4

您可以通過更改名稱,讓您的複選框到一個數組

$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注入。在腳本

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

然後:

+0

+1,你打我。 – Jonah 2011-03-07 00:53:58

+0

好的,謝謝你會試試這個。 – tetris 2011-03-07 00:56:58

0

您可以從您的形式向PHP腳本傳遞數組

// $_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 
    } 
}