Je ne comprends pas pourquoi ma variable n'est pas définie

Résolu
fabi00 Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,


Je crée un formulaire de devis et j'essaie d'afficher un message d'erreur lorsque l'utilisateur n'a pas rempli certaines données du formulaire. J'ai donc créé deux variables qui contienne les messages d'erreur, la variable $afficheErreur1 et $afficheErreur2. Cependant au moment de la compilation j'ai un message qui m'indique que les deux variables ne sont pas définies et pourtant elle fonctionne. J'aimerais comprendre pourquoi ? Et comment améliorer ça car visiblement je pense que je m'y prends mal.

Merci d'avance.
Voici mon code...

<?php
		//On démarre une nouvelle session
		session_start();
		
		//Formulaire 1
		//Si on appuie sur le bouton "suivant"
			if(isset($_POST['suivant'])){
				//On récupère les données dans $_POST
					
					$modele=$_POST['modele'];
					$taille=$_POST['taille'];
					$couleur=$_POST['couleur'];
					$quantite=$_POST['quantite'];
		
					//On définit des variables de session
					$_SESSION['modele'] = $modele;
					$_SESSION['taille'] = $taille;
					$_SESSION['couleur'] = $couleur;
					$_SESSION['quantite'] = $quantite;
					
				 if($quantite == false){
					 $afficheErreur1 = "<h4>Veuillez ajouter une quantité</h4>";
					 $_SESSION['afficheErreur1'] = $afficheErreur1;
				 }
				 else{
					// On va sur le formulaire 2
					header ('Location: #demo2');
					die();
				 }
			}
			
			//Formulaire 2
			//Si on appuie sur le bouton "suivant"
						if(isset($_POST['suivant1'])){
							//On récupère les données dans $_POST
								$qualite=$_POST['qualite'];
								$zone=$_POST['zone'];
								$impression=$_POST['impression'];
								$fichier=$_POST['fichier'];
								
								// On va sur le formulaire 3
								header('Location: #demo3');
								die();
								//header('Location: suite2.php');
								
								//On définit des variables de session
								$_SESSION['qualite'] = $qualite;
								$_SESSION['zone'] = $zone;
								$_SESSION['impression'] = $impression;
								$_SESSION['fichier'] = $fichier;
						}
						
						//Si on appuie sur le bouton "Précèdent"
						if(isset($_POST['retour1'])){
							// On va sur la formulaire 1
							header('Location: #demo1');
							die();
						}
			
		//Formulaire 3	
		//Si on appuie sur le bouton "suivant"
		if(isset($_POST['suivant2'])){
			//On récupère les données dans $_POST
				$prenom=$_POST['prenom'];
				$nom=$_POST['nom'];
				$email=$_POST['email'];
				$telephone=$_POST['telephone'];
				$client=$_POST['client'];
				$precision=$_POST['precision'];
				
				$_SESSION['prenom'] = $prenom;
				$_SESSION['nom'] = $nom;
				$_SESSION['email'] = $email;
				$_SESSION['telephone'] = $telephone;
				$_SESSION['client'] = $client;
				$_SESSION['precison'] = $precision;
			
			if($prenom == false || $nom == false || $email == false || $telephone == false){
				 $afficheErreur2 = "<h4>Veuillez compléter les champs obligatoires *</h4>";
				 $_SESSION['afficheErreur2'] = $afficheErreur2;
				}
			 
			 else{
				 header('Location: recupDataTest.php');
				 die();
				}
		}
		//Si on appuie sur le bouton "Précèdent"
		if(isset($_POST['retour2'])){
			// On va sur la page "index.php"
			header('Location: #demo2');
			die();
		}
?>

