Formulaire d'inscription affichage erreurs ou confirmation

Eléphant du PHP | 254 Messages

17 mars 2006, 16:18

ça fait combien la séance ? Ca va me revenir cher !!! :lol: :lol: :lol: :wink:
Bon sérieusement
J'ai compris, qu'en haut de mon document, j'initialise donc cette variable :
$success = false; Je comprends bien sa fonction qui permet de tester et confirmer les conditions et donc d'executer les traitements.
Mais si (il en fallait bien un ;-)) j'ai plusieurs traitements ?
Comment les hiérarchiser, ou plutôt, comment les distinguer ?
J'ai donc :
<?php 
// avant mon init des variables 
$success = false;
///blablabla.....tests de conditions
if ($ajoutMembre=="ok") ///on continue
if ($pass==$pass2) //on continue
if ($totalRows_Membre==0) // on a tout vérifié, on enregistre dans la base //puis on envoie le mail....
mail($adresse,$titre,$message,$headers); 
// puis je lui dis : t'as gagné t'es un chef ! 
$success = true;
// hehe maintenant, vas traiter les erreurs
	}else{ 
        	//si l'email existe déjà > message d'erreur 
    	$success = false; 
   	} 
            }else{ // mots de passes différents
            $success = false;
            } 
       }else{  //heuuuu pourquoi j'ai mis ça moi ? Ca devait correspondre au dernier message de bienvenue !!!!
       $success = false; 
}?> 
:?:
il faut que j'enlève le premier
$success = true ; // juste derrière l'envoi du mail et que je le mette en toute dernière position ?
 mail($adresse,$titre,$message,$headers); 
	
	}else{ 
        	//si l'email existe déjà > message d'erreur 
    	$success = false; 
   	 } 
            }else{ 
            $success = false;
            } 
       }else{ 
       $success = true; 
}?> 
C'est ça doc ?

Eléphant du PHP | 254 Messages

17 mars 2006, 16:24

j'ai lu ton réédit mai savant de tout recommencer
Si je mets
<?php $_POST['password'];?> // 
j'ai un undefined index quand j'arrive sur le formulaire pour la première fois
c'est pour ça que j'avais mis par défaut :
<?php echo $password ;?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mars 2006, 16:36

lol !!! je crois que je déteint sur toi avec mes commentaires à deux sous :)
bah le principale c'est qu'ils soient compréhensibles :)

Ton premier code est bon, si tu ressors de là avec un $succes à vrai, c'est que tout s'est bien passé. Le soucis est donc de déterminer en cas d'échec, quelle erreur tu as rencontré. Le plus simple à mon avis, c'est de renseigner une variable $message que tu n'auras plus qu'à afficher :

J'en profite pour ré-indenter tout ça (ouais, chuis désolé, j'ai un petit côté maniaque avec ça, mais ça rend les choses quand même beaucoup plus lisibles ;))
<?php 
// avant mon init des variables 
$success = false; 
$message = ""; // mon message est vide par défaut, comme ça il ne s'affichera pas tant qu'on aura pas envoyé de formulaire
///blablabla.....tests de conditions 
if ($ajoutMembre=="ok") { ///on continue 
	if ($pass==$pass2) {//on continue 
		if ($totalRows_Membre==0) {// on a tout vérifié, on enregistre dans la base //puis on envoie le mail.... 
			mail($adresse,$titre,$message,$headers); 
			// puis je lui dis : t'as gagné t'es un chef ! 
			$success = true; 
			$message = "Champioooon du moonnde !!"; // partageons avec lui ce moment de bonheur ! ;)
		// hehe maintenant, vas traiter les erreurs 
    	}else{ 
			//si l'email existe déjà > message d'erreur 
			$success = false; 
			$message = "On me la fait pas à moi, ton mail je l'ai déjà !"; :p
		} 
	}else{ // mots de passes différents 
		$success = false; 
		$message = "Ca commence mal si tu n'arrives pas à resaisir ton mot de passe correctement à 10 secondes d'intervale, imagine dans 3 jours quand tu reviendras";
	} 
}else{  //heuuuu pourquoi j'ai mis ça moi ? Ca devait correspondre au dernier message de bienvenue !!!! 
	$success = false; 
	$message = "....."; // si tu retrouve à quoi ca correspond ;)
}

//...

// affichage du message, avec une couleur différente pour le fun :)
if($succes)
	echo "<font color="blue">$message</font>"; // Bravo
else
	echo "<font color="red">$message</font>"; // Boouuuhh !!

