8722 sujets

Développement web côté serveur, CMS

Bonjour à tous,

je travaille sur un formulaire comprenant essentiellement des cases à cocher et quelques champs texte ou bouton radio. Chaque enregistrement correspond à une série d'options choisies par un usager.
Mon but est que:
1° l'utilisateur qui ouvre le formulaire pour la 1e fois trouve un formulaire totalement vierge (aucune case cochée);
2° quand il rouvre son enregistrement pour venir le modifier, il faut que le champ texte/la case à cocher/le bouton radio soient préremplis en fonction de ses réponses précédentes.
Mais mon code ne fonctionne pas. Voici le code de mes différents champs:

Champ texte (fonctionnel):

<label for="nom">NOM</label><br>
	<input type="text" name="nom" value="<?php echo($result[nom]);?>"><br>


Champ bouton radio (systématiquement prérempli sur "non" alors que j'aimerais qu'il soit vide la 1e fois, et correctement prérempli la 2e fois)

	<label for "ouinon">Oui ou non?</label><br>
	<INPUT type= "radio" name="ouinon" value="oui" checked="<?php echo($result[ouinon]);?>"> Oui
	<INPUT type= "radio" name="ouinon" value="non" checked="<?php echo($result[ouinon]);?>"> Non


Champ case à cocher (systématiquement coché alors que j'aimerais qu'il soit vide la 1e fois, et correctement prérempli la 2e fois

<INPUT type= "checkbox" name="option1" value="oui" checked="<?php echo($result[option1]);?>"> Option 1


J'ajoute que mes champs case à cocher et bouton radio sont systématiquement liés dans ma bdd à un champ de type "enum" pour lequel j'ai spécifié les 2 valeurs admises.

A part ça, quand je coche ou décoche les cases, j'obtiens bien l'envoi des bonnes informations. J'ai juste un problème avec cet affichage par défaut...

Merci d'avance pour vos conseils!
Modifié par bouffandt (15 Oct 2018 - 22:43)
Salut

je comprend pas ça :

<INPUT type= "radio" name="ouinon" value="oui" checked="<?php echo($result[ouinon]);?>"> Oui
	<INPUT type= "radio" name="ouinon" value="non" checked="<?php echo($result[ouinon]);?>"> Non


car au final, soit les deux sont checker, soit aucun, car le checked est assimilé à la même variable...
Salut et merci de ta réponse,

J'ai certainement raté quelque chose dans le codage de ces boutons Smiley confused ... J'ai mis des boutons radios car certains champs du formulaire ne peuvent être remplis que par des alternatives du type oui/non, homme/femme, etc.
Je voulais que ces boutons me renvoient en outre la valeur contenue dans la base de données qui peut être:
- null (la 1e fois que le formulaire est rempli) => idéalement aucun bouton ne devrait être coché.
- "Oui" ou "non" quand on revient modifier le formulaire => le bouton correspondant devrait être coché.
Mais comme je ne savais pas comment m'y prendre, j'ai donc mis l'attribut "checked" en lui demandant de renvoyer la valeur stockée dans la base. Et je l'ai mis sur le bouton "oui" (au cas où cette valeur serait "oui") et sur le bouton "non" (au cas où cette valeur serait "non"). Mais je me rends compte que dès qu'on ouvre le formulaire la 2e valeur est toujours automatiquement cochée. Maintenant que tu me le dis, je crois que je commence à voir l'erreur...
J'ai peut-être employé un attribut inadapté?

En y réfléchissant, je me demandais si je ne devais pas plutôt créer une fonction checkedoui() qui va vérifier la valeur contenue dans la base et affiche l'attribut"checked"si la valeur est "oui" ou rien du tout dans tous les autres cas. La syntaxe de mon input deviendrait alors

<INPUT type= "radio" name="ouinon" value="oui" <?php echo "checkedoui()";?>> Oui

Je ferai la même chose pour le bouton "non" avec une fonction checkednon().

Ca pourrait marcher?
Modifié par bouffandt (17 Oct 2018 - 11:48)
en gros, c'est cette partie qui est pas mal :

<input type="radio" name="radio" value="yes" class="radio" <?php if (isset($_POST['radio']) && $_POST['radio'] == 'yes'): ?>checked='checked'<?php endif; ?> /> Yes
<input type="radio" name="radio" value="no"  class="radio" <?php if (isset($_POST['radio']) && $_POST['radio'] ==  'no'): ?>checked='checked'<?php endif; ?> /> No

Modifié par JENCAL (17 Oct 2018 - 16:28)
JENCAL a écrit :
en gros, c'est cette partie qui est pas mal :

&lt;input type="radio" name="radio" value="yes" class="radio" &lt;?php if (isset($_POST['radio']) &amp;&amp; $_POST['radio'] == 'yes'): ?&gt;checked='checked'&lt;?php endif; ?&gt; /&gt; Yes
&lt;input type="radio" name="radio" value="no"  class="radio" &lt;?php if (isset($_POST['radio']) &amp;&amp; $_POST['radio'] ==  'no'): ?&gt;checked='checked'&lt;?php endif; ?&gt; /&gt; No

Sur ce code, les 2 boutons radio restent vides, et il n'y a pas de message d'erreur.

Du coup j'ai essayé de déclarer une fonction:

function checked($radio, $saisie)
//$radio = attribut "name" du bouton qui est aussi le nom de la colonne dans la base de données; $saisie = valeur recherchée (oui, non, homme, femme, etc)
{
	global $bdd //connexion à la bdd
	$val1 = $bdd->query("SELECT $radio FROM Voyages WHERE ID='$id'");
	$val1->execute();
	$result=$val1->fetch();
		if ($result==$saisie)
		{
			echo "checked";
		}
		else
		{
			echo "";
		}
}

et je l'ai insérée dans mon input, comme suit:

<INPUT type= "radio" name="ouinon" value="oui" <?php checked("ouinon", "oui") ?>> Oui
<INPUT type= "radio" name="ouinon" value="non" <?php checked("ouinon", "non") ?>> Non

Là encore, les boutons restent vides quoi qu'il arrive... Un var_dump sur les variables $verif et $saisie renvoie "null".
Modifié par bouffandt (18 Oct 2018 - 07:52)
Oui tu ne peux pas faire appel à une fonctione PHP comme ça Smiley smile

Il faut soit passer par une formulaire <form> soit passer par de l'ajax.
J'ai passé la journée à réfléchir au problème, et j'avoue que je sèche sur la façon dont je dois m'y prendre.

J'ai donc mis le script dans un fichier checked.php dont voici le code final:

<?php
function checked($radio, $saisie)
//$radio = nom du bouton; $saisie = valeur recherchée (oui, non, homme, femme, etc)
{
	global $bdd;
	$val1 = $bdd->query("SELECT '$radio' FROM Voyages WHERE ID='$id'");
	$val1->execute();
	$verif=$val1->fetch();
	if($verif==$saisie) echo "checked";
}
?>

Mais je ne vois pas comment je dois composer mon code pour l'appel depuis un formulaire.
Il faudrait que je fasse un formulaire du genre:

<form name="checked" action="checked.php" method="POST">
<INPUT type= "radio" name="ouinon" value="oui" <?php checked("ouinon", "oui") ?>> Oui
<INPUT type= "radio" name="ouinon" value="non" <?php checked("ouinon", "non") ?>> Non
</form>

?
Mais du coup je ne serais plus dans mon formulaire initial et mes données ne seront pas envoyées à modification3.php.
J'ai trouvé une solution temporaire qui fonctionne:

<INPUT type= "radio" name="ouinon" value="oui" <?php if ($result[ouinon] == 'oui') echo "checked"; ?>> Oui
	<INPUT type= "radio" name="garconfille" value="non" <?php if ($result[ouinon] == 'non') echo "checked"; ?>> Non<br><br>

Mais ça rajoute un code répétitif... Du coup je suis toujours partant pour savoir comment appeler ma fonction!
Modifié par bouffandt (18 Oct 2018 - 21:10)
t'a fonction, tu peux l'appeller via ajax comme je te l'ai dit, si tu ne veux pas que ta page se recharge.
Sinon, pour faire appel à du PHP faut passer par <form>, mais une <form> necessite une <input type="submit"> celui ci va "submit" le formulaire vers l'action PHP que tu as préciser dans ton attribut <form action="MON FICHIER PHP">, mais qui dit <form> dit page qui se recharge ! (alors qu'en Ajax, la page ne se recharge pas.)

