[RESOLU] Transmettre une variable

Eléphant du PHP | 69 Messages

24 déc. 2013, 17:01

Bonjour,

Je cherche à transmettre une variable sur une autre page, hors elle ne s'affiche pas.
Je pense que l'erreur est faible mais je sais pas comment faire :(

Donc sans plus attendre les codes !

Le formulaire d'inscription :
<form action="contenu/inscription/fonction.php" class="inscription" method="post" >
		<fieldset>
			
			<legend>REJOIGNEZ-NOUS</legend>
			
			<label>» NOM</label><input class="a" name="nom" type="text" />
			<label>» PRENOM</label><input class="a" name="prenom" type="text" />
			<label>» EMAIL</label><input class="a" name="email" type="email" />
			<label>» MOT DE PASSE</label><input class="a" name="mdp1" type="password" />
			<label>» MOT DE PASSE (Confirmation)</label><input class="a" name="mdp2" type="password" />
			
			<input class="b" name="inscription" type="submit" value="Inscription !" />
			
			<span><?php echo $echo; ?></span>
			
			<div style="clear : both;" ></div>
			
		</fieldset>
		
	</form>
La page fonction qui est apellé :
<?php
		
		$url = $_SERVER["HTTP_REFERER"];
		
		if(isset($_POST['inscription']))
		{
			if(empty($_POST['nom']) AND (preg_match('#^[a-zA-Z]{3,}$#', $_POST['nom'])))
			{
				$echo = 'Nom invalide';
				header('Location:'.$url.'');
			}
			
			else if(empty($_POST['prenom']) AND (preg_match('#^[a-zA-Z]{3,}$#', $_POST['prenom'])))
			{
				$echo = 'Prénom invalide';
				header('Location:'.$url.'');
			}
			
			else if(empty($_POST['email']) AND (preg_match('#^[0-9a-z-_.]+@[0-9a-z-_.]{2,}\.[a-z]{2,4}$#', $_POST['email']) ))
			{
				$echo = 'Email invalide';
				header('Location:'.$url.'');
			}
			
			else if(empty($_POST['mot_de_passe1']))
			{
				$echo = 'Mot de passe invalide';
				header('Location:'.$url.'');
			}
			
			else if(empty($_POST['mot_de_passe2']))
			{
				$echo = 'Mot de passe invalide';
				header('Location:'.$url.'');
			}
			
			else if(($_POST['mot_de_passe1']) != ($_POST['mot_de_passe2']))
			{
				$echo = 'Mots de passes différents';
				header('Location:'.$url.'');
			}
			
			else
			{
				$nom = ucfirst($_POST['nom']);
				$prenom = ucfirst($_POST['prenom']);
				$email = strtolower($_POST['email']);
				$mot_de_passe = sha1($_POST['mot_de_passe1']);
				
				$requete = $bdd->prepare('INSERT INTO membre (id, nom, prenom, email, mot_de_passe) VALUES("", :nom, :prenom :email, :mot_de_passe)');
				$requete->execute(array(
				
					'nom' => $nom,
					'prenom' => $prenom,
					'email' => $email,
					'mot_de_passe' => $mot_de_passe,
				));
				
				$echo = 'Inscription réussite !';
				header('Location:'.$url.'');
			}
		}
		
	?>
Donc, comme vous le remarquer une variable '$echo' affiche l'erreur !

