Formulaire de contact

Des checkboxes et boutons radio à ajouter

a marqué ce sujet comme résolu.

Bonjour,

Je suis sur la refonte d’une page contact en lui ajoutant des checkboxes et radio. La partie front est prête, mais je ne parviens pas à faire prendre en compte les nouveaux composants. En plus de cela, à la refonte, j’ai dû faire une boulette (mais où?), car j’ai une erreur 500 à l’envoi du formulaire.

Auriez-vous une idée, s’il vous plait ?

Merci

PS : Je suis autodidacte, alors je ne maitrise pas toutes les bases sur tout, dans tous les langages.

Salut,

En l’état actuel, la seule réponse qu’on puisse te donner, c’est "tu as fait une erreur quelque part".

Il nous manque pas mal d’informations pour pouvoir t’aider plus. Pour commencer, quel langage utilises-tu pour ton back ? Quel est le code du front, quel est le code du back ? As-tu des erreurs plus précises dans les logs ?

On ne peut pas deviner magiquement ce qui ne va pas. Poste ton code, et déjà on y verra plus clair.

Généralement une erreur 500 signifie une erreur coté serveur (back donc).
Donc pour comprendre ce qui se passe, il nous faudra le code source ou au moins une partie de celui-ci.

+1 -0

Bonsoir et merci pour vos réponses qui éclairent un peu ma route, mais malheureusement, je ne suis pas encore assez performant pour résoudre seul cette difficulté. Donc, nous avons en entrée, un formulaire HTML / PHP qui ne produit pas d’erreur. Ce formulaire d’origine (la version actuellement fonctionnelle et en ligne) ne contient pas les boutons radio et checkboxes dont j’ai besoin dans la nouvelle version. Le nouveau formulaire fonctionne en front.

J’ai créé un petit bout de JS pour gérer les changement d’options avant envoi.

function triggerRadio(radio, hide, show) {
    if(jQuery(radio).prop('checked')) {
        jQuery(show).show();
        jQuery(hide).hide();
    }
    else {
        jQuery(hide).show();
        jQuery(show).hide();
    }
}


jQuery(document).ready(function() {
    /* Banchement des éléments */
    jQuery('#TL').click(function() {
        triggerRadio('#TL', '#optPC', '#optTL');
    });
    jQuery('#PC').click(function() {
        triggerRadio('#PC', '#optTL', '#optPC');
    });

    jQuery('#AUT').change(function() {
        jQuery('#AUT_detail').prop('disabled', !(jQuery('#AUT').prop('checked')));
    });
    jQuery('#toutazero').click(function() {
        jQuery('#TL, #PC').prop('checked', false);
        jQuery('#optTL, #optPC').hide();
        jQuery('#AUT_detail').prop('disabled', true);
    });
});

// Récupérer toutes les checkbox cochés
$("input[type='checkbox']:checked").each(function() {
          console.log($(this).attr('id'));
});
$("input[type='radio']:checked").each(function() {
          console.log($(this).attr('id'));
});

Tout va bien jusque là.

Ensuite le formulaire est envoyé et analysé par PHP, mais je n’ai pas su comment prendre en compte dans le formulaire les sélections de boutons radio ou checkbox. Et là, c’est probablement la cata.

=======================================