Le navigateur a besoin d'utilisé des requêtes HTTP pour faire des aller - retour entre le PHP et le HTML. mais je ne suis pas la pour faire un cours hein Smiley smile

Donc soit au chargement de ta page tu as déjà les infos via X raisons (une form déjà validé) (via ton $result peut être, mais je connais pas assez ton projet) soit tu utilise ajax ou <form> suivant tes besoins.
Merci de ta réponse!
D'après les informations que tu me donnes, je pense que la solution <form> ne conviendra pas. Il faut que je me documente sur l'Ajax pour voir comment je peux m'y prendre car pour l'heure je n'y connais rien Smiley smile .

En deux mots la structure de mon projet est la suivante:
accueil.php => présente un tableau récapitulatif des participants à un voyage + le pointage des documents rendus. Un bouton en face de chaque nom permet de modifier ce pointage à mesure des retours de documents et envoie vers la page modification2.php.

modification2.php => affiche pour le participant sélectionné des cases à cocher et boutons radio pour pointer les retours de documents. C'est sur ce fichier que je travaille ici. Tous mes champs (cases à cocher, boutons radio, champs texte) y sont regroupés dans un seul et unique formulaire qui envoie les données vers modification3.php.

modification3.php => totalement invisible pour l'utilisateur, il met à jour la base de données en fonction des réponses saisies dans modification2.php, affiche une confirmation que tout s'est bien passé et renvoie sur accueil.php.

Voilà!