// ...
?>

Eléphant du PHP | 254 Messages

17 mars 2006, 16:55

tu es un chef Ryle !!!!! =D> un dieu du PHP ElePHPant
Merci merci merci mille fois, tu m'as sorti de mes erreurs, et en plus, je viens de comprendre tout !! :agenouille: :agenouille: :agenouille:
Merci de ta patience.
Je vais sortir m'aérer un peu là j'en ai besoin ça fume ! #-o
Merci et à bientôt pour d'autres aventures !
J'ai sous le coude mon formulaire de mot de passe oublié \:D/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mars 2006, 18:03

lol, arrête ou mes chevilles vont vraiment ressembler à celle de l'éléphant :) (en moins bleu peut être... ;))

Bon courage pour la suite :)

Eléphant du PHP | 254 Messages

17 mars 2006, 18:14

Merci ryle : hehe tu vas me recroiser, c'est certain. Mais regarde, je crois que j'ai pigé
bon, en fait
Je m'aperçois qu'une fois la fonction onSubmit Javascript enlevée, le formulaire part, malgré les vérifs d'erreurs.
Ca doit venir de mon init des variables ?
J'ai ça rajouté une quatrième condition
if (($nom=="")||($prenom=="")||($login=="")||($pass=="")||($pass2=="")||($email=="")||($tel==""))
		{
et ça a l'air de tourner ;-)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mars 2006, 20:39

Y a pas de soucis :) pis si tu as besoin d'aide, tu cri ;)

Pour l'envoi du formulaire, tu as deux solutions :
- tu peux utiliser un bouton (input) de type submit qui va envoyer immédiatement le formulaire. Si jamais tu as besoin de faire des contrôle javascript sur les champs ou tout autre action au moment de la soumission, il faut que tu ajoute l'attribut onSubmit="" dans la balise <form>
- l'autre solution consiste à utiliser un input de type button et définir l'attribut onclick="" de manière à ce qu'il fasse ton traitement puis soumette le formulaire en javascript (document.leFormulaire.submit()).

Personnellement j'ai opté pour cette seconde solution qui me permet de faire un contrôle javascript (avec un message d'alerte :p) avant d'envoyer le formulaire et éviter un appel au serveur alors qu'il y a des erreurs :) (ce qui ne m'empêche pas derriere de recontroler les valeurs en php ;))

Eléphant du PHP | 254 Messages

17 mars 2006, 23:26

hehe
Je n'ai pas terminé mon précédent post,
en fait, j'ai oté TOUT le javascript et le formulaire ne part pas tant que les champs obligatoires et/ou mal renseignés ne sont pas remplis.
et ce, grâce à :
//init des variables....
if ($ajoutMembre=="ok")
{
	//sélection de la base de données
	mysql_select_db($database, $connexion);
	//vérification si le mail existe déjà dans la base
	$query_Membre = "SELECT email FROM membres WHERE email = '$email' ";
	$Membre = mysql_query($query_Membre, $connexion) or die(mysql_error());
	$totalRows_Membre = mysql_num_rows($Membre);
	//si mots de passe identiques 
if ($pass==$pass2) 
{ 
	   if (($nom=="")||($prenom=="")||($login=="")||($pass=="")||($pass2=="")||($email=="")||($tel==""))
                   {
	    if ($totalRows_rsMembre==0)//si le mail n'existe pas encore alors : 
	        { //enregistrement dans la base du nouveau compte client
                         mysql_select_db($database //etc....

//suite du code
mail($adresse,$titre,$message,$headers); 
$success = true ;
$message = "Félicitations $prenom $nom, votre inscription a été prise en compte,<br/> vous allez recevoir un email reprenant vos mots de passe et login d'accès au site. Pour accéder à votre espace membre, veuillez vous identifier <a href='index.php'>ici</a>";
	     }else{
	     // si champs obligatoires non remplis
	     $success = false;
	     $message = "<-- Merci de remplir les champs obligatoires -->";
	     }
             }else{ 
              //si l'email existe déjà > message d'erreur 
              $success = false; 
              $message = "Cet email <b>$email</b> existe déjà dans notre base";
              } 
        }else{ // mots de passes différents 
        $success = false; 
        $message = "<- mot de passe différent,<br /> veuillez vérifier à nouveau votre saisie"; 
    } 
}else{  
    $success = false; 
    $message = ""; 
} 
?>
Et dans le formulaire :
 <?php if($success) 
    echo "<span class=Style13>$message</span>"; // Bravo 
else 
    echo "<span class=Style15>$message</span>"; // Boouuuhh !! 

// ... 
?> 
// ...formulaire : exemple
<td><div align="left">
      <input name="nom" type="text" class="form" id="nom" value="<?php echo $nom; ?>" /></div>
</td>
<td><div align="left"><? if (isset($_POST['nom']) && empty($_POST['nom'])) echo "<- Ce champ est obligatoire"; ?></div>
</td>
Pas mal non ? ;-) j'imagine que ce n'est pas propre du tout, mais on y arrivera !
allez....dodo :sleeping:
Heuuuu je viens de faire un test, si après le message d'erreur des mots de passe différents, je rentre un mail qui n'est pas dans la base, il m'affiche, ce mail existe déjà dans la base.
Hummmmmmmmmmm ](*,) ](*,) :tir2:
Je regarderais tout ça demain, mais si tu as une ID, ce serait merveilleux !!!
Bye A+

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2006, 01:07