<?php
	require_once "show_head.php";
	require_once "show_header.php";
	require_once "show_menu_titre_moteur.php";
	require_once "show_footer.php";
    require_once __DIR__ . "/../Utilisateur.php";
	
	try
		{
			if ($_SERVER['REQUEST_METHOD']!= 'POST')
				throw new UnexpectedValueException('Erreur de méthode d\'envoi'); {

				$filtre_def = array
					(
						'nom' => array
							(
								'filter' => FILTER_VALIDATE_REGEXP,
								'flags' => FILTER_NULL_ON_FAILURE,
								'options' => array
									(
										'regexp' => '#^[\w -]+$#i'
									)
							),
						'prenom' => array
							(
								'filter' => FILTER_VALIDATE_REGEXP,
								'flags' => FILTER_NULL_ON_FAILURE,
								'options' => array
									(
										'regexp' => '#^[\w -]+$#i'
									)
							),
						'age' => array
							(
								'filter' => FILTER_VALIDATE_INT,
								'flags' => FILTER_NULL_ON_FAILURE,
								'options' => array
									(
										'min_range' => 14,
										'max_range' => 100
									)
							),
						'message' => array
							(
								'filter' => FILTER_UNSAFE_RAW,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'courriel' => array
							(
								'filter' => FILTER_VALIDATE_EMAIL,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						if($_POST["dyslexie"]=== true)){
							$dyslexie = "Dyslexie";
						},
						if($_POST["dysphasie"]=== true)){
							$dysphasie = "Dysphasie";
						},
						if($_POST["dyspraxie"]=== true)){
							$dyspraxie = "Dyspraxie";
						},
						if($_POST["dyscalculie"]=== true)){
							$dyscalculie = "Dyscalculie";
						},
						if($_POST["dysorthographie"]=== true)){
							$dysorthographie = "Dysorthographie";
						},
						if($_POST["surdite"]=== true)){
							$surdite = "Surdite";
						},
						if($_POST["autisme"]=== true)){
							$autisme = "Autisme";
						},
						if($_POST["surdoue"]=== true)){
							$surdoue = "Surdoue";
						},
						if($_POST["autres"]=== true)){
							$autres = "Autres";
						},
						if($_POST["ETG_auto"]=== true)){
							$ETG_auto = "ETG en autonomie";
						},
						if($_POST["ETG_diff"]=== true)){
							$ETG_diff = "ETG difficile";
						},
						if($_POST["ETG_ech"]=== true)){
							$ETG_ech = "ETG en échec";
						},
						if($_POST["ETG_obt"]=== true)){
							$ETG_obt = "ETG obtenu";
						},
						if($_POST["COND_diff"]=== true)){
							$COND_diff = "Conduite difficile";
						},
						if($_POST["COND_ech"]=== true)){
							$COND_ech = "Conduite en échec";
						}							
					)
				};

				
			$filtre_resultat = filter_input_array(INPUT_POST,$filtre_def);
			
			if (in_array(NULL,$filtre_resultat,TRUE))
				throw new UnexpectedValueException('Données invalides');
				
				$nom = $filtre_resultat['nom'];
				$prenom = $filtre_resultat['prenom'];
				$age = $filtre_resultat['date_naissance'];
				$courriel = $filtre_resultat['courriel'];
				$destinataire = "contact@monotoecole.fr";				
				
				$message = $filtre_resultat['message'];
				
				$dyslexie = $filtre_resultat['DL'];
				$dysphasie = $filtre_resultat['DPH'];
				$dyspraxie = $filtre_resultat['DPR'];
				$dyscalculie = $filtre_resultat['DC'];
				$dysorthographie = $filtre_resultat['DO'];
				$surdite = $filtre_resultat['SU'];
				$autisme = $filtre_resultat['AU'];
				$surdoue = $filtre_resultat['SD'];
				$autres = $filtre_resultat['AUT'];
				$autres_details = $filtre_resultat['details'];
				
				$etgauto = $filtre_resultat['ETG_auto'];
				$etgdiff = $filtre_resultat['ETG_diff'];
				$etgech = $filtre_resultat['ETG_ech'];
				$etgobte = $filtre_resultat['ETG_obt'];
				$conddif = $filtre_resultat['COND_diff'];
				$condech = $filtre_resultat['COND_ech'];

==================================================================

Je ne sais pas si vous disposez d’assez d’informations à partir de ceci pour me comprendre. Merci pour votre aide.

+0 -0

(j’ai édité ton message pour mettre en forme le code. À l’avenir, tu peux utiliser le bouton dans l’éditeur de commentaires, c’est le symbole </>. Plus d’infos ici)

En ce qui concerne ton problème, un souci est que tu mets des if dans ton array filtre_def, ce n’est pas une syntaxe valide. Ton code ressemble actuellement à

$filtre_def = array(
  'nom' => array(),
  // [...]
  'courriel' => array(),
  if($_POST["dyslexie"]=== true)){
    $dyslexie = "Dyslexie";
  },
  // [...]
);

Il devrait plutôt ressembler à

$filtre_def = array(
  'nom' => array(),
  // [...]
  'courriel' => array(),
); // On ferme l'array avant de lancer tous les if

if($_POST["dyslexie"]=== true)){
  $dyslexie = "Dyslexie";
},
// [...]

