PhP 'verifiaction des champs

Fermé
J@rodd Messages postés 39 Date d'inscription mercredi 5 octobre 2011 Statut Membre Dernière intervention 26 octobre 2015 - 8 août 2012 à 17:23
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 14 août 2012 à 13:35
Bonjour,

après plusieurs essaye et échecs, je viens sollicité votre aide.
Mon problème:
1° je cherche a verifier un champ de formulaire si il est vide.
Mais le vrais problème c'est que apres avoir vérifier si le bouton submit a été appuyer et que je definis les variables $_POST[''] pourqu'il me dit que les champs sont vides ou pas mais a chaque fois il m'envoi l'erreur que j attend le moins "Notice: Undefined variable: log in C:\wamp\www\..."
A moins que je sais pas ce que je veux faire ou que je dois me remettre a niveau sur le php bah je sais pas ;)

Donc je sollicite votre aide et encore merci.
A voir également:

9 réponses

youkc Messages postés 46 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 15 août 2012 3
8 août 2012 à 17:44
salut !
l'erreur est que tu essayes de récupérer une variable non définie.

pour réglé ton problème je croix que tu doit poster le code comme ça on verra exactement le problème et on t'aidera vite fait.
0
Utilisateur anonyme
8 août 2012 à 17:46
Bonjour,

Oui post le code s'il te plait :)
0
J@rodd Messages postés 39 Date d'inscription mercredi 5 octobre 2011 Statut Membre Dernière intervention 26 octobre 2015
Modifié par J@rodd le 8/08/2012 à 19:44
Oui je suis d'accord sur le fait, j'essaye de recup une variable non definie car si déjà sa vérifie pas si elle est pas poster c'est normal qu'elle m'envoie une error de define.

Voici le code de test:

<?php
$id_login = "admin";
$id_pass = "admin";
$error_champ = "champ vide";
if(isset($_POST['action']) and $_POST['espion'] == "envoi")
{
$log = $_POST['login'];
$pass = $_POST['password'];
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>WEB Project</title>
<meta name="author" content="Karasu" />
<link rel="stylesheet" type="text/css" href="css/style.css">
<!-- Date: 2012-02-02 -->
</head>
<body>
<div id="header">
</div>
<div id="contents">
<article>
le contents
</article>
<div id="test">
<p> Test de la partie Login </p>
<form method="POST" action="index.php">
<fieldset>
<legend>Connect</legend>
<label for="ID_login">Login :</label><?php if($log == "") echo $error_champ;?><!-- verifie si le champ est vide-->
<input type="text" name="login" />
<br>
<label for="ID_pass">Password</label>
<input type="password" name="password" />
<br>
</fieldset>
<!--variable de verification d'envoie -->
<input type="hidden" name="espion" value="envoi" />
<input type="submit" name="action" value="Tester" />
</form>
</div>
</div>
<!--<div id="login">
<center>
<p> La partie Login ici</p>
<table>
<tr>
<td>
<p>Voir le contenu de la balise "table"</p>
</tr>
</td>
</table>
</center>
</div>-->
</body>
</html>

Ps: le code ne marche que enfin presque si j'appuie une fois sur le submit! Mais imaginons que c est ma 1ere visit et dés que j'arrive cela m'affiche une erreur, je veux qu il m'envoie l'erreur qu'apres envoi si ya eu biensur.. ;)
0
Alors la solution sale :
tu peux mettre if(@$log=="").......la suite de ton code ou alors tout en haut quand tu vérifie si tes variable existe tu met else $log="";

Ca donne donc :



<?php 
$id_login = "admin"; 
$id_pass = "admin"; 
$error_champ = "champ vide"; 
if(isset($_POST['action']) and $_POST['espion'] == "envoi") 
{ 
    $log = $_POST['login']; 
     $pass = $_POST['password']; 
} 
else 
   $log=""; //voila donc la elle existe 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
   <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
      <title>WEB Project</title> 
      <meta name="author" content="Karasu" /> 
      <link rel="stylesheet" type="text/css" href="css/style.css"> 
      <!-- Date: 2012-02-02 --> 
   </head> 
   <body> 
      <div id="header"> 
      </div> 
      <div id="contents"> 
         <article> 
            le contents 
         </article> 
         <div id="test"> 
            <p> Test de la partie Login </p> 
            <form method="POST" action="index.php"> 
               <fieldset> 
                  <legend>Connect</legend> 
                  <label for="ID_login">Login :</label><?php if(@$log == "") echo  $error_champ;?> 

