2009-04-14 8 views
3

Je reçois une erreur "Indéfini index" lors de la soumission d'un formulaire avec une case décochée. Existe-t-il un autre moyen que d'effectuer un "isset" ou un "vide" sur chaque valeur affichée?Case à cocher Formulaire PHP et index indéfini

J'ai regardé ce Question et j'ai du mal à croire que c'est la seule solution. Voici un exemple de code: EDIT: s'il vous plaît ne pas que ce ne sont pas les noms réels des colonnes de tables; ils sont nommés de manière unique (comme « postAddress, displayPhone, étudiant, etc.)

Répondre

7

Vous pouvez écrire une fonction qui vérifie si une case à cocher a été vérifié:

function checkbox_value($name) { 
    return (isset($_POST[$name]) ? 1 : 0); 
} 

Appelez maintenant cette fonction dans votre requête comme ceci:

$sql = 'UPDATE table SET '. 
     'checkbox1 = '. checkbox_value('checkbox1') .','. 
     'checkbox2 = '. checkbox_value('checkbox2') .','. 
     'checkbox3 = '. checkbox_value('checkbox3') .','. 
     'checkbox4 = '. checkbox_value('checkbox4') .','. 
     'checkbox5 = '. checkbox_value('checkbox5') .','. "LIMIT 1"; 
+0

Ouais! J'aime ta façon de penser. Je vous remercie! – superUntitled

0

essayez le

suivant
<?php 
//first part of the query 
$query = "UPDATE table SET "; 

$howManyCheckboxes = 5; 
//for every checkbox , see if it exist , if it is, add it to the query 
for($i=1;$i<=$howManyCheckboxes;$i++) 
{ 
    if(isset($_POST['checkbox'.$i])) 
    { 
     $query = $query . " checkbox".$i."='".escape($_POST['checkbox'.$i])."',"; 
    } 
} 
//lets remove the last coma 
$query = substr($query,0,-1); 
//add the rest of the query 
$query = $query . " LIMIT 1"; 

$result = mysql_query($query); 
if(! $result) echo "um, not everything went as expected."; 
?> 
+0

grâce à cela, mais les noms des cases à cocher ne seront pas toujours "checkbox1", "checkbox2" ... – superUntitled

6

Si vous voulez activer/désactiver une case à cocher, vous pouvez écrire une valeur cachée avant d'écrire la case à cocher.

<input type="hidden" name="checkbox1" value="no" /> 
<input type="checkbox" name="checkbox1" value="yes" /> 

Cela renverra toujours une valeur, soit non (par défaut, sauf si la case est cochée par défaut) ou oui. Vous pouvez valider la saisie avec filter functions avec FILTER_VALIDATE_BOOLEAN.

Il est plus facile si vous écrivez une fonction pour cela, comme FORMCHECKBOX (nom de $), avec des options pour les valeurs (valeur « sur » signifie la case est cochée par défaut), les attributs, etc.

+0

Est-ce que cela fonctionne réellement? C'est fou ... jamais entendu parler de ça avant. Cela dépendrait du navigateur? Je suis sûr que tous les navigateurs ne supportent pas cela même si c'est dans la spécification w3c? – mpen

+0

Cela fonctionne dans tous les navigateurs que je connais. Les navigateurs renvoient les noms avec des valeurs dans l'ordre du premier au dernier. En PHP, seul le nom de famille le transformera en super global GET/POST (sans nom []), et si la case n'est pas cochée, il ne sera pas envoyé. – OIS

Questions connexes