2010-08-12 51 views
2

由於某些原因,我的複選框數組值不顯示在$ _POST中。

例如:

<form method="post" action=""> 
    <input type="checkbox" name="cb[]" value="1"> 
    <input type="checkbox" name="cb[]" checked="checked" value="2"> 
    <input type="checkbox" name="cb[]" value="3"> 
    <input type="checkbox" name="cb[]" checked="checked" value="4"> 
    <input type="checkbox" name="cb[]" checked="checked" value="5"> 
    <input type="checkbox" name="cb[]" value="6"> 
    ... 
    <input type="checkbox" name="cb[]" checked="checked" value="26"> 
    <input type="checkbox" name="cb[]" value="27"> 
    <input type="submit" value="insanitizer"/> 
</form> 

當提交:

<?php 
print_r($_POST); //Because print_r($_POST['cb']); gives '' 

Array (
    [category] => 
) 

print_r($_REQUEST['cb']); //Showing the correct array name was used 

Array 
(
    [0] => 2 
    [1] => 4 
    [2] => 5 
    [3] => 26 
) 
?> 

我很高興,我至少可以得到該複選框的數據在這裏,但我留下了一個問題:

Wtf?

+0

您是否在使用任何框架? – NullUserException 2010-08-12 13:57:54

+0

Smarty,apc ...他們算了嗎? – 2010-08-12 13:59:06

回答

1

DUR DUR DUR ...

由於一般初始化的一部分,我運行$ _ POST和$ _GET通過:

<?php 
if(sizeof($_POST) > 0){ 
    foreach($_POST as $key => $value){ 
     $_POST[$key] = $this->_db->realEscapeString($value); 
    } 
} 
if(sizeof($_GET) > 0){ 
    foreach($_GET as $key => $value){ 
     $_GET[$key] = $this->_db->realEscapeString($value); 
    } 
} 
?> 

這似乎核彈任何陣列...

替換上面用:

<?php 
... 
if(sizeof($_GET) > 0){ 
     $this->initDbCleanArray($_GET); 
    } 
} 
... 

private function initDbCleanArray($a) 
{ 
    if(sizeof($a) > 0){ 
     foreach($a as $key => $value){ 
      if(is_array($a[$key])){ 
       $this->initDbCleanArray($a[$key]); 
      } 
      else{ 
       $a[$key] = $this->_db->realEscapeString($value); 
      } 
     } 
    } 
} 
?> 

realEscapeString = mysql_real_escape_string

...和$ _POST ['cb']住!

+0

他們*不應該*核彈你的陣列。 – quantumSoup 2010-08-12 14:04:05

+0

就是這樣,他們做到了嗎?我評論了上面的代碼,並且walaa,cb數組出現在$ _POST ... – 2010-08-12 14:07:29

+1

最佳做法是在插入數據庫之前立即將字符串轉義,而不是在之前。防止這樣的事情發生。 – 2010-08-12 14:18:12