42 ! (ben quoi ? c'est un id comme un autre nan ? ;))

Tout est bon, mais tu as inversé tes messages... si tu avais scrupuleusement indenté ton code (si, si, l'indentation c'est sacré :)), tu aurais tout de suite vu que tes if n'étaient pas alignés avec les bons else ;p
if (($nom=="")||($prenom=="")||($login=="")||($pass=="")||($pass2=="")||($email=="")||($tel=="")) { 
	if ($totalRows_rsMembre==0) { //si le mail n'existe pas encore alors : 
		//enregistrement dans la base du nouveau compte client 
		mysql_select_db($database //etc.... 

		//suite du code 
		mail($adresse,$titre,$message,$headers); 
		$success = true ; 
		$message = "Félicitations $prenom $nom, votre inscription a été prise en compte,<br/> vous allez recevoir un email reprenant vos mots de passe et login d'accès au site. Pour accéder à votre espace membre, veuillez vous identifier <a href='index.php'>ici</a>"; 
	}
	else{ 
		// si champs obligatoires non remplis 
		$success = false; 
		$message = "<-- Merci de remplir les champs obligatoires -->"; 
	} 
}
else{ 
	//si l'email existe déjà > message d'erreur 
	$success = false; 
	$message = "Cet email <b>$email</b> existe déjà dans notre base"; 
} 
Bon aller, on mettra ça sur le compte de l'heure tardive d'un vendredi soir de fête de Saint Patrick - hips! - ;)

Eléphant du PHP | 254 Messages

18 mars 2006, 12:43

hum, à la tienne :boire9: vue l'heure tardive à laquelle tu m'as répondu !!
J'y ai pensé hier soir tardivement aussi.
Que les messages ne devaient pas être dans le bon sens...
SI j'ai bien compris :
condition1
         condition2
                 condition3
 ../..
                 else3
         else2