Pour être honnête je ne suis pas très sur de l’utilité de tous ces if, d’autant que la plupart des variables sont réécrites juste après.

Par ailleurs, est-ce que tu sais si dans ton environnement de développement (typiquement ton ordinateur, par opposition à l’environnement de production qui est ton site web accessible par tous), les erreurs PHP s’affichent ? Pouvoir lire les messages d’erreur est une aide énorme au développement, ça te permet de voir très vite où se trouvent les problèmes.

Petite remarque finalement, à la ligne 104 du code que tu as posté, il y a in if qui n’est pas suivi d’accolades, c’est très déconseillé. Je te conseille de remplacer ces deux lignes par

if (in_array(NULL,$filtre_resultat,TRUE)) {
  throw new UnexpectedValueException('Données invalides');
}
+4 -0

Merci beaucoup pour ta réponse melepe.

J’ai effectué les modifications recommandées, mais j’ai toujours mon erreur 500.

Est-ce qu’utiliser un tableau pour la liste des if pourrait être une solution envisageable ? Une condition répétée qui si elle est à true déclencherait l’ajout de l’élément dans une liste. Liste qui pourrait ensuite être écrite dans le courriel envoyé en fin de formulaire.

Je reprends et modifie mon message après avoir peut-être trouvé une solution possible (peut-être), celle de la fonction swich qui permet de tester la valeur TRUE de checkboxes ou radio.

Je suis un peu frileux sur les expériences, car je ne dispose pas d’environnement de test. Raison pour laquelle, c’est le fichier lui-même qui est une version de test. En même temps, ce formulaire de contact ne va pas modifier le contenu des tables. Alors, il y a moins de risques.

Qu’en penses-tu ? Est-ce que tu connais et utilises Discord ? Cela permettrait de gratter sur les problèmes rencontrés plus facilement lorsque tu es dispo, stp. Merci

+0 -0

Me revoilà avec une idée pour laquelle j’aimerais un avis, stp : j’ai envisagé l’idée d’un tableau pour rassembler les options sélectionnées par l’utilisateur.

$optionsForm = array('Dyslexie','Dysphasie','Dyspraxie','Dyscalculie','Dysorthographie','Surdité','Autisme','Surdoué','Autres','ETG en autonomie','ETG difficile','ETG en échec','ETG obtenu','Conduite difficile','Conduite en échec');

for ($opt = 0; $opt < sizeof($optionsForm); $opt++) {
	echo "Voici la liste des points à prendre en compte pour l'accompagnement : " $optionsForm[$opt]".";
}
```
Est-ce adapté pour les besoins de ce formulaire ?

Comment ensuite, générer les différentes variables à afficher en écho dans le courriel envoyé ?

Merci

PS : Désolé, un peu de mal à comprendre la technique pour afficher du code coloré sur cette page en suivant la doc.
+0 -0

PS : Désolé, un peu de mal à comprendre la technique pour afficher du code coloré sur cette page en suivant la doc.

Pourtant c’est bon, sauf que tu as un accent grave en trop :

````php

au lieu de

```php

Tu peux éditer ton message pour corriger cela :)

+1 -0

Ok, je crois que je commence à y voir plus clair :

Ton formulaire était précédemment avec nom,prénom, âge et courriel, et tu as rajouté toutes les possibles conditions médiales.

Tu cherches à valider ces champs, pour ensuite les avoir dans $filtre_resultat.

Si c’est bien ça, alors tu devrais t’en sortir en rajoutant ce genre d’entrées dans tes filtres :

$filtre_def = array(
  // [...]
  'dyslexie' => array(
     'filter' => FILTER_VALIDATE_BOOLEAN,
     'flags' => FILTER_NULL_ON_FAILURE,
  ),
),

Cela suppose que dans ton formulaire, tu as rajouté une checkbox dyslexie. Si elle est cochée, alors $filtre_resultat['dyslexie'] contient true, si elle n’est pas cochée elle contient false. Et si la checkbox n’existe pas, alors $filtre_resultat['dyslexie'] contient NULL.

Par ailleurs, je t’encourage vivement à créer ton espace de développement perso sur ton ordinateur. Tu peux suivre ce tutoriel https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/4237816-preparez-votre-environnement-de-travail, à partir de là tu auras un environnement de travail dans lequel tu pourras copier-coller le code de ton site, et développer localement. ça te permettra de tout casser tester sans affecter ton site :)

