8798 sujets

Développement web côté serveur, CMS

Bonjour à toutes et tous,

je viens solliciter votre aide pour un souci de checkbox avec un formulaire en PHP.
J'ai choisi de traiter les erreurs dans ce formulaire et d'afficher les avertissements (champs vides...) dans la même page.
En cas d'erreur j'affiche donc mon message et je reprends la valeur des champs pour éviter que le visiteur ne doive tout retaper. Pas de souci avec les champs texte :
<input name="societe" type="text" size="35" tabindex="4" value="<? if(isset($submit)) echo "$societe"; ?>" />


Mais je ne sais pas comment m'y prendre avec mes checkbox, qui se présentent ainsi :
<input type="checkbox" name="listeregion[]" tabindex="3" value="Nord" />
<input type="checkbox" name="listeregion[]" tabindex="3" value="Sud" />


Auriez vous une solution à me suggérer ?

Sinon, j'ai pensé à une astuce moins "propre", qui consisterait à faire un retour arrière suite à l'affichage du message d'erreur. Cela permettrait de tout récupérer sans effort Smiley langue
... mais là encore, je ne sais pas comment faire un retour arrière dans le code PHP.

D'avance merci pour votre aide Smiley smile
je précise que je récupère la valeur des checkbox avec le code suivant :

for ($i=0;$i<7;$i++)
$region.= $_POST["listeregion"][$i].= "\n" ;
Salut,
a écrit :
je précise que je récupère la valeur des checkbox avec le code suivant :
for ($i=0;$i<7;$i++)
$region.= $_POST["listeregion"][$i].= "\n" ;
Cette manière de faire est non seulement étrange, mais en plus nocive vu que tu modifies de manière irréversible les données POSTées ($_POST["listeregion"][$i] .= "\n"). Il serait beaucoup plus simple de faire tout bêtement :
$region = join("\n", $_POST["listeregion"]);
ou, si tu tiens vraiment à avoir des lignes vides pour les checkboxes non cochées, de simplement enlever le "=" :
for ($i=0; $i<7; $i++)
$region .= $_POST["listeregion"][$i] . "\n" ;

a écrit :
je reprends la valeur des champs [...] Mais je ne sais pas comment m'y prendre avec mes checkbox
Probablement comme ça :
<input type="checkbox" name="listeregion[]" tabindex="3" value="Nord"<?php
    if (isset($_POST['listeregion']) && in_array('Nord', $_POST['listeregion'])) echo ' checked="checked"';
?> />

Modifié par marcv (15 Jun 2009 - 10:48)
1000 mercis Marcv !

Ton code était parfait à la virgule près. Ca fonctionne bien et c'est plus simple avec le join en effet.

J'ai repris le même principe pour ma liste déroulante, si ça peut aider quelqu'un à l'avenir :
<Select name="civilite"  size="1"> 
<Option value="Mr" <?php if (isset($_POST['civilite']) && $_POST['civilite'] == 'Mr') echo ' selected="selected"'?> > Mr</Option>
<Option value="Mme" <?php if (isset($_POST['civilite']) && $_POST['civilite'] == 'Mme') echo ' selected="selected"'?> > Mme</Option>
<Option value="Mlle" <?php if (isset($_POST['civilite']) && $_POST['civilite'] == 'Mlle') echo ' selected="selected"'?> > Mlle</Option>
</Select>

En espérant que ce soit propre...

Bonne journée et merci encore
oui excuse moi, j'ai changé de navigateur en route et j'ai constaté que j'avais déjà un compte dans les cookies...