<!DOCTYPE htlm>
<html lang="fr">
<head>
	<meta charset="utf-8"/>
	<title>Formulaire de devis</title>
		<style>
			#quantite{
				width:3.5em;
			}
			
			select option[value="bleu"]{
				background: blue;
			}
			select option[value="rouge"]{
				background: red;
			}
			select option[value="vert"]{
				background: green;
			}
			h4{
				color: red;
			}
			a {
				  text-decoration: none;
				  padding: 15px;
				  background-color: white;
				  border-radius: 5px;
				  text-transform: uppercase;
				  color: black;
				  border: solid black;
			}
			a:hover{
				background-color: black;
				color: white;
			}
			.modal1 {
			  visibility: hidden;
			  opacity: 0;
			  position: absolute;
			  top: 0; right: 0;
			  bottom: 0; left: 0;
			  display: flex;
			  align-items: center;
			  justify-content: center;
			  background: rgba(77, 77, 77, .7);
			  transition: all .4s;
			}
			.modal1:target {
				  visibility: visible;
				  opacity: 1;
				}
				.modal_content1 {
				  border-radius: 4px;
				  position: relative;
				  width: 500px;
				  max-width: 90%;
				  background: white;
				  padding: 1.5em 2em;
				}
				.modal_close1 {
				  position: absolute;
				  top: 10px;
				  right: 10px;
				  color: grey;
				  text-decoration: none;
				}
				.modal2 {
			  visibility: hidden;
			  opacity: 0;
			  position: absolute;
			  top: 0; right: 0;
			  bottom: 0; left: 0;
			  display: flex;
			  align-items: center;
			  justify-content: center;
			  background: rgba(77, 77, 77, .7);
			  transition: all .4s;
			}
			.modal2:target {
				  visibility: visible;
				  opacity: 1;
				}
				.modal_content2 {
				  border-radius: 4px;
				  position: relative;
				  width: 500px;
				  max-width: 90%;
				  background: white;
				  padding: 1.5em 2em;
				}
				.modal_close2 {
				  position: absolute;
				  top: 10px;
				  right: 10px;
				  color: grey;
				  text-decoration: none;
				}
				.modal3 {
			  visibility: hidden;
			  opacity: 0;
			  position: absolute;
			  top: 0; right: 0;
			  bottom: 0; left: 0;
			  display: flex;
			  align-items: center;
			  justify-content: center;
			  background: rgba(77, 77, 77, .7);
			  transition: all .4s;
			}
			.modal3:target {
				  visibility: visible;
				  opacity: 1;
				}
				.modal_content3 {
				  border-radius: 4px;
				  position: relative;
				  width: 500px;
				  max-width: 90%;
				  background: white;
				  padding: 1.5em 2em;
				}
				.modal_close3 {
				  position: absolute;
				  top: 10px;
				  right: 10px;
				  color: grey;
				  text-decoration: none;
				}
				
		</style>
</head>
<body>
	<a href="#demo1">Devis Express</a>
	
	<!--Formulaire 1 -->
	<div id="demo1" class="modal1">
		<div class="modal_content1">
			<h1>Votre demande de devis</h1>
			<p>Faite votre demande de devis en seulement quelques clics !</br></br></br></p>
			<h2>Vos besoins (Total de 10 pièces minimum)</h2>
			<form action="" method="post">
				<p>
					<label for="modele">Modèle</label>
						<select name="modele" id="modele"/>
							<option>T-shirts</option>
							<option>Sweat-shirts</option>
							<option>Pulls</option>
						</select>
					
					<label for="quantite">Quantité</label>	
					<input type="number" name="quantite" id="quantite" min="10" value="<?php if (isset($_POST['quantite'])){echo $_POST['quantite'];} ?>"/>
					<br></br>	
				</p>

				<p>
					<label for="taille">Taille</label>
						<select name="taille" id="taille"/>
							<option>XS</option>
							<option>S</option>
							<option>M</option>
							<option>L</option>
							<option>XL</option>
						</select>
			
					<label for="couleur">Couleur</label>
						<select name="couleur" id="couleur">
							<option value="bleu">bleu</option>
							<option value="rouge">rouge</option>
							<option value="vert">vert</option>
						</select>
				</p>
				
				<p>
					<input type="submit" name="suivant" value="Suivant"/> 
				</p>
					<?php
						echo  $afficheErreur1;
					?>	
			</form>
		 <a href="#" class="modal_close1">×</a>
		</div>
	</div>
	
	<!--Formulaire 2 -->
	<div id="demo2" class="modal2">
		<div class="modal_content2">
			<h1>Votre demande de devis</h1>
			<p>Faite votre demande de devis en seulement quelques clics !</br></br></br></p>
			<h2>Infos supplémentaires pour impression</h2>
				<form action="" method="post">
					<p>
						<label for="qualite">Qualité</br></label>
						<select name="qualite" id="qualite">
							<option>Promotionnel/1er prix</option>
							<option>Meilleur rapport qualité / prix</option>
							<option>Haut de gamme</option>
						</select>
					</p>
		
					<p>
						<label for="zone">Zone de personnalisation</br></label>
						<select name="zone" id="zone">
							<option>Coeur</option>
							<option>Dos</option>
							<option>Manche</option>
						</select>
					</p>
		
					<p>
						<label for="impression">Technique d'impression</br></label>
						<select name="impression" id="impression">
							<option>DTG</option>
							<option>Transfert quadri</option>
							<option>Sérigraphie</option>
							<option>Flex Flock</option>
							<option>Broderie</option>
							<option>Sublimation</option>
						</select>
					</p>
		
					<p>
						<label for="fichier">Importez vos fichiers ici</br></label>
						<input type="file" id="fichier" name="fichier" accept="image/png, image/jpeg, .ai,
						.eps, .pdf, .svg">
					</p>
		
					<p>
						<input type="submit" name="retour1" value="Précèdent"/>
						<input type="submit" name="suivant1" value="Suivant"/>
					</p>
				</form>
		<a href="#" class="modal_close2">×</a>
		</div>
	</div>

	<!--Formulaire 3 -->
	<div id="demo3" class="modal3">
		<div class="modal_content3">
			<h1>Votre demande de devis</h1>
			<p>Faite votre demande de devis en seulement quelques clics !</br></br></br></p>
			<h2>Informations et précisions</h2>
		<form action="" method="post">
			<p>
				<input type="text" name="prenom" id="prenom" placeholder="prénom*" value ="<?php if (isset($_POST['prenom'])){echo $_POST['prenom'];} ?>"/>
				<input type="text" name="nom" id="nom" placeholder="Nom*" value ="<?php if (isset($_POST['nom'])){echo $_POST['nom'];} ?>"/>
				<input type="email" name="email" id="email" size="30" placeholder="Adresse mail*" value ="<?php if (isset($_POST['email'])){echo $_POST['email'];} ?>"/>
			</p>
		
			<p>
				<input type="tel" id="telephone" name="telephone" placeholder="Téléphone*" value ="<?php if (isset($_POST['telephone'])){echo $_POST['telephone'];} ?>"/>
				<select name="client" id="client">
					<option>Particulier</option>
					<option>Entreprise</option>
					<option>Autre</option>
				</select>
			</p>
		
			<p>
				<textarea id="precision" name="precision" rows="5" cols="40" 
				placeholder="Précision"></textarea>
			</p>
		
			<p>
				<input type="submit" name="retour2" value="Précèdent"/>
				<input type="submit" name="suivant2" value="Envoyer"/>
		</p>
		<?php
			echo  $afficheErreur2;
		?>	
	</form>
		<a href="#" class="modal_close3">×</a>
		</div>
	</div>
</body>
</html>

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
ton message d'erreur ne t'indique aucun numéro de ligne?

es-tu certain que, avant d'exécuter la ligne 272, le code exécute d'abord une instruction
$afficheErreur1= ...;
?
Sinon, en ligne 272, le contenu de
$afficheErreur1
est indéfini.
1
fabi00 Messages postés 82 Date d'inscription   Statut Membre Dernière intervention  
 
Bah oui, en fait il fallait juste tester si la variable était renseignée ou pas. Merci beaucoup.
0
jee pee Messages postés 41520 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Bonjour,

Au premier passage sur le formulaire, les variables ne sont pas définies, elles ne vont l'être qu'après. Il faudrait tester que la variable est renseignée ou pas :
<?php
						 if (isset($afficheErreur1)) {echo $afficheErreur1;}
?> 

1
fabi00 Messages postés 82 Date d'inscription   Statut Membre Dernière intervention  
 
Ah super, c'était ça ! En effet, il fallait tester pour voir si la variable était renseignée ou pas. Merci beaucoup.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > fabi00 Messages postés 82 Date d'inscription   Statut Membre Dernière intervention  
 
Tu peux aussi assigner une valeur à la variable en début de programme.
1