41 votes

Soumettre un formulaire HTML avec des cases à cocher vides

J'ai un formulaire HTML - avec PHP, j'envoie les données du formulaire dans une base de données MySQL. Certaines des réponses aux questions du formulaire comportent des cases à cocher. Évidemment, l'utilisateur ne doit pas cocher toutes les cases pour une question. Je veux également rendre les autres questions (y compris les groupes radio) facultatives.

Cependant, si je soumets le formulaire avec des cases vides, des groupes de radio, etc., je reçois une longue liste de messages d'erreur "Undefined index" pour chacun d'entre eux.

Comment puis-je contourner ce problème ? Merci.

94voto

ceejayoz Points 85962

J'ai utilisé cette technique de temps en temps :

<input type="hidden" name="the_checkbox" value="0" />
<input type="checkbox" name="the_checkbox" value="1" />

note : Cela est interprété différemment dans différents langages côté serveur, alors testez et ajustez si nécessaire. Merci à SimonSimCity pour le conseil.

41voto

Gumbo Points 279147

Les éléments de type radio ou case à cocher non cochés ne sont pas soumis car ils ne sont pas considérés comme des succès de . Vous devez donc vérifier s'ils sont envoyés en utilisant la fonction isset o empty fonction.

if (isset($_POST['checkbox'])) {
    // checkbox has been checked
}

7voto

Greg Points 132247

Une case à cocher non cochée n'est pas envoyée dans les données POST. Vous devriez juste vérifier si elle est vide :

if (empty($_POST['myCheckbox']))
     ....
else
     ....

En PHP empty() y isset() ne génèrent pas d'avis.

5voto

idf Points 41

Voici une solution de contournement simple utilisant le javascript :

avant que le formulaire contenant des cases à cocher soit soumis, mettez les cases "désactivées" à 0 et vérifiez-les pour vous assurer qu'elles sont soumises. cela fonctionne pour les tableaux de cases à cocher par exemple.

///// exemple //////

étant donné un formulaire avec id="formId"

<form id="formId" onSubmit="return formSubmit('formId');" method="POST" action="yourAction.php">

<!--  your checkboxes here . for example: -->

<input type="checkbox" name="cb[]" value="1" >R
<input type="checkbox" name="cb[]" value="1" >G
<input type="checkbox" name="cb[]" value="1" >B

</form>

<?php

if($_POST['cb'][$i] == 0) {
    // empty
} elseif ($_POST['cb'][$i] == 1) {
    // checked
} else {
    // ????
}

?>

<script>

function formSubmit(formId){

var theForm = document.getElementById(formId); // get the form

var cb = theForm.getElementsByTagName('input'); // get the inputs

for(var i=0;i<cb.length;i++){ 
    if(cb[i].type=='checkbox' && !cb[i].checked)  // if this is an unchecked checkbox
    {
       cb[i].value = 0; // set the value to "off"
       cb[i].checked = true; // make sure it submits
    }
}

return true;

}

</script>

3voto

user58670 Points 803

Pour compléter le code de fmsf, lorsque j'ajoute des cases à cocher, je les transforme en tableau en ajoutant [] dans le nom.

<FORM METHOD=POST ACTION="statistics.jsp?q=1&g=1">
    <input type="radio" name="gerais_radio" value="primeiras">Primeiras Consultas por medico<br/>
    <input type="radio" name="gerais_radio" value="salas">Consultas por Sala <br/>
    <input type="radio" name="gerais_radio" value="assistencia">Pacientes por assistencia<br/>
    <input type="checkbox" name="option[]" value="Option1">Option1<br/>
    <input type="checkbox" name="option[]" value="Option2">Option2<br/>
    <input type="checkbox" name="option[]" value="Option3">Option3<br/>
    <input type="submit" value="Ver">

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X