<!-- ici tu peux meme mettre <?=@log==""?$error_champ:""; ?> au lieu de <?php if(@$log=="") echo $error_champ;?>--> 

               <!-- verifie si le champ est vide--> 
               <input type="text" name="login" /> 
               <br> 
               <label for="ID_pass">Password</label> 
               <input type="password" name="password" /> 
               <br> 
            </fieldset> 
               <!--variable de verification d'envoie --> 
            <input type="hidden" name="espion" value="envoi" /> 
           <input type="submit" name="action" value="Tester" /> 
         </form> 
      </div> 
</div> 
      <!--<div id="login"> 
         <center> 
            <p> La partie Login ici</p> 
            <table> 
               <tr> 
                  <td> 
                        <p>Voir le contenu de la balise "table"</p> 
                  </tr> 
               </td> 
            </table> 
         </center> 
      </div>--> 
   </body> 
</html>  


Sinon evite les <br /> et les <center> fais plutot du css. à la fin div id="login", attention tu as inversé les tr et les td... les td sont dans les tr normalement.

Essai de modifier comme je te l'ai mis ce devrai fonctionner ;)
Quand la vie apporte des questions, Google donne les réponses.
Les logiciels sont comme le sexe ; meilleurs quand c'est gratuit.
0
J@rodd Messages postés 39 Date d'inscription mercredi 5 octobre 2011 Statut Membre Dernière intervention 26 octobre 2015
Modifié par J@rodd le 8/08/2012 à 20:27
Les td et les tr c'est vrai que j ai pas regardé merci pr l'infos^^.
"<!-- ici tu peux meme mettre <?=@log==""?$error_champ:""; ?> au lieu de <?php if(@$log=="") echo $error_champ;?>-->"
Concernant la partie que tu as add explique la un peu je suis de niveau debutant^^ en php.

Et la solution propre c'est quoi? (la tu me propose que la sale XD
Thanks pour les réponses

edit: je viens de test en définissant les variables comme étant vide mais imaginons que c'est la premiere fois que je viens sur le site et il me dit que les champs sont vide alors que je n 'ai rien taper c'est un peu absurde tu vois quoi ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
La solution sale c'est juste de mettre le @ ^^ le reste en plus c'est le propre ^^

Normalement quand on écrit du code php dans du html juste pour appeler une variable on fait <?=$variable; ?>

Pas besoin de echo, mais là tu as une condition, avec le ternaire çà donne :

$variable=$condition?vrai:faux;

donc (@$log=="")?($error_champ):("");
Las parenthèse sont optionnelles, ca done donc @$log==""?$error_champ:"";
"" correspond à "Fait rien ma nouille :p.


A la fin ca donne <?=(@$log=="")?$error_champ:""; ?>

Quand tu as compris c'est plus clair et c'est moins le bazar à regarder. C'est une convention comme une autre^^ Comme par exemple celle qui consiste à mettre "&&" et non "AND" dans les conditions ^^

Essai de copier mon code, et comme tu as tout compris tu vas même ecrire :
<?=(@$log=="")?@$error_champ:""; ?>
Parce que tu as tout suivi et que tu as vu que tu pouvais écrire :



<?php   
$id_login = "admin";   
$id_pass = "admin";   
$error_champ = "champ vide";   
$log="";  
if(isset($_POST['action']) and $_POST['espion'] == "envoi")   
{   
    $log = $_POST['login'];   
     $pass = $_POST['password'];   
}   

?>   



Dis moi si çà fonctionne ^^

A quoi sert ton site ?
Quand la vie apporte des questions, Google donne les réponses.
Les logiciels sont comme le sexe ; meilleurs quand c'est gratuit.
0
J@rodd Messages postés 39 Date d'inscription mercredi 5 octobre 2011 Statut Membre Dernière intervention 26 octobre 2015
8 août 2012 à 20:49
Sa fonctionne mais le hic c'est que sa refait la même bêtise first connection == champ vide.Et c'est ce qu je veux éviter.