Le soucis est que, aprés avoir 'MAL' remplie mon formulaire, fonction.php crée la variable ($echo) mais ne l''affiche pas sur la page de formulaire :(

Et c'est donc là que je m'en remet à vous.

Petit nouveau ! | 6 Messages

24 déc. 2013, 18:41

Salut,

Au lieu d'afficher directement la variable, tu pourrais utiliser la superglobale $_GET dans header() et la récupérer dans le formulaire :
<span><?php echo $_GET['echo'];  ?></span>
La page fonction :
<?php
               
                $url = $_SERVER["HTTP_REFERER"];
               
                if(isset($_POST['inscription']))
                {
                        if(empty($_POST['nom']) AND (preg_match('#^[a-zA-Z]{3,}$#', $_POST['nom'])))
                        {
                                $echo = 'Nom invalide';
                        }
                       
                        else if(empty($_POST['prenom']) AND (preg_match('#^[a-zA-Z]{3,}$#', $_POST['prenom'])))
                        {
                                $echo = 'Prénom invalide';
                        }
                       
                        else if(empty($_POST['email']) AND (preg_match('#^[0-9a-z-_.]+@[0-9a-z-_.]{2,}\.[a-z]{2,4}$#', $_POST['email']) ))
                        {
                                $echo = 'Email invalide';
                        }
                       
                        else if(empty($_POST['mot_de_passe1']))
                        {
                                $echo = 'Mot de passe invalide';
                        }
                       
                        else if(empty($_POST['mot_de_passe2']))
                        {
                                $echo = 'Mot de passe invalide';
                        }
                       
                        else if(($_POST['mot_de_passe1']) != ($_POST['mot_de_passe2']))
                        {
                                $echo = 'Mots de passes différents';
                        }
                       
                        else
                        {
                                $nom = ucfirst($_POST['nom']);
                                $prenom = ucfirst($_POST['prenom']);
                                $email = strtolower($_POST['email']);
                                $mot_de_passe = sha1($_POST['mot_de_passe1']);
                               
                                $requete = $bdd->prepare('INSERT INTO membre (id, nom, prenom, email, mot_de_passe) VALUES("", :nom, :prenom :email, :mot_de_passe)');
                                $requete->execute(array(
                               
                                        'nom' => $nom,
                                        'prenom' => $prenom,
                                        'email' => $email,
                                        'mot_de_passe' => $mot_de_passe,
                                ));
                               
                                $echo = 'Inscription réussite !';
                        }
                                header('Location:'.$url.'?echo='. $echo .'');
                }
               
        ?>
Qu'est-ce que ça donne ?

Mammouth du PHP | 2278 Messages

24 déc. 2013, 21:35

1) Si la méthode est post, il serait étonnant que $_GET contienne quelque chose.
2) Tester si inscription est vide ou non n'a guère d'utilté
3) ça fonctionne parfaitement comme le prouve fonction.php
<?PHP
print_r($_POST);
?>
4) if(empty($_POST['nom']) AND (preg_match('#^[a-zA-Z]{3,}$#', $_POST['nom']))) suppose que $_POSt['nom']soit vide en même temps qu'il satisfait la condition du preg...
5) Il serait plus simple de ne pas empiler les if, mais de tester les choses une par une en accumulant les messages.
6) <input name = 'nom' required = 'required' /> simplifie beaucoup d tests
7) Il existe un filter_var http://us2.php.net/manual/fr/function.filter-var.php qui fait du bon travail avec http://us2.php.net/manual/fr/filter.fil ... lidate.php
<?PHP
print_r($_POST);
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 69 Messages

24 déc. 2013, 23:19

Effectivement $_GET donne rien
5) Il serait plus simple de ne pas empiler les if, mais de tester les choses une par une en accumulant les messages.
Je comprend pas ce que tu veux dire, un exemple ?

Et pour
6) <input name = 'nom' required = 'required' /> simplifie beaucoup d tests


Sa à l'air intéressant mais je comprend pas trop non plus :/

Mammouth du PHP | 2278 Messages

25 déc. 2013, 16:04

Commençons par required
<input type = 'text' name ='toto' /> permet de passer un texte vide
<input type = 'text' name='toto' required = 'requred' /> a cet effet
tant que ce champ est vide, si on clique sur submit, on reçoit un message et le formulaire n'est pas transmis: inutile par la suite de tester si ce champ a été rempli.

teste ça si tu ne veux pas modifier ton code
<form>
<input required='required' name ='1'  />
<input required='required' name ='2'  / >
<button type = 'submit'>ok</button >
</form>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 69 Messages

26 déc. 2013, 20:22

Pas mal du tout. j'ai tout remplacé et sa soulage le PHP.

Pour mon erreur, j'ai finalement mis le PHP sur la même page, ca fonctionne !

Si tu as d'autres astuces je suis preneur, j'aime quand c'est alléger !