2010-08-12 3 views
2

Pour une raison quelconque, mes valeurs de tableau à cocher n'apparaissent pas dans $ _POST.

Par exemple:

<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> 

Quand soumettre:

<?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 
) 
?> 

Je suis heureux que je puisse au moins obtenir les données de cases à cocher, mais je suis parti avec une question:

Wtf?

+0

Utilisez-vous des cadres? – NullUserException

+0

Smarty, apc ... comptent-ils? –

Répondre

1

Dur dur dur ...

Dans le cadre de l'initialisation générale I exécuter $ _POST et $ _GET par:

<?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); 
    } 
} 
?> 

qui semble atomiser des tableaux ...

Remplacée ci-dessus avec:

<?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

... et $ _POST ['cb'] vit!

+0

Ils * ne devraient pas * nuke vos tableaux. – quantumSoup

+0

Quoi qu'il en soit, ils l'ont fait? J'ai commenté le code ci-dessus, et walaa, tableau cb apparaît dans $ _POST ... –

+1

La meilleure pratique consiste à échapper à vos chaînes immédiatement avant qu'ils ne soient insérés dans la base de données, et pas avant. Empêche des choses comme ça de se produire. –

Questions connexes