A quoi sert ton site ? bah pour dire vrai il sert pas a grand chose pour le moment car il est la juste pour m'aider a mieux maitrisé les bases du php. (la c'est sur les conditions avec les boucles après les function que je ne comprend pas même pas le début)
Rien ne vaut la pratique
0
Utilisateur anonyme
8 août 2012 à 21:14
ah ok pardon en faite je crois j'avais rien compris à ton problème XD

<?php   
$id_login = "admin";   
$id_pass = "admin";   
$error_champ = "";   
$log="";  
if(isset($_POST['action']) and $_POST['espion'] == "envoi")   
{   
  

     $log = $_POST['login'];   
     $pass = $_POST['password'];   

}   
elseif(empty($_POST['action']) ) 
       $error_champ = "champ vide";

?>   


C'est mieux ?
Hésite pas à me poser des questions en mp surtout ^^ C'est bien de ne pas juste "lire" les tutos, les gens comme toi sont rares je te félicite :)
0
J@rodd Messages postés 39 Date d'inscription mercredi 5 octobre 2011 Statut Membre Dernière intervention 26 octobre 2015
10 août 2012 à 04:29
On va dire que c'est une autre façon de l'ecrire car là il me donne les même réponses qu'au premier test que j'avais fait avant et donc la ou les vars ne sont pas définis jusqu'à ce que j'appuie au moins une fois sur le submit.
J'essaye de trouver une autre alternative.
Merci de tes réponses ne tout cas si j'ai besoin d'aide je te mp ;)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 août 2012 à 10:20
une solution: (si ta page se nomme bien index.php)
<?php
///// init variables
$id_login = "admin";
$id_pass = "admin";
$error_champ1 = "";
$error_champ2 = "";
$saisie_ok=true;
$affichage_formulaire=true;
////
if(isset($_POST['action']) && $_POST['espion'] == "envoi")
{
	//test des champ vides
	if(empty($_POST['login'])) {
		$error_champ1="Vous devez saisir le login";
		$saisie_ok=false;
		
	}else{
		$log = $_POST['login'];
	}
	if(empty($_POST['password'])) {
		$error_champ1="Vous devez saisir le mot de passe";
		$saisie_ok=false;
		
	}else{
		$pass = $_POST['password'];
	}
	
	if($saisie_ok){
		//tout ok donc on ne ré&affiche pas le formulaire 
		$affichage_formulaire=false; 
				
			//la suite du traitement
	
	}

}

if($affichage_formulaire){
	// premier affichage ou réaffichage formulaire en cas d'erreur
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>WEB Project</title>
<meta name="author" content="Karasu" />
<link rel="stylesheet" type="text/css" href="css/style.css">
<!-- Date: 2012-02-02 -->
</head>
<body>
<div id="header">
</div>
<div id="contents">
<article>
le contents
</article>
<div id="test">
<p> Test de la partie Login </p>
<form method="POST" action="index.php">
<fieldset>
<legend>Connect</legend>
<!-- 
<label for="ID_login">Login :</label><?php if($log == "") echo $error_champ;?>
c'est normal que tu détectes l'erreur dès le premier affichage puisque le login n'a pas encore été saisi
-->
<label for="ID_login">Login :</label><?php if($error_champ1 != "") echo '<font color="red">'.$error_champ1.'</font>'; ?>
<!-- on affiche le message que si il y a lieu de l'afficher -->
<input type="text" name="login" />
<br>
<label for="ID_pass">Password</label><?php if($error_champ2 != "") echo '<font color="red">'.$error_champ2.'</font>'; ?>
<input type="password" name="password" />
<br>
</fieldset>
<!--variable de verification d'envoie -->
<input type="hidden" name="espion" value="envoi" />
<input type="submit" name="action" value="Tester" />
</form>
</div>
</div>
<!--<div id="login">
<center>
<p> La partie Login ici</p>
<table>
<tr>
<td>
<p>Voir le contenu de la balise "table"</p>
</tr>
</td>
</table>
</center>
</div>-->
<?php
} //fin du if affichage formulaire
?>
</body>
</html>
0
J@rodd Messages postés 39 Date d'inscription mercredi 5 octobre 2011 Statut Membre Dernière intervention 26 octobre 2015
14 août 2012 à 13:01
merci pour ta reponse mais :
<label for="ID_pass">Password</label><?php if($error_champ2 != "") echo '<font color="red">'.$error_champ2.'</font>'; ?>
<input type="password" name="password" />