+1 -0

Ouiiii melepe, c’est en effet ce que j’aimerais réussir à ajouter au formulaire actuellement en ligne.

Je viens d’appliquer ton conseil technique pour la prise en compte des options supplémentaires à cocher si l’utilisateur veut préciser la présence de certains facteurs humains.

Voici ce que cela donne :

<?php
	require_once "show_head.php";
	require_once "show_header.php";
	require_once "show_menu_titre_moteur.php";
	require_once "show_footer.php";
    require_once __DIR__ . "/../Utilisateur.php";
	
	try
		{
			if ($_SERVER['REQUEST_METHOD']!= 'POST')
				throw new UnexpectedValueException('Erreur de méthode d\'envoi'); {

				$filtre_def = array
					(
						'nom' => array
							(
								'filter' => FILTER_VALIDATE_REGEXP,
								'flags' => FILTER_NULL_ON_FAILURE,
								'options' => array
									(
										'regexp' => '#^[\w -]+$#i'
									)
							),
						'prenom' => array
							(
								'filter' => FILTER_VALIDATE_REGEXP,
								'flags' => FILTER_NULL_ON_FAILURE,
								'options' => array
									(
										'regexp' => '#^[\w -]+$#i'
									)
							),
						'age' => array
							(
								'filter' => FILTER_VALIDATE_INT,
								'flags' => FILTER_NULL_ON_FAILURE,
								'options' => array
									(
										'min_range' => 14,
										'max_range' => 100
									)
							),
						'message' => array
							(
								'filter' => FILTER_UNSAFE_RAW,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'courriel' => array
							(
								'filter' => FILTER_VALIDATE_EMAIL,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'dyslexie' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'dysphasie' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'dyspraxie' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'dyscalculie' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'dysorthographie' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'surdite' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'autisme' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'surdoue' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'autres' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'autres_details' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'etgauto' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'etgdiff' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'etgech' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'etgobte' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'conddif' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							),
						'condech' => array
							(
								'filter' => FILTER_VALIDATE_BOOLEAN,
								'flags' => FILTER_NULL_ON_FAILURE
							)
					)
				};
				
			$filtre_resultat = filter_input_array(INPUT_POST,$filtre_def);

Ensuite, j’ai conservé cette alerte, en cas de données invalides :

	throw new UnexpectedValueException('Données invalides');
}´´´


Puis, c'est là que les variables sont créées :
```php
$nom = $filtre_resultat['nom'];
$prenom = $filtre_resultat['prenom'];
$age = $filtre_resultat['date_naissance'];
$courriel = $filtre_resultat['courriel'];
$destinataire = "contact@monotoecole.fr";				
				
$message = $filtre_resultat['message'];
				
$dyslexie = $filtre_resultat['dyslexie'];
$dysphasie = $filtre_resultat['dysphasie'];
$dyspraxie = $filtre_resultat['dyspraxie'];
$dyscalculie = $filtre_resultat['dyscalculie'];
$dysorthographie = $filtre_resultat['dysorthographie'];
$surdite = $filtre_resultat['surdite'];
$autisme = $filtre_resultat['autisme'];
$surdoue = $filtre_resultat['surdoue'];
$autres = $filtre_resultat['autres'];
$autres_details = $filtre_resultat['autres_details'];

$etgauto = $filtre_resultat['etgauto'];
$etgdiff = $filtre_resultat['etgdiff'];
$etgech = $filtre_resultat['etgech'];
$etgobte = $filtre_resultat['etgobte'];
$conddif = $filtre_resultat['conddif'];
$condech = $filtre_resultat['condech'];

Et je fais la liste des options sélectionnées :

	echo "Voici la liste des points à prendre en compte pour l'accompagnement : " $optionsForm[$opt]".";
}´´´

Mais je ne sais pas si c'est la bonne méthode. Il y a dans le formulaire, à la fois des données venant de la base (donc récupérées pas PHP en back) et des données collectées par JS en front.

Je vais m'intéresser à la création d'un environnement de travail local, c'est une bonne idée et merci beaucoup pour ce lien. J'espère que je vais m'en sortir.

Pour l'instant, les améliorations apportées ne m'ont malheureusement pas encore sorti de mon Err500.

Il est possible aussi que cette erreur soit provoquée par une coquille dans mon script JS (fichier qui gère l'affichage conditionné de blocs de d'options à cocher).

bug/1173575, non-JS module files deprecated.
(anonymous) @ (index):1882

Et la fonction debug du navigateur m'indique : "No resource with given URL found"

```js
function triggerRadio(radio, hide, show) {
    if(jQuery(radio).prop('checked')) {
        jQuery(show).show();
        jQuery(hide).hide();
    }
    else {
        jQuery(hide).show();
        jQuery(show).hide();
    }
}


jQuery(document).ready(function() {
    /* Banchement des éléments */
    jQuery('#TL').click(function() {
        triggerRadio('#TL', '#optPC', '#optTL');
    });
    jQuery('#PC').click(function() {
        triggerRadio('#PC', '#optTL', '#optPC');
    });

    jQuery('#AUT').change(function() {
        jQuery('#AUT_detail').prop('disabled', !(jQuery('#AUT').prop('checked')));
    });
    jQuery('#toutazero').click(function() {
        jQuery('#TL, #PC').prop('checked', false);
        jQuery('#optTL, #optPC').hide();
        jQuery('#AUT_detail').prop('disabled', true);
    });
});

// Récupérer toutes les checkbox cochés
$("input[type='checkbox']:checked").each(function() {
          console.log($(this).attr('id'));
});
$("input[type='radio']:checked").each(function() {
          console.log($(this).attr('id'));
});
+0 -0

(pour les balises code, il faut écrire mettre des retours à la ligne. par exemple,

blabla mon texte ```php
<?php echo 'coucou'; 
```
blabla

ne marchera pas, mais

blabla mon texte
```php
<?php echo 'coucou'; 
```
blabla

oui. Par ailleurs, c’est toujours ``` pour ouvrir ET pour fermer l’environnement de code, ´´´ n’est pas valable !)

Pour l’erreur 500, il est probable que tous les champs ne soient pas remplis, ce qui fait que certaines valeurs de $filtre_resultat valent NULL. Or, le if/throw retourne une erreur 500 (UnexpectedValueException) si au moins un des champs de $filtre_resultat vaut NULL. As-tu besoin que tous les champs soient remplis ? Es-tu certain que tous les champs sont présents dans le formulaire HTML ?

Si tu n’as pas besoin que tous les champs soient remplis, tu peux utiliser le code suivant qui remplace toutes les occurrences de NULL par false (ce qui, je pense, est suffisant dans ton cas):

$champs_optionnels = array('dyslexie', 'dysphasie'); // mettre tous les champs optionnels ici

foreach($champs_optionnels as $champ) {
  if is_null($filtre_resultat[$champ]) {
    $filtre_resultat[$champ] = false;
  }
}

Tu peux mettre ça avant le if/throw, comme ça tu as toujours une erreur 500 si il manque un champ requis.

Et la fonction debug du navigateur m’indique : "No resource with given URL found"

ça fait ça quand tu envoies le formulaire ? Sinon, c’est peut-être quelque chose de décorrélé (par exemple l’absence de favicon ou autre).

J’ai installé MAMP, mais je vais galérer pour lui donner les paramètres de mon hébergeur. Même si si j’ai réussi à générer le phpinfo distant.

Pas besoin de ça normalement. Il faut "juste" configurer la base de données si tu en as une, mais pas besoin de triturer les paramètres retournés par phpinfo (l’usage de PHP que tu fais est très générique). Normalement, si tu as installé MAMP, tu n’as plus qu’à copier-coller le code dans ton environnement de travail MAMP (tel qu’indiqué dans le tutoriel), et ça fonctionne (à moins que tu aies besoin d’une BDD)

Bonsoir melepe,

Merci beaucoup pour tes indications qui permettent de mettre en lumière l’origine probable de cette err500, au niveau du JS que j’ai écrit pour faire fonctionner cette page de saisie. Je suis allé à la pêche sur la toile pour trouver un exemple de gestion des boutons radio. Une pêche fructueuse puisque j’ai trouvé un exemple fonctionnel qui me permet de comprendre, malheureusement il est insuffisant, puisque sur le formulaire de départ, donc en amont de l’err500, un bloc (fonctionnel) conditionne l’affichage d’un tableau de chekboxes ou d’un autre tableau avec d’autres options. (Tu retrouves l’ensemble des options des 2 tableaux dans le script que j’ai partagé.

Voici donc le contenu du fichier JS. J’ai commenté ce qui provoquait des erreurs supplémentaires.

function triggerRadio(Type_de_contact, hide, show) {
    if(jQuery(Type_de_contact).prop('checked')) {
        jQuery(show).show();
        jQuery(hide).hide();
    }
    else {
        jQuery(hide).show();
        jQuery(show).hide();
    }
}


/* function afficheOptions(TL,PC,optTL,optPC)
{
	if(document.getElementById('TL').checked)
	{
		return document.getElementById('optTL').style.display ="block";
		return document.getElementById('optPC').style.display ="none";
	}
	if(document.getElementById('PC').checked)
	{
		return document.getElementById('optPC').style.display ="block";
		return document.getElementById('optTL').style.display ="none";
	}
} */


jQuery(document).ready(function() {
    /* Banchement des éléments */
    jQuery('#TL').click(function() {
        triggerRadio('#TL', '#optPC', '#optTL');
    });
    jQuery('#PC').click(function() {
        triggerRadio('#PC', '#optTL', '#optPC');
    });

    jQuery('#AUT').change(function() {
        jQuery('#AUT_detail').prop('disabled', !(jQuery('#AUT').prop('checked')));
    });
    jQuery('#toutazero').click(function() {
        jQuery('#TL, #PC').prop('checked', false);
        jQuery('#optTL, #optPC').hide();
        jQuery('#AUT_detail').prop('disabled', true);
    });
});

// Récupérer toutes les checkbox cochés
//$("input[type='checkbox']:checked").each(function() {
//          console.log($(this).attr('id'));
//});
//$("input[type='radio']:checked").each(function() {
//          console.log($(this).attr('id'));
//});
+0 -0

Déjà on voit ici que le bouton optPC ne peut pas être coché en même temps que le optTL, etc. Donc clairement tous les champs de ton $_POST ne seront jamais simultanément remplis.

Ceci dit, ce javascript est insuffisant pour voir ce que fait le formulaire, tu as le HTML qui va avec ?

Bonsoir melepe,

Le fait que optTL et optPC ne soient pas "cliquables" en même temps est normal, puisque ce sont les points de départs pour les sélections suivantes : une sorte de filtre qui va permettre de faire afficher soit une liste d’options, soit l’autre. Quant au formulaire, c’est celui que j’ai partagé plus tôt :

                   <form action = "contact_V1_Monotoecole_fin.php" method = "POST" enctype = "multipart/form-data" accept-charset = "UTF-8">
                        <div class = "row marge_apres">
                            <div class = "col texte21">
                                <div class = "row border border-primary border-4 rounded marge_gauche  marge_apres">
                                    <fieldset class = "textureAcier">
                                        <legend class = "fieldset">Détails personnels</legend>
                                        <div class = "row">
                                            <div class = "col champ paramquiz">
                                                <label for="nom">Nom : </label>
                                                <input type = "text" name = "nom" value = "<?php echo $resultats['nom'] ?? $utilisateur->nom;?>" tabindex = "1" id = "nom" class = "input" autofocus required/>
                                            </div>
                                        </div>
                                        <div class = "row">
                                            <div class = "col champ paramquiz">
                                                <label for = "prenom">Prénom : </label>
                                                <input type = "text" name = "prenom" value = "<?php echo $resultats['prenom'] ?? $utilisateur->prenom;?>" tabindex = "2" id = "prenom" class = "input" required/>
                                            </div>
                                        </div>
                                        <div class = "row">
                                            <div class = "col champ paramquiz">
                                                <label for = "date_naissance">Date de naissance du candidat : <span class = "gras"><input type = "date" name = "date_naissance" value="<?php echo $resultats['date_naissance'] ?? $utilisateur->date_naissance->format('Y-m-d');?>" tabindex = "3" step = "1" id = "date_naissance" class = "date texte_eval" required/></span>
												</label>
                                            </div>
                                        </div>
                                        <div class = "row">
                                            <div class = "col champ paramquiz">
                                                <label for = "courriel">Courriel : </label>
                                                <input type = "email" name = "courriel" value = "<?php echo $resultats['courriel'] ?? $utilisateur->courriel;?>" id="courriel" class="input" tabindex = "4" required/>
                                            </div>
                                        </div>
                                    </fieldset>
                                </div>
                            </div>
                            <div class = "col texte21">
                                <center>
                                    <div class = "row border border-primary border-4 rounded  marge_gauche">
                                        <fieldset class = "textureAcier">
                                            <legend class = "fieldset">Type de contact</legend>
                                            <div class = "row champ paramquiz">
                                                Vous pouvez choisir ici le type de contact pour spécifier des options supplémentaire.
                                            </div>
                                            <div class = "row">
                                                <div class = "col texte21Gauche">
                                                    <label for = "TL">
                                                        <input type = "radio" name = "Type_de_contact" id = "TL" value = "TL" tabindex = "5" required/> Troubles du langage
                                                    </label>
													<br/>
                                                    <label for = "PC">
                                                        <input type = "radio" name = "Type_de_contact" id = "PC" value = "PC" tabindex = "6" required/> Permis de conduire
                                                    </label>
                                                </div>
											</div>
											<div class = "row paramquiz">
                                                <div class = "col">
                                                    <label for = "message">Message</label>
                                                    <textarea name = "message" placeholder = "Vos dysfficultés" id = "message" class = "textarea form-control" tabindex = "7">
                                                        <?php echo $resultats['message'] ?? null; ?>
                                                    </textarea>
                                                </div>
                                            </div>
                                            <div class = "row texte21Gauche marge_gauche espace_interne_apres">
                                                <input type = "file" id = "document" name = "document" accept = ".jpg,.jpeg,.png,.pcx,.doc,.docx,.rtf" title ="Texte ou image" tabindex = "8"/><br/>
                                                Choisir un fichier texte ou image d'une taille max de 50 Ko.
                                                <input type="hidden" name="MAX_FILE_SIZE" value="50000"/>
                                            </div>
                                        </fieldset>
                                    </div>
                                </center>
                            </div>
                        </div>
                        <div class = "row">
                            <div class = "col texte21" id = "optTL">
                                <div class = "row border border-primary border-4 rounded marge_gauche">
                                    <fieldset class = "textureAcier">
                                        <legend class = "fieldset">Troubles du langage</legend>
                                            <?php
                                            $list1 = [
                                                ['DL' => 'Dyslexie', 'DPH' => 'Dysphasie'],
                                                ['DPR' => 'Dypraxie', 'DC' => 'Dyscalculie'],
                                                ['DO' => 'Dysorthographie'],
												['SU' => 'Surdité', 'AU' => 'Autisme'],
												['SD' => 'Surdoué']
                                            ]; ?>
                                            <?php foreach($list1 as $list): ?>
                                        <div class = "row texte21Gauche justifié espaceApres">
                                            <?php foreach($list as $id => $data): ?>
                                            <div class = "col marge_gauche_liste_troubles_langage">
                                                <label for = "<?php echo $id; ?>">
                                                    <input type = "checkbox" id = "<?php echo $id; ?>" name = "<?php echo $id; ?>" class = "TL_inputs"/>  <?php echo $data;?>
                                                </label>
                                            </div>
                                            <?php endforeach; ?>
                                        </div>
                                            <?php endforeach; ?>
										<div class = "row texte21Gauche espaceApres">
											<div class = "col centre">
												<label for = "AUT_detail">
													<input type = "checkbox" id = "AUT" name = "AUT" class = "TL_inputs"/>
                                                    Autres <input type = "text" id = "AUT_detail" name = "AUT_detail" class = "texte21GaucheAutre" disabled="disabled"/>
												</label>
											</div>
										</div>
                                    </fieldset>
                                </div>
                            </div>
                            <div class = "col texte21" id = "optPC">
                                <div class = "row border border-primary border-4 rounded marge_gauche">
                                    <fieldset class = "textureAcier">
                                        <legend class = "fieldset">Progression Permis</legend>
                                        <div class = "row texte21Gauche espaceApres marge_gauche_infos_perso">
                                            <div class = "col">
                                                <label for = "ETG_auto">
                                                    <input type = "checkbox" id = "ETG_auto" name = "ETG_auto" class = "PP_inputs texte21Gauche"/> ETG - autonomie
                                                </label>
                                            </div>
                                            <div class = "col">
                                                <label for = "ETG_diff">
                                                    <input type = "checkbox" id = "ETG_diff" name = "ETG_diff" class = "PP_inputs texte21Gauche"/> ETG difficile
                                                </label>
                                            </div>
                                        </div>
                                        <div class = "row texte21Gauche espaceApres marge_gauche_infos_perso">
                                            <div class = "col">
                                                <label for = "ETG_ech">
                                                    <input type = "radio" checked = "checked" id = "ETG_ech" name = "ETG_statut" class = "PP_inputs texte21Gauche" value = "ETG_echec"/> ETG - échec
                                                </label>
                                            </div>
                                            <div class = "col">
                                                <label for = "ETG_obt">
                                                    <input type = "radio" id = "ETG_obt" name = "ETG_statut" class = "PP_inputs texte21Gauche" value = "ETG_obtenu"/> ETG - obtenu
                                                </label>
                                            </div>
                                        </div>
                                        <div class = "row texte21Gauche espaceApres marge_gauche_infos_perso">
                                            <div class = "col">
                                                <label for = "COND_diff">
                                                    <input type = "checkbox" id = "COND_diff" name = "COND_diff" class = "PP_inputs"/> Conduite difficile
                                                </label>
                                            </div>
                                            <div class = "col">
                                                <label for = "COND_ech">
                                                    <input type = "checkbox" id = "COND_ech" name = "COND_ech" class = "PP_inputs texte21Gauche"/> Conduite en échec
                                                </label>
                                            </div>
                                        </div>
                                    </fieldset>
                                </div>
                            </div>
                        </div>
                        <div class = "row texte21Gauche espaceApres marge_gauche">
                            <div class = "col">
                                <label for = "Robot" class = "gras">
                                    <input type = "checkbox" id = "Robot" name = "Robot" tabindex = "9" required/> Je ne suis pas un robot.
                                </label>
                            </div>
                        </div>
                        <div class = "row espaceFinPage centre">
                            <div class = "col offset-sm-1">
                                <input name = "Transmettre" type = "submit" id = "Transmettre" value = "Transmettre" class = "btn btn-success" tabindex = "10"/>
                            </div>
                            <div class = "col offset-sm-1">
                                <input name = "toutazero" type = "reset" id = "toutazero" value = "Annuler" class = "btn btn-success" tabindex = "11"/>
                            </div>
                        </div>
                    </form>
                </center>
			</main>
		</div>
		<?php show_footer(); ?>
		<script type = "text/javascript" src = "/contact.js"></script>
		<script type = "text/javascript" src = "/Pendule_dys.js"></script>
	</body>
</html>

Salut,

Je n’ai pas trop le temps de tester en local, mais effectivement tous les champs ne seront pas remplis. Si tu utilises le code avec $champs_optionnels dont j’ai parlé, est-ce que tu as encore une erreur 500 ?

Par ailleurs, est-ce que tu as réussi à installer un environnement de développement local ?

Bonjour melepe,

J’ai adapté et mis en place les quelques lignes que tu m’as préparées, malheureusement, j’obtiens le même résultat avec cette ERR 500. Le "débugeur" du navigateur m’indique que l’origine possible du souci avec le JS. Alors, j’ai retiré le JS et la partie HTML qui l’utilisait, mais je conserve cette erreur.

crbug/1173575, non-JS module files deprecated. (anonymous) @ (index):1883

Quant à l’environnement de dév en local, non, je n’ai pas réussi. Désolé. Et en fouillant un peu dans l’application, j’ai déclenché un pop-up m’informant que cette application est en version d’essai limitée dans le temps.

+0 -0

Pour être honnête, c’est compliqué de t’aider si on n’a pas accès aux messages d’erreur… Juste pour vérifier, est-ce que tu as toujours une erreur 500 si tu enlèves le if/throw ? Que t’affiche un var_dump($filtre_resultat); juste avant le if/throw ?

Tu parles de quelle application ?

Après une recherche Google rapide la ligne crbug/1173575, non-JS module files deprecated. (anonymous) @ (index):1883 semble indépendante de ton problème.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte