Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer valeur formulaire dynamique

Sujet résolu
15 juin 2016 à 12:52:55

Bonjour les amis ! 

Je suis de nouveau confronté à un problème de taille aujourd'hui et je ne vois clairement pas comment le résoudre.

J'ai développé un système de création de formulaire sur un back-office et je fais ensuite l'affichage des différents champs sur une page. Jusqu'ici, tout fonctionne super bien !

Cependant, pour pouvoir envoyer le mail, il faut que je récupère la valeur de chacun des champs et aussi vérifier que les champs obligatoires sont bien remplies. Vous allez-me dire que c'est ultra simple mais pas du tout puisque le formulaire est dynamique et peut varié.

Voici mon code d'affichage de mes différents champs :

<?php

// Requête qui extrait tous les champs du formulaire dont le nom est contact
		$allChamps = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");
		$allChamps2 = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact') ORDER BY champ_position");

		// Compter le nombre de champs pour la disposition
		$nbChamps = array();
		while ($donnees = $allChamps->fetch())
		{
			array_push($nbChamps, $donnees['champ_position']);
		}
		$result = count($nbChamps);
	?>

<form class="inline" id="contactForm" method="post" action="traitement.php"> 
								<div class="row">
									<?php
										$i = 0;
										while ($donnees = $allChamps2->fetch())
										{ 
											if ($donnees['champ_type'] == "text" || $donnees['champ_type'] == "tel" || $donnees['champ_type'] == "email" || $donnees['champ_type'] == "checkbox" || $donnees['champ_type'] == "liste" || $donnees['champ_type'] == "radio" || $donnees['champ_type'] == "file")
											{ ?>
												<div class="col-sm-6 height-contact-element text-center">
													<div class="form-group">
														<?php
															if ($donnees['champ_type'] == "liste")
															{ ?>
																<i><?php echo $donnees['champ_nom']; if ($donnees['champ_obligatoire'] == 1) { ?> * <?php } ?></i><br/><br/>
																<select class="liste" name="<?php echo $donnees['champ_nom']; ?>">
																	<?php 
																		$tabLegendes = explode(",", $donnees['champ_legende']);
																		$nbLegendes = count($tabLegendes);
																		for ($indice = 0; $indice < $nbLegendes; $indice++)
																		{ ?>
																			<option value="<?php echo $tabLegendes[$indice]; ?>"><?php echo $tabLegendes[$indice]; ?></option>
																		<?php }
																	?>
																</select>
															<?php }
															else
															{ 
																if ($donnees['champ_type'] == "radio")
																{ 
																	$tabLegendes = explode(",", $donnees['champ_legende']);
																	$nbLegendes = count($tabLegendes); ?>
																	<i><?php echo $donnees['champ_nom']; if ($donnees['champ_obligatoire'] == 1) { ?> * <?php } ?></i><br/><br/>
																	<?php 
																	for ($indice = 0; $indice < $nbLegendes; $indice++)
																	{ ?>
																		<span class="radio"><input type="<?php echo $donnees['champ_type']; ?>" name="<?php echo $donnees['champ_nom']; ?>" value="<?php echo $tabLegendes[$indice] ?>"/><?php echo $tabLegendes[$indice]; ?><br/></span>
																	<?php }
																}
																else
																{ 
																	if ($donnees['champ_type'] == "checkbox")
																	{ ?>
																		<i><?php echo $donnees['champ_nom']; ?></i>
																		<input type="<?php echo $donnees['champ_type']; ?>" name="<?php echo $donnees['champ_nom']; ?>" value="<?php echo $donnees['champ_nom']; ?>" class="form-control custom-labels checkbox text-center"/>
																	<?php }
																	else 
																	{ 
																		if ($donnees['champ_type'] == "tel") 
																		{ ?>
																			<input type="<?php echo $donnees['champ_type']; ?>" name="<?php echo $donnees['champ_nom']; ?>" class="form-control custom-labels" format="N" minlength="10" maxlength="10" placeholder="<?php echo mb_strtoupper($donnees['champ_nom'], 'UTF-8'); if ($donnees['champ_obligatoire'] == 1) { ?> * <?php } ?>"/>
																		<?php }
																		else
																		{ ?>
																			<input type="<?php echo $donnees['champ_type']; ?>" name="<?php echo $donnees['champ_nom']; ?>" class="form-control custom-labels" placeholder="<?php echo mb_strtoupper($donnees['champ_nom'], 'UTF-8'); if ($donnees['champ_obligatoire'] == 1) { ?> * <?php } ?>"/>
																		<?php }
																	}
																}
															}
														?>
													</div>
												</div>
											<?php }
											else
											{ ?>
												<div class="col-sm-12 height-contact-element text-center">
													<div class="form-group">
														<?php
															if ($donnees['champ_type'] == "separation")
															{ ?>
																<div class="separation"></div>
															<?php }
															else
															{ 
																if ($donnees['champ_type'] == "textarea")
																{ ?>
																	<span class="textarea">
																		<textarea placeholder="<?php echo $donnees['champ_nom']; if ($donnees['champ_obligatoire'] == 1) { ?> * <?php } ?>" class="form-control"></textarea>
																	</span>
																<?php }
																else
																{
																	if ($donnees['champ_type'] == "titre")
																	{ ?>
																		<span class="titre"><h3><?php echo $donnees['champ_nom']; ?></h3></span>
																	<?php }
																	else
																	{
																		if ($donnees['champ_type'] == "sstitre")
																		{ ?>
																			<span class="sstitre"><h5><?php echo $donnees['champ_nom']; ?></h5></span>
																		<?php }
																	}
																}
															}
														?>
													</div>
												</div>
											<?php }
										$i = $i + 1;
										}
									?>

Et voici le début de ma page traitement.php qui va exécuter l'envoi du mail par la suite :

$nbChamps = array();
	$champObligatoire = array();
	$tabPost = array();
	$champs = array();

	// Connexion à la base de données
	include("backoffice/db/connect.php");

	// Requête pour avoir tous les champs du formulaire portant le nom "Contact"
	$allChamps = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");

	// Mettre l'id des champs obligatoire dans un tableau
	while ($donnees = $allChamps->fetch())
	{
		array_push($nbChamps, $donnees['champ_nom']);
		if ($donnees['champ_obligatoire'] == 1)
		{
			array_push($champObligatoire, $donnees['champ_nom']);
		}
	}
	$result = count($nbChamps);

Voila, le but est donc de récupérer la valeur de tous les champs pour pouvoir ensuite faire le script d'envois du mail.

PS : J'ai pensé récupérer la valeur des champs à l'aide du tableau $_POST mais ce n'est pas un tableau numéroté du coup, je n'y arrive pas.

A préciser que j'ai des connaissances en php mais qui ne sont pas suffisantes pour réaliser cela visiblement.

Merci aux personnes qui m'aideront, et bonne journée ! :)

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 13:07:21

Bonjour,

Les données que tu veux récupérer sont-elles contenues dans une base de données? Quand tu dis que tu veux les afficher sur une page et ce que tu veux les afficher dans un tableau? Visuellement quel est le but recherché?

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 13:20:07

Oui les données sont contenues dans une base de données (en regardant le code, on peut le deviner :) )

Non je ne veux pas les afficher dans un tableau.

Le but recherché est un formulaire de contact simple.

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 13:20:55

"il faut que je récupère la valeur de chacun des champs et aussi vérifier que les champs obligatoires sont bien remplies. Vous allez-me dire que c'est ultra simple mais pas du tout puisque le formulaire est dynamique et peut varié."

Comment sait tu qui est obligatoire et qui ne l'est pas varier selon quoi ?
Dynamique ok, mais selon des recettes fixe, post formulaire, ... ?
  • Partager sur Facebook
  • Partager sur Twitter
Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
15 juin 2016 à 13:22:42

Pour sa défense, quand on voit ton formulaire on a pas envie de le lire :D

-
Edité par thejocker9 15 juin 2016 à 13:22:56

  • Partager sur Facebook
  • Partager sur Twitter
Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
15 juin 2016 à 13:24:35

Je gère ça dans ma base de données les champs obligatoires, donc après je fais une requête qui me sort tous les champs obligatoires. Ca c'est pas trop un soucis encore. Ce que je cherche à faire c'est de récupérer la valeur de tous les champs saisies pour ensuite pouvoir les envoyer par mail.
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 13:26:01

thejocker9 a écrit:

Pour sa défense, quand on voit ton formulaire on a pas envie de le lire :D

-
Edité par thejocker9 il y a une minute


Forcement, il est indenté de manière bizarre mais chez moi il est bien indenté. 

Après c'est vrai que ça peut paraître brouillon avec toutes les balises PHP que j'ouvre et que je referme etc..

Mais bon, on m'a toujours dit qu'un développeur doit s'adapter ! Lol

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 13:27:44

Visuellement tu as un exemple de ce que c'est sensé donner? Parce que là ton code est massif, difficile de comprendre où tu veux aller avec ça.
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 13:30:09

VictorBlaf a écrit:

Mais bon, on m'a toujours dit qu'un développeur doit s'adapter ! Lol

Un bon developpeur est surtout fainéant :-°  

  • Partager sur Facebook
  • Partager sur Twitter
Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
15 juin 2016 à 13:35:51

VincentValvas a écrit:

Visuellement tu as un exemple de ce que c'est sensé donner? Parce que là ton code est massif, difficile de comprendre où tu veux aller avec ça.


Je crois que tu comprends mal. Le visuel je l'ai déjà et on s'en fou ici dans mon problème. Mon problème est le suivant :

Je veux récupérer la valeur saisie par l'utilisateur dans tous les champs ! Or étant donné que ce sont des champs crées automatiquement et qui n'ont pas un attribut name défini directement dans la page mais un attribut name dynamique (en fonction de la bdd), je ne comprend pas comment je peux récupérer ses valeurs. 

C'est tout.

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 13:38:19

$_POST n'est qu'une simple variable

Donc si tu veut les récuperer

foreach ($_POST as $key => $value){
    // ...
}

Maintenant j'en revient à ma question
"Comment sait tu qui est obligatoire et qui ne l'est pas varier selon quoi ?"

  • Partager sur Facebook
  • Partager sur Twitter
Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
15 juin 2016 à 14:40:00

Je gère dans ma base de données les champs obligatoires ou pas.

J'ai une colonne qui s'appelle champ_obligatoire dans laquelle on aura 0 si le champ n'est pas obligatoire ou 1 si le champ est obligatoire.

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 14:45:21

ébé tu récupère se tableau et tu le compare avec le $_POST sur lequel tu boucle
  • Partager sur Facebook
  • Partager sur Twitter
Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
15 juin 2016 à 16:36:44

Bon.. Au final c'était pas tout à fait ça parce que j'avais beaucoup plus de tests à réaliser MAIS j'ai quasi réussi !

Le seul problème que je n'arrive pas à régler est de vérifier qu'un champ est obligatoire. (Rappel : Je gère le cas d'un champ obligatoire dans ma bdd en mettant 1 devant le champ. Si il n'est pas obligatoire je met 0).

Le code qui me permet de récupérer la valeur de tous les champs saisies par l'utilisateur : 

	<?php 
		session_start();

		// Déclaration de mes tableaux
		$nbChamps = array();
		$champObligatoire = array();
		$tabPost = array();
		$champs = array();
		$tabCheckbox = array();
		$tabCheckboxModifie = array();
		$champsRemplis = array();


		// Connexion à la base de données
		include("backoffice/db/connect.php");


		// Requêtes pour avoir tous les champs du formulaire portant le nom "Contact"
		$allChamps = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");
		$allChamps2 = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");
		$champsCheckbox = $base->query("SELECT * FROM champs WHERE champ_type = 'checkbox' AND form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");


		// Remplacer les espaces des champs de tyes checkbox par des underscore	
		while ($donnees = $champsCheckbox->fetch())
		{
			array_push($tabCheckbox, $donnees['champ_nom']);
		}
		$nbCheckbox = count($tabCheckbox);

		for ($i = 0; $i < $nbCheckbox; $i++)
		{
			$tabCheckboxModifie[$i] = str_replace(' ', '_', $tabCheckbox[$i]);
		}


		// Mettre l'id des champs obligatoire dans un tableau
		while ($donnees = $allChamps->fetch())
		{
			if ($donnees['champ_obligatoire'] == 1)
			{
				array_push($champObligatoire, $donnees['champ_nom']);
			}
		}


		// Insertion dans le tableau nbChamps de tous les champs 
		$i = 0;
		while ($donnees = $allChamps2->fetch())
		{

			if ($donnees['champ_type'] == "checkbox")
			{
				array_push($nbChamps, $tabCheckboxModifie[$i]);
				$i = $i + 1;
			}
			else
			{
				array_push($nbChamps, $donnees['champ_nom']);
			}
		}
		$result = count($nbChamps);


		// Test pour savoir si la réponse au captcha est vraie ou fausse
		if (isset($_POST['send']))
		{
			if ($_SESSION['resultat'] == $_POST['resultat'])
			{
				echo "Vrai <br/><br/>";
			}
			else
			{
				echo "Faux <br/><br/>";
			}
		}


		// Savoir si la valeur du tableau nbChamps est dans le tableau $_POST puis l'afficher s'il est présent
		for ($i = 0; $i < $result; $i++)
		{
			if (array_key_exists($nbChamps[$i], $_POST))
			{
				$constante = $nbChamps[$i];
				if (!empty($_POST[$constante]))
				{
					array_push($champsRemplis, $_POST[$constante]);
					echo "Il existe : ";
					echo $_POST[$constante];
					echo '<br/>';
				}
			}
		}
	?>


Merci pour l'aide ! 

PS : Je pense que j'aurai pu faire beaucoup plus simple mais maintenant c'est fait et ça fonctionne donc je garde comme ça ^^

-
Edité par Vikotor 15 juin 2016 à 16:39:29

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2016 à 17:00:10

Bo bo bo

Il te parait pas un tantinet complexe ton code la :lol:, j'ai l'impression que c'est très redondant.

Comment tu génère ton formulaire dynamique, sa vient de la bdd ok, mais c'est du a quoi, à un status, un formulaire avant(select, checkbox, ...), le temps qu'il fait ?

Explique moi mieu et je t'aiderai a refaire se code extrenement maintenable et rapide

  • Partager sur Facebook
  • Partager sur Twitter
Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
15 juin 2016 à 17:02:02

"Je gère le cas d'un champ obligatoire dans ma bdd en mettant 1 devant le champ"

Dans se cas, fait une requete qui te retourne tous les champs obligatoire, sous forme de tableau, tu na plus qu'a comparé avec ta boucle sur le foreach

Edit : mais tu les a pas déja dans l'une de tes requetes ?

Je croit qu'il faut que je fasse l'éffort de lire ton code o_O

-
Edité par thejocker9 15 juin 2016 à 17:03:39

  • Partager sur Facebook
  • Partager sur Twitter
Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
16 juin 2016 à 9:24:59

Mon formulaire est généré à l'aide d'un formulaire que j'envois en POST et que j'insère dans ma base de données. Ensuite je gère l'affichage en reprenant tous les champs etc...

thejocker9 a écrit:

Dans se cas, fait une requete qui te retourne tous les champs obligatoire, sous forme de tableau, tu na plus qu'a comparé avec ta boucle sur le foreach

-
Edité par thejocker9 il y a environ 16 heures


C'est déjà fait ça, j'ai déjà un tableau dans lequel tous les champs obligatoires y sont stockés. 

Le truc ce que je ne vois pas avec mon code que j'ai fait précédemment, comment je peux comparer ce tableau avec celui dans lequel j'ai tous mes champs remplis.

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 11:38:18

C'est bon ça marche mais je n'ai pas encore terminé.

J'ai réussi avec le script ci-dessous à récupérer la valeur de tous les champs saisies par l'utilisateur et aussi vérifier si un champ qui possède la saisie obligatoire a été saisie ou non.

<?php 
		session_start();

		// Déclaration de mes tableaux
		$nbChamps = array();
		$champObligatoire = array();
		$tabPost = array();
		$champs = array();
		$tabCheckbox = array();
		$tabCheckboxModifie = array();
		$champsRemplis = array();
		$erreur = "Tous les champs obligatoires sont remplis";


		// Connexion à la base de données
		include("backoffice/db/connect.php");


		// Requêtes pour avoir tous les champs du formulaire portant le nom "Contact"
		$allChamps = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");
		$allChamps2 = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");
		$champsCheckbox = $base->query("SELECT * FROM champs WHERE champ_type = 'checkbox' AND form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");


		// Remplacer les espaces des champs de types checkbox par des underscore	
		while ($donnees = $champsCheckbox->fetch())
		{
			array_push($tabCheckbox, $donnees['champ_nom']);
		}
		$nbCheckbox = count($tabCheckbox);

		for ($i = 0; $i < $nbCheckbox; $i++)
		{
			$tabCheckboxModifie[$i] = str_replace(' ', '_', $tabCheckbox[$i]);
		}


		// Mettre l'id des champs obligatoire dans un tableau
		while ($donnees = $allChamps->fetch())
		{
			if ($donnees['champ_obligatoire'] == 1)
			{
				array_push($champObligatoire, $donnees['champ_nom']);
			}
		}
		$longTabChampObligatoire = count($champObligatoire);

		// Insertion dans le tableau nbChamps de tous les champs 
		$i = 0;
		while ($donnees = $allChamps2->fetch())
		{

			if ($donnees['champ_type'] == "checkbox")
			{
				array_push($nbChamps, $tabCheckboxModifie[$i]);
				$i = $i + 1;
			}
			else
			{
				array_push($nbChamps, $donnees['champ_nom']);
			}
		}
		$result = count($nbChamps);


		// Test pour savoir si la réponse au captcha est vraie ou fausse
		if (isset($_POST['send']))
		{
			if ($_SESSION['resultat'] == $_POST['resultat'])
			{
				echo "Vrai <br/><br/>";
			}
			else
			{
				echo "Faux <br/><br/>";
			}
		}


		// Savoir si la valeur du tableau nbChamps est dans le tableau $_POST puis l'afficher s'il est présent
		for ($i = 0; $i < $result; $i++)
		{
			if (array_key_exists($nbChamps[$i], $_POST))
			{
				$constante = $nbChamps[$i];
				if (!empty($_POST[$constante]))
				{
					array_push($champsRemplis, $_POST[$constante]);
					echo "Il existe : ";
					echo $_POST[$constante];
					echo '<br/>';
				}
				else
				{
					for ($ind = 0; $ind < $longTabChampObligatoire; $ind++)
					{
						// Vérifier que le champ qui ne possède rien est dans le tableau des champs obligatoires
						if (array_key_exists($champObligatoire[$ind], $_POST))
						{
							$constante2 = $champObligatoire[$ind];
							if ($_POST[$constante2] == "")
							{
								$erreur = "Un champ obligatoire n'a pas été rempli";
							}
						}
					}
				}
			}
		}
	?>




Mais je n'ai toujours pas terminé !

Il me reste (si je ne m'abuse) un cas à traiter avant l'envoi du mail. 

Et ce cas là c'est le fait que SI un champ obligatoire n'a pas été saisie, j'aimerais le renvoyer sur la page du formulaire en laissant toutes les saisies qu'il a faite précédemment dans les champs (pour éviter de les faire retaper) et mettre un message au dessus ou en dessous du bouton Valider sur la page du formulaire lui indiquant le champ qui n'a pas été saisie. SINON je ferai alors le script d'envoi du mail avec toutes les données saisies.

Je suppose qu'il faut faire une fonction puis appeler la fonction dans la page du formulaire mais je n'en ai strictement aucune idée.

Merci encore pour l'aide ! :)

-
Edité par Vikotor 16 juin 2016 à 13:23:59

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 15:02:25

Personne ne peut m'aider, c'est assez urgent en plus ? :(

Je rappel ce que je veux faire :

A partir du fichier PHP ci-dessous (fonctionnel), je veux pouvoir envoyer un mail ou alors retourner un message d'erreur à l'utilisateur.

Lorsque l'utilisateur va cliquer sur le bouton d'envoi, le script va alors s'exécuter. Si la variable $message à comme valeur "OK" et que le captcha est correct, alors je ferais le script d'insertion du mail, sinon je veux retourner la variable $message sur la page du formulaire. 

Et c'est là mon problème c'est : Comment retourner cette variable $message à ma page formulaire ?

<?php 
	session_start();

	if (isset($_POST['send']))
	{
		// Déclaration de mes tableaux
		$nbChamps = array();
		$champObligatoire = array();
		$tabPost = array();
		$champs = array();
		$tabCheckbox = array();
		$tabCheckboxModifie = array();
		$message = "OK";


		// Connexion à la base de données
		include("backoffice/db/connect.php");


		// Requêtes pour avoir tous les champs du formulaire portant le nom "Contact"
		$allChamps = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");
		$allChamps2 = $base->query("SELECT * FROM champs WHERE form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");
		$champsCheckbox = $base->query("SELECT * FROM champs WHERE champ_type = 'checkbox' AND form_id in (SELECT form_id FROM formulaires WHERE form_nom = 'Contact')");


		// Remplacer les espaces des champs de types checkbox par des underscore	
		while ($donnees = $champsCheckbox->fetch())
		{
			array_push($tabCheckbox, $donnees['champ_nom']);
		}
		$nbCheckbox = count($tabCheckbox);

		for ($i = 0; $i < $nbCheckbox; $i++)
		{
			$tabCheckboxModifie[$i] = str_replace(' ', '_', $tabCheckbox[$i]);
		}


		// Mettre l'id des champs obligatoire dans un tableau
		while ($donnees = $allChamps->fetch())
		{
			if ($donnees['champ_obligatoire'] == 1)
			{
				array_push($champObligatoire, $donnees['champ_nom']);
			}
		}
		$longTabChampObligatoire = count($champObligatoire);

		// Insertion dans le tableau nbChamps de tous les champs 
		$i = 0;
		while ($donnees = $allChamps2->fetch())
		{

			if ($donnees['champ_type'] == "checkbox")
			{
				array_push($nbChamps, $tabCheckboxModifie[$i]);
				$i = $i + 1;
			}
			else
			{
				array_push($nbChamps, $donnees['champ_nom']);
			}
		}
		$result = count($nbChamps);


		// Savoir si la valeur du tableau nbChamps est dans le tableau $_POST puis l'afficher s'il est présent
		for ($i = 0; $i < $result; $i++)
		{
			if (array_key_exists($nbChamps[$i], $_POST))
			{
				$constante = $nbChamps[$i];
				if (empty($_POST[$constante]))
				{
					for ($ind = 0; $ind < $longTabChampObligatoire; $ind++)
					{
						// Vérifier que le champ qui ne possède rien est dans le tableau des champs obligatoires
						if (array_key_exists($champObligatoire[$ind], $_POST))
						{
							$constante2 = $champObligatoire[$ind];
							if ($_POST[$constante2] == "")
							{
								$message = "Un champ obligatoire n'a pas été rempli";
							}
						}
					}
				}
			}
		}

		
		// Test pour savoir si la réponse au captcha est vraie ou fausse 
		if ($_SESSION['resultat'] == $_POST['resultat'])
		{
			if ($message == "OK")
			{
				// Envoie du mail
				
				$message = "Le mail a bien été envoyé";
			}
		}
		else
		{
			$message = "La réponse au captacha est mauvaise";
		}
		echo $message;
	}
?>


Merci d'avance ! :)

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 15:09:06

Tu peux utiliser la session, tu fais un truc du genre :

$_SESSION['message'] = $message;


Tu récupères le message sur l'autre page comme ça :

session_start();

echo $_SESSION['message'];



-
Edité par Hexus Thalos 16 juin 2016 à 15:09:17

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 15:59:40

C'est pas bête comme idée !

Le problème c'est que je veux qu'il s'affiche seulement après avoir cliqué sur le bouton Valider. En faisant ça, j'ai une erreur PHP sans avoir cliqué sur le bouton...

Puis en plus, après avoir cliqué au moins une fois sur le bouton, la variable de session va toujours garder l'ancienne valeur, même quand on recharge la page :/

-
Edité par Vikotor 16 juin 2016 à 16:02:00

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 16:08:22

Dans ce cas tu fais un truc du genre :

if(!empty($_SESSION['message']))
{
    echo $_SESSION['message'];
    $_SESSION['message'] = NULL;
}

Comme ça pas d'affichage de message si tu n'as pas encore validé et le message n'apparaît qu'une fois

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 16:16:27

Nickel ça fonctionne, je ne pensais pas que c'était possible de réinitialiser une variable de session.

Merci bien !

Dernière chose, est-il possible que si la variable de session message n'a pas comme valeur "Le mail a bien été envoyé", de laisser tous les champs saisies précédemment par l'utilisateur avec la valeur qu'il a saisi ?

C'est pour éviter de tout lui faire retaper.

Je précise que j'ai rajouté un header(Location: ...); à la fin de mon traitement PHP.

Merci à toi pour l'aide en tout cas ! :)

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 16:50:16

Je sais que c'est possible en Javascript mais je sais pas si c'est faisable en PHP, jette un oeil sur Google tu devrais trouver rapidement une réponse :)

Edit: remarque c'est peut être pas très propre mais tu peux stocker les valeurs dans la session, exemple :

$_SESSION['pseudo']
$_SESSION['email']

Et dans ta page de formulaire tu fais des :

<?php

if(!empty($_SESSION['pseudo']))
{
    ?><input type="text" name="pseudo" value="<?php echo $_SESSION['pseudo']?>"/>
    <?php

    $_SESSION['pseudo'] = NULL;
}

else
{
    ?><input type="text" name="pseudo"/>

<?php>

?>




-
Edité par Hexus Thalos 16 juin 2016 à 16:57:07

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 16:55:48

Oui c'est ce que j'ai trouvé aussi. Le problème c'est comment le faire en js sachant que mon formulaire est dynamique et les éléments à l'intérieur peuvent varier ?
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 17:00:04

Si tu pars sur du JS du devrais regarder des tutos de JS, mais dans ce cas tu t'éloignes du PHP. Avec le Javascript la vraie question ce n'est pas "Est-ce que je peux le faire?" mais plutôt "Comment je vais le faire?" :D
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 17:08:15

Je pense pas que c'est pas possible en javascript non plus puisqu'il faut que je regarde si les champs obligatoires contiennent bien des choses. Hors je peux seulement le faire en php cette vérification puisque je ne peux pas récupérer la valeur de tous mes champs en javascript.

Je sais pas si tu comprends ^^

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2016 à 18:04:34

Je comprends, mais si tu veux rendre un champ obligatoire à la saisie du formulaire tu peux aussi utiliser l'argument 'required' dans les 'input'. Enfin si tu utilises un formulaire HTML
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2016 à 10:28:01

Oua merci beaucoup ! Je n'avais absolument pas pensé à l'attribut 'reuired', du coup ça fonctionne à merveille, pas besoin de JS.

MAIS encore un problème !

J'ai un captcha et donc du coup je dois vérifier en javascript si le code du captcha correspond bien à celui de l'image. J'ai essayé de le faire ça fonctionnait bien sauf que les attributs required ne fonctionnent plus puisque j'ai passé mon input qui est censé envoyé le formulaire en type button et non submit...

Du coup même problème, comment renvoyer un message d'erreur à l'utilisateur sans changer la valeur des champs précédemment saisis par l'utilisateur ? En gros un truc du même style que ce que peut faire l'attribut required.

Une fois que ça est géré, normalement tout est ok et je pourrais faire le script d'envois du mail. 

Merci encore !

  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2016 à 11:12:10

Du coup si tu utilises l'argument 'required' pourquoi est-ce que tu as changé ton 'input' pour l'envoi du formulaire en 'button'? A quoi te sert le Javascript du coup dans ta situation?
  • Partager sur Facebook
  • Partager sur Twitter