else1
C'est ça ?
Et puis, dans mon test de champs vides, j'ai mis OR au lieu de ET, il serait préférable de tout passer à :
if (($nom=="")&&($prenom=="")&&($login=="")&&($pass=="")&&($pass2=="")&&($email=="")&&($tel=="")){
au lieu de :
if (($nom=="")||($prenom=="")||($login=="")||($pass=="")||($pass2=="")||($email=="")||($tel=="")){
Non ?
en fait, j'ai bouquiné entre hier et ce matin 8) ...mainan que j'ai pigé le truc, tout me semble plus clair ;-) D'ailleurs, dans mon cas, un switch ....case ne serait-il pas plus approprié ?

Eléphant du PHP | 254 Messages

18 mars 2006, 12:54

bloque au niveau des tests....:-(
EX. : je remplis TOUS les champs, je fais exprès de mettre un mot de passe1 != pass2, puis je rentre un email existant dans la base....
Retour erreurs :
1. mots de passe différents, veuillez.... (je corrige et je refais submit)
2. Merci de remplir les champs oblgatoires.. (ils sont tous remplis !)
Et là ça bloque....:-s
<?php require_once('includes/connexion.php'); ?>
<?php
//init des variables
$success = false;
$message = "";
if(!isset ($_POST['id'])) $id=""; else $id=htmlentities(addslashes($_POST['id']));
if(!isset ($_POST['nom'])) $nom=""; else $nom=htmlentities(addslashes($_POST['nom']));
if(!isset ($_POST['prenom'])) $prenom=""; else $prenom=htmlentities(addslashes($_POST['prenom']));
if(!isset ($_POST['login'])) $login=""; else $login=htmlentities(addslashes($_POST['login']));
if(!isset ($_POST['pass'])) $pass=""; else $pass=htmlentities($_POST['pass']);
if(!isset ($_POST['pass2'])) $pass2=""; else $pass2=htmlentities($_POST['pass2']);
if(!isset ($_POST['adresse'])) $adresse=""; else $adresse=htmlentities(addslashes($_POST['adresse']));
if(!isset ($_POST['code_postal'])) $code_postal=""; else $code_postal=htmlentities(addslashes($_POST['code_postal']));
if(!isset ($_POST['ville'])) $ville=""; else $ville=htmlentities(addslashes($_POST['ville']));
if(!isset ($_POST['email'])) $email=""; else $email=htmlentities(addslashes($_POST['email']));
if(!isset ($_POST['tel'])) $tel=""; else $tel=htmlentities(addslashes($_POST['tel']));
if(!isset ($_POST['naissance'])) $naissance=""; else $naissance=htmlentities(addslashes($_POST['naissance']));
if(!isset ($_POST['ajoutMembre'])) $ajoutMembre="non"; else $ajoutMembre=$_POST['ajoutMembre'];
if(!isset($erreur_Membre)) $erreur_Membre=0; 
if(!isset($_POST['ajoutMembre'])) $ajoutMembre=""; else $ajoutMembre=$_POST['ajoutMembre'];
if ($ajoutMembre=="ok")
{	//sélection de la base de données
	mysql_select_db($database, $connexion);
	//vérification si le mail existe déjà dans la base
	$query_Membre = "SELECT email FROM membres WHERE email = '$email' ";
	$Membre = mysql_query($query_Membre, $connexion) or die(mysql_error());
	$totalRows_Membre = mysql_num_rows($Membre);
	//si mots de passe identiques 
    if ($pass==$pass2){ 
	   if (($nom!="")&&($prenom!="")&&($login!="")&&($pass!="")&&($pass2!="")&&($email!="")&&($tel!="")){
			if ($totalRows_Membre==0){//si le mail n'existe pas encore alors : 
				//enregistrement dans la base du nouveau compte client
				mysql_select_db($database, $connexion);
				$insertMembre = "INSERT INTO membres (nom, prenom, login, pass, pass2, adresse, code_postal, ville, email, tel, naissance) 
				VALUES ('$nom', '$prenom', '$login', '$pass', '$pass2', '$adresse', '$code_postal', '$ville', '$email', '$tel', '$naissance')";
				mysql_query($insertMembre, $connexion) or die(mysql_error()); 
				$adresse = $email; 
				$titre = "Confirmation d'inscription"; 
				$headers="Ma pomme\n"; 
				$message = "Bienvenue sur notre site ! 
	
				Nous vous confirmons votre inscription sur le site : 
				Merci de bien conserver ce mail,\n 
				il contient vos identifiants et mot de passe pour accéder à votre espace personnel :\n
				
				Votre login est : ".$login." \n
				Votre pass est : ".$pass2." \n
				
				Pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant : 
				http://localhost......php"; 
				
				mail($adresse,$titre,$message,$headers); 
				$success = true ;
				$message = "Félicitations $prenom $nom, votre inscription a été prise en compte,<br/> 
				vous allez recevoir un email reprenant vos mots de passe et login d'accès au site.<br />
				Pour accéder à votre espace membre, veuillez vous identifier <a href='index.php'>ici</a>";
			}else{ 
			//si l'email existe déjà > message d'erreur 
			$success = false; 
			$message = "Cet email <b>$email</b> existe déjà dans notre base";
        	} 
		}else{
		// si champs obligatoires non remplis
		$success = false;
		$message = "<-- Merci de remplir les champs obligatoires -->";
		}
	}else{ // mots de passes différents 
	$success = false; 
	$message = "<- mot de passe différent,<br /> veuillez vérifier à nouveau votre saisie"; 
    } 
}else{  
$success = false; 
$message = ""; 
} 
?>
donc, l'ordre est important, ça je pige..mais lequel ?
1234 et 4321 ou bien
1234 et 1234 ?
Modifié en dernier par coxine le 18 mars 2006, 14:01, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2006, 13:24

Alors, pour essayer de répondre dans l'ordre...

Effectievment, les if/else s'imbriquent les uns dans les autres (chaque else correpondant au if qui le précede immédiatement (l'indentation te permettant donc de voir quel else correspond à quel if, puisqu'ils sont sur la même colonne :))
Tu as donc bien 1234 4321

Pour ta condition OU ou ET, tout dépend de ce que tu veux faire, mais je pense que dans tous les cas, le soucis est sur le "==". En effet, là tu rentre dans ton if si les champs sont vides, alors que dans ce cas, tu devrais aller dans le else :) Si tu les remplace par des "!=" (différent) alors tu ne rentreras dans le if que si tous les champs sont remplis.

Ensuite, pour le ET ou OU, ca dépend de ce que tu veux faire. Avec ET il faut que tous les champs soient remplis pour passer à la suite. Avec OU, il suffit qu'au moins un des champs soit rempli (mais ce n'est donc pas ce que tu recherches :))