Sur le if ($error...) sa serais pas mieux de verifier si elle a été poster avant de l'afficher? ce que j'avais pas fait jusque la ^^)
2° le $error != je le comprend pas trp bien (si il est différent de "vide" afficher l'erreur peut etre erreur de frappe.
Mais ta façon de faire m'intéresse ;)
Merci de la réponse
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
14 août 2012 à 13:35
pour une meilleur compréhension je t'ai rajouté qqs commentaires dans le code
<?php
///// init variables
$id_login = "admin";
$id_pass = "admin";
//// ci dessous au début du script on initialise les variables qui vont stoquer les messages d'erreur à vide
$error_champ1 = "";
$error_champ2 = "";
////
$saisie_ok=true;
$affichage_formulaire=true;
//
if(isset($_POST['action']) && $_POST['espion'] == "envoi")
{
	//test des champ vides
	// ci dessous si le champ est vide on charge la variable d'erreur correspondante avec un message explicite
	if(empty($_POST['login'])) {
			//vide donc on rentre un message dans la variable $error....
		$error_champ1="Vous devez saisir le login";
				//la saisie n'est pas satisfaisante donc on modifie la variable $saisie_ok
				//on ne modiife pas la variable $affichage_formulaire qui va rester =true pour réafficher le formulaire
		$saisie_ok=false;
		
	}else{
		$log = $_POST['login'];
	}
	if(empty($_POST['password'])) {
		$error_champ1="Vous devez saisir le mot de passe";
		$saisie_ok=false;
		
	}else{
		$pass = $_POST['password'];
	}
	
	if($saisie_ok){
		//tout ok donc on ne ré&affiche pas le formulaire 
		$affichage_formulaire=false; 
				
			//la suite du traitement
	
	}

}

if($affichage_formulaire){
	// premier affichage ou réaffichage formulaire en cas d'erreur
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>WEB Project</title>
<meta name="author" content="Karasu" />
<link rel="stylesheet" type="text/css" href="css/style.css">
<!-- Date: 2012-02-02 -->
</head>
<body>
<div id="header">
</div>
<div id="contents">
<article>
le contents
</article>
<div id="test">
<p> Test de la partie Login </p>
<form method="POST" action="index.php">
<fieldset>
<legend>Connect</legend>
<!-- 
<label for="ID_login">Login :</label><?php if($log == "") echo $error_champ;?>
c'est normal que tu détectes l'erreur dès le premier affichage puisque le login n'a pas encore été saisi
-->
<label for="ID_login">Login :</label><?php if($error_champ1 != "") echo '<font color="red">'.$error_champ1.'</font>'; ?>
<!-- on affiche le message que si il y a lieu de l'afficher 
en testant si la variable conenant l'eventuel mesage d'erreur est vide:
- si le formulaire n'a pas encore été posté (premier affichage) la variable est forcément vide puisqu'initialisée à vide au début de la page
- si le formulaire a été posté, les tets => si vide on a un contenu dans la variable $erreur... donc on l'affiche
=> si pas vide on n'affiche rien puisque la variable initialisée à vide en début de page le rets à vide

je ne vois pas le rapport ave une erreur de frappe ? ou alors il faut que tu rajoutes un test

-->
<input type="text" name="login" />
<br>
<label for="ID_pass">Password</label><?php if($error_champ2 != "") echo '<font color="red">'.$error_champ2.'</font>'; ?>
<input type="password" name="password" />
<br>
</fieldset>
<!--variable de verification d'envoie -->
<input type="hidden" name="espion" value="envoi" />
<input type="submit" name="action" value="Tester" />
</form>
</div>
</div>
<!--<div id="login">
<center>
<p> La partie Login ici</p>
<table>
<tr>
<td>
<p>Voir le contenu de la balise "table"</p>
</tr>
</td>
</table>
</center>
</div>-->
<?php
} //fin du if affichage formulaire
?>
</body>
</html>
0