Tu pourrais éventuellement l'utiliser si tu le souhaites, en inversant ta condition et tes signes. Tu testerais alors bien si au moins l'un des champs est égal à vide, alors erreur (dans le if), sinon succes (dans le else)
En effet, le contraire de la condition "a OU b" c'est "!a ET !b" ( ! signifiant le NON, soit ni a et ni b :))

Eléphant du PHP | 254 Messages

18 mars 2006, 13:37

oui je viens de rééditer ma page...
J'ai choisi que tous les champs soient remplis (car je n'exigeais pas cela avant, je m'étais trompée :oops:
d'où :
if (($nom!="")&&($prenom!="")&&($login!="")&&($pass!="")&&($pass2!="")&&($email!="")&&($tel!="")){
Donc la variable $success = true doit être à la fin, non ?
Puisque c'est ce que je cherche en premier par le :
donc je reprends :
1. si tu cliques sur ajouter
2. si le pass1 == pass2
3. si TOUS les champs obligatoires sont remplis
4. si le mail n'existe pas dans la base alors....

() enregistrement du nouveau membre
J'envoie le mail et ensuite
$success = true "Félicitations"

4. else $success = false "mail existe dans la base"
3. else $success = false "merci de remplir TOUS les champsobligatoires"
2. else $success = false "les mots de passe sont différents"
1. :-k c'est là que ça ne va pas ! Si je clique de suite sur ajouter...il faut que j'indique : "merci de remplir les champs" non ?
Le dernier else...que j'ai mis correspond à quoi ?

:?
}else{  
$success = false; 
$message = ""; 
} 
Pigé!!! : Edit 12:41
Le dernier else, c'est quand on arrive sur la page la première fois...donc je ne mets rien, ou un message explicatif :lol:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2006, 13:46

Le dernier else que tu as mis correspond donc à "si tu n'as pas cliqué sur ajouter. Cela revient donc à l'arrivée sur la page avant d'avoir rempli le formulaire :)
Tu peux donc te passer du else qui n'apporte rien de plus (où tu peux toujours l'utiliser en te disant que cela correspond au premier accès sur la page, là c'est toi qui voit :))

Sinon tous tes controles sont bons, mais effectivement leur ordre serait à revoir. Il faut essayer d'aller du plus grand au plus petit (ou au plus compliqué). Si tous les champs ne sont pas rempli, on va pas plus loin, inutile de comparer les mot de passe ou de chercher un mail en base. Si les mots de passe sont différents, inutile de se connecter à la base pour aller chercher le mail, etc. :)

Il te suffit donc d'intervertir le 2 et le 3 :

1. si tu cliques sur ajouter
2. si TOUS les champs obligatoires sont remplis
3. si le pass1 == pass2
4. si le mail n'existe pas dans la base alors....

() enregistrement du nouveau membre
J'envoie le mail et ensuite
$success = true "Félicitations"

4. else $success = false "mail existe dans la base"
3. else $success = false "les mots de passe sont différents"
2. else $success = false "merci de remplir TOUS les champsobligatoires"
1. pas de else, vu que pas de "sinon" à gérer :)

Eléphant du PHP | 254 Messages

18 mars 2006, 13:48

J'ai refléchis sur l'ordre des conditions
Il est plus logique de vérifier si le formulaire est vide d'entrée...
Alors :
conditions
1. Si tu cliques sur OK
2. si champs non vides
3. si pass==pass2
4. si mail inexistant dans la base
Alors......
Message de félicitations
Vérifications :
4. mail existe déjà
3. pass!=pass2
2. champs obligatoires non remplis
1. merci de remplir le formulaire
....
Je vais tester à fond et je te dirais quoi !
:)

Edit Par moi-même : 12:48ahah

trop fort, on poste quasi en meme temps