Condition If - Else

Skafari
Invité n'ayant pas de compte PHPfrance

04 août 2007, 17:38

Bonjour à tous,

J'ai créer un formulaire d'inscription et lorsque je souhaite vérifier les données de ce formulaire mes conditions ne fonctionnent pas. Par exemple, si j'oublie de taper un pseudo, et bien le site s'affiche sans le contenue souhaiter (Si je veux qu'il y est écrit "Vous avez oublié d'indiquer un pseudo", et bien ça ne l'écrit pas), pour toute les vérifications ç'est comme sa ! Sauf pour la comparaison de l'image ( à pars quand j'indiques rien, et pour la vérification du pseudo si il existe ou pas).

J'espère avoir été clair .

Voici le code:
<?php
														if(isset($_POST['pseudo']) AND isset($_POST['mot_de_passe']) AND isset($_POST['mot_de_passe_verification']) AND isset($_POST['code_verification']) AND isset($_POST['charte']) AND isset($_POST['mail']) OR die(mysql_error()))
													{
													///////////////////////////////////////// LES VARIABLES EXISTENT ELLES ?/////////////////////////////////////////////////////////
													
													
													
													
														if($_POST['pseudo'] != NULL AND $_POST['mot_de_passe'] != NULL AND $_POST['mot_de_passe_verification'] != NULL AND $_POST['mail'] != NULL)
													{
													////////////////////////////////////// LES VARIABLES SONT ELLES VIDES ?///////////////////////////////////////////////////////////
													
													
													
															if(strlen(trim($_POST['pseudo'])) >= 3)
														{
															if(strlen(trim($_POST['mot_de_passe'])) >= 5)
														{
														//////////////////////////////////// PSEUDO SUPERIEUR A 2 CAR ET MDP SUPERIEUR A 4 CHAR ?////////////////////////////////////////
														
														
														
																if($_POST['mot_de_passe'] == $_POST['mot_de_passe_verification'] OR die(mysql_error()))
															{
															/////////////////////////////////////DEUX MOT DE PASSE IDENTIQUE ?////////////////////////////////////////////////////
															
															unset($_POST['mot_de_passe_verification']); //Je supprimer cette variable, plus besoin !!!
															
															
															
															
																	if(preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])+_?@[[:alnum:]]([-.]?[[:alnum:]])+\.[a-z]{2,4}$`', $_POST['mail']) OR die(mysql_error()))
																{
																//////////////////////////////////MAIL VALIDE ?//////////////////////////////////////////////////////////////////////////
																
																
																
																		if($_POST['charte'] == 'on')
																	{
																	//////////////////////////////CHARTE SIGNER ?/////////////////////////////////////////////////////////////////////
																	
																	
																	
																			if($_POST['code_verification'] == $_SESSION['aleat_nbr'])
																		{
																				mysql_connect('localhost', 'root', '');
																				mysql_select_db('worp');
																				$sql = 'SELECT count(*) FROM membres WHERE pseudo="'.$_POST['pseudo'].'"'; 
																				$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
																				$data = mysql_fetch_array($req); 

																				if ($data[0] == 0)
																			{ 
																	
																	
																	
																				if (get_magic_quotes_gpc()) //Si les magic quotes sont activés
																			{
																					$_POST['mot_de_passe'] = stripslashes($_POST['mot_de_passe']);
																					$_POST['pseudo'] = stripslashes($_POST['pseudo']);
																		
																			}
																	
																				mysql_connect('localhost', 'root', '');
																				mysql_select_db('worp');
																		
																				$pseudo = htmlspecialchars($_POST['pseudo']);
																				$mot_de_passe = htmlspecialchars($_POST['mot_de_passe']);
																				$mail = htmlspecialchars($_POST['mail']);
																		
																				$pseudo = mysql_real_escape_string($pseudo);
																				$mot_de_passe = mysql_real_escape_string($mot_de_passe);
																				$mail = mysql_real_escape_string($mail);
																		
																				$mot_de_passe = md5(sha1($mot_de_passe));
															
																		
																				mysql_query("INSERT INTO membres VALUES('', '".$pseudo."', '".$mot_de_passe."', '".$mail."', '". time() ."')") or die(mysql_error());
																			
																			
																				$headers ='From: "Webmaster"<[email protected]>'."\n";
																				$headers .='Reply-To: [email protected]'."\n";
																				$headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
																				$headers .='Content-Transfer-Encoding: 8bit'; 
																			
																				$message_mail = "<center><img src=\"images/banniere_mail.gif\" /></center><br />Vous avez bien été inscrit au site World of RP.<br />Vos identifiants sont:<br /><br />- Pseudo: <b>$pseudo</b><br />- Mot de Passe: <b>$mot_de_passe</b>(<em>gardez ce mot de passe <u>crypter</u> vous utiliserez votre mot de passe non-crypter pour vous connecter<img src=\"http://www.siteduzero.com/Templates/images/smilies/smile.png\" /></em>)<br /><br /><br />Cordialement, l'équipe de WoRP !";
																				$message_mail = nl2br($message_mail);
																				mail($mail, "Confimation de votre inscription", $message_mail, $headers);
																			
																				echo "Votre inscription s'est bien déroulée ! Vous pouvez des à présent vous connectez sur le site et bénéficiez de toute les options de membre en allant dans le menu 'Privée'. Un mail a été envoyé à l'adresse e-mail fourni pour rappellez vos identifiants et nous assurez que s'est votre adresse que vous avez fournie.<br /><br /><br />
																				L'équipe vous souhaite d'agréable moment sur la communautée WoRP ! Pour tout problème, contactez-nous ;o).";
																		
																				mysql_close();
																			}
																				else 
																			{ 
																					echo 'Un membre du site posséde déja ce Pseudo, il faut choisir un autre Pseudo pour t\'inscire !<br /><br />
																					<a href="inscription.php" >Retour</a>.<br />';
																					mysql_close();
																			} 
																		}
																			else
																		{
																			echo 'Le code de vérification correspond pas à ce que tu a saisie ! Si vous êtes malvoyant ou vous n\'arrivez pas à lire le code tout simplement <a href="contact.php?choix=probleme".<br /><br />
																			<a href="inscription.php" >Retour</a>.<br />';
																		}
																		
																	}
																		else
																	{
																			echo 'Tu n\'as pas accepter la charte et cela est requie pour l\'inscription !.<br /><br />
																				<a href="inscription.php" >Retour</a>.<br />';
																	}
																}
																	else
																{
																	'L\'adresse E-mail que vous avez fournit n\'est pas valide. Veuillez la rectifier.<br /><br />
																<a href="inscription.php" >Retour</a>.<br />';
																}
															}
																else
															{
																echo 'Les deux mot de passe fournie ne sont pas identique comme il devrait l\'air. Veuillez corriger votre erreur et re-essayer de vous inscrire.<br /><br />
																<a href="inscription.php" >Retour</a>.<br />';
															}
														}
														else
														{
															echo 'Votre mot de passe doit faire plus quatre caractères pour une question de sécurité.<br /><br />
															<a href="inscription.php" >Retour</a>.<br />';
														}
														}
															else
														{
															echo 'Votre pseudo doit faire plus deux caractères pour une question de sécurité.<br /><br />
															<a href="inscription.php" >Retour</a>.<br />';
														}
													}
														else
													{
													echo 'Vous n\'avez pas remplie tout les champs. 
													Et tout les champs sont néccessaire pour l\'inscription à WoRP.<br /><br />
													<a href="inscription.php" >Retour</a>.<br />';
													}
													}
														else
													{
													echo 'Une erreur est survenue. Re-essaye de t\'inscrire dans quelques instants, merci de votre compréhension.
													<br /><br />
													<a href="inscription.php" >Retour</a>.<br />';
													}
													?>
Je vous remercie d'avance !

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

04 août 2007, 17:50

Très curieuse façon d'indenter le code... Curieux aussi si une des variable n'a pas été envoyée par le navigateur de demander d'afficher la dernière erreur sql ?!
  if(isset($_POST['pseudo']) AND .... AND isset($_POST['mail']) OR die(mysql_error())) 

Le plus simple, c'est d'afficher tes valeurs, voire carrément les tests pour voir lesquels sont vrais, lesquels sont faux.
echo 'Pseudo défini : ' . (isset($_POST['pseudo'])) . '<br>';
echo 'Mot de passe défini : ' . (isset($_POST['mot_de_passe'])) . '<br>';

echo 'Pseudo non null : ' . ($_POST['pseudo'] != NULL) . '<br>';
Tu peux aussi afficher un simple message pour voir dans quels if() il rentre ou pas :
if (....) {
  echo 1;
  if (....) {
    echo 2;
  }
}
Par ailleurs, lorsque tu es en php préfère le "&&" au "AND" ... si le test logique est identique, la priorité n'est pas la même et cela t'évitera des erreurs par la suite :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Skafari
Invité n'ayant pas de compte PHPfrance

04 août 2007, 19:37

Merci pour ta réponse !
S'est vraie que ma façon d'indenter est pas trés fréquente mais moi je me comprend tout à fait !
Sinon j'ai retirer mes 'mysql_error()'

Et aussi pour faire cette methode tels que tu me l'as consseiller:
echo 'Pseudo défini : ' . (isset($_POST['pseudo'])) . '<br>';
echo 'Mot de passe défini : ' . (isset($_POST['mot_de_passe'])) . '<br>';

echo 'Pseudo non null : ' . ($_POST['pseudo'] != NULL) . '<br>';
Je retires complêtment tout mes 'If{ ... } Else { ... }' et le remplace par le code ci-dessus et en changeant les variables à chaque fois ? :idea:

Mammouth du PHP | 558 Messages

04 août 2007, 20:26

desolé d'intervenir mais je n'ai pas très bien bien compris les priorité a quoi servent-elle si toute les condition ne son pas remplie on accede pas de toute facon non?
Par ailleurs, lorsque tu es en php préfère le "&&" au "AND" ... si le test logique est identique, la priorité n'est pas la même et cela t'évitera des erreurs par la suite :)

Skafari
Invité n'ayant pas de compte PHPfrance

05 août 2007, 00:17

J'ai comencé a re-editer mon code:
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('worp');

	if(!isset($_POST['pseudo']) &&  empty($_POST['pseudo'])
	{
		echo 'Tu n\'as pas saisie de Pseudo ! Le Pseudo est le nom sous lequel tu apparaîtras lors de tes posts (News, commentaires, forums, etc...)<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
	elseif(strlen(trim($_POST['pseudo'])) <= 2)
	{
		echo 'Ton Pseudo doit faire 3 caractéres minimum ou plus pour une question de lisibiltée et de respect. Merci de votre compréhension.<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
		$sql = 'SELECT count(*) FROM membres WHERE pseudo="'.$_POST['pseudo'].'"'; 
		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
		$pseudo = mysql_fetch_array($req); 
	elseif($pseudo[0] == 0)
	{
		echo 'Un membre du site posséde déjas ce Pseudo, désolée du désagrément ! Choisis-en un autre.<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
	//////////////////FINIS POUR LE PSEUDO//////////////////////////////////////////////////////////////////////////////////////////////-------->
	
	elseif(!isset($_POST['mot_de_passe']) && empty($_POST['mot_de_passse']) && !isset($_POST['mot_de_passe_verification']) empty($_POST['mot_de_passe_verification']))
	{
		echo 'Tu n\'as pas remplie le champ Mot de passe (ou vérification du Mot de passe). Ceci est requie pour l\'inscription, il serat confidentiel et il permettra de te connecter à ton compte pour accéder aux différents services tels que le forums.<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
	elseif(strlen(trim($_POST['mot_de_passe')) < 4)
	{
		echo 'Ton mot de passedoit être supérieur ou égal à quatre caractéres (espace non-compris) pour ta sécurité !<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
	elseif($_POST['mot_de_passe'] == $_POST['mot_de_passe_verification'])
	{
		echo 'Il faut que ton mot de passe corresponde à la deuxième saisie de mot de passe pour savoir si tu t\'st tromper ou pas. Et là s\'est le cas, rectifie et re-inscrit toi !<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
		$mot_de_passe_hashe = md5(sha1($_POST['mot_de_passe']));
	//////////////////FINIS POUR LE MDP ET VERIF MDP//////////////////////////////////////////////////////////////////////////////////////////////-------->
	
	elseif(!isset($_POST['mail']) && empty($_POST['mail'])
	{
		echo 'Tu n\'as pas donnée les informations sur ton e-mail (boite de messagerie virtuelle), si un problème vient à se rencontre ou tu veut t\inscrire à la newsletter ou autres... Nous serons confrontez à savoir ton e-mail, ton e-mail pourrat rester privée !<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
	elseif(!preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])+_?@[[:alnum:]]([-.]?[[:alnum:]])+\.[a-z]{2,4}$`', $_POST['mail']))
	{
		echo 'Tu doit rentrer un e-mail (boite de messagerie virtuelle) valide. Si s\'est un e-mail valide et le problème persiste, <a href="contact" >contactez</a> le webmaster<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
	//////////////////FINIS POUR LE MAIL//////////////////////////////////////////////////////////////////////////////////////////////-------->
	
	elseif(!isset($_POST['charte']) && $_POST['charte'] == 'off')
	{
		echo 'Il faut accpetez la charte pour continuer et avoir une bonne ambiance sur le site ainsi que du forum. Pour plus d\'informations, lis quelques posts du forum.<br /><br />
		<a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />';
	}
	//////////////////FINIS POUR LE MAIL//////////////////////////////////////////////////////////////////////////////////////////////-------->
Dits moi ce que vous en pensez j'ai pas terminer mais sa va ête tout le temp comme ça et toute à la fin il y aura le 'else { Ajout du membre }'.

S'est sa que tu m'avais conseiller de faire non ?

Merci d'avance !

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2007, 03:34

S'est vraie que ma façon d'indenter est pas trés fréquente mais moi je me comprend tout à fait !
Et c'est toujours agréable de récupérer le code de quelqu'un qui avait des conventions un peu tordues mais que lui "comprenait tout à fait" :)

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

05 août 2007, 11:53

@Skafari : ah ben c'est déjà beaucoup plus lisible en tout cas :)
Sur le principe ca devrait être bon, par contre tu vas avoir un soucis ici :
    $sql = 'SELECT count(*) FROM membres WHERE pseudo="'.$_POST['pseudo'].'"';  
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
        $pseudo = mysql_fetch_array($req);  
    elseif($pseudo[0] == 0) 
    { 
        echo 'Un membre du site posséde déjas ce Pseudo, désolée du désagrément ! Choisis-en un autre.<br /><br /> 
        <a href="" onClick="javascript:window.history.go(-1)">Retour</a>.<br />'; 
    } 
Tu ne peux pas avoir un elseif placé ici, un if() tout au plus. Le elseif() doit nécessairement être la suite d'une instruction if() (ou d'un autre elseif()) :)

@hakazizi : Au final oui, mais les conditions que tu testes ne seront pas interprétées de la même manière et ne retourneront pas toujours les résultats attendus :
<?php 
if ( $a && $b || $c ) // ce test équivaut à " (a et b) ou c "

if ( $a AND $b || $c ) // ce test équivaut à " a et (b ou c) "
?>
On peu effectivement éviter cela en ne mélangeant pas les AND/OR ou des &&/||, mais l'autre différence entre les deux opérateurs vient surtout de la priorité de l'opérateur d'affectation "=". Il est prioritaire sur AND et OR, mais passe après && et || :
<?php 
if ( $a = $b && $c ) // Le résultat du test entre $b et $c est stocké dans $a

if ( $a = $b AND $c ) // $b est stocké dans $a avant d'être testé avec $c
?>
On peut aussi rajouter une foultitude de parenthèses pour rétablir l'ordre que l'on veut et obtenir le résultat souhaité, mais disons que préférer && et || évitera de perdre de nombreuses heures à s'arracher les cheveux ;) (et puis c'est la syntaxe utilisée dans quasiment tous les autres langages de dev, donc autant s'y habituer et garder les AND / OR pour du SQL :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Skafari
Invité n'ayant pas de compte PHPfrance

05 août 2007, 17:06

Merci de ta réponse ! :D

En effet j'ai eu un problème à ce niveau, mais je l'ai corriger :wink: . Et s'est vraie que le code est plus lisible, même pour moi :lol: .

Sinon comment faire pour que
!isset($_POST['pseudo']) &&  empty($_POST['pseudo']
Me dise pas

Code : Tout sélectionner

Notice: Undefined index: pseudo in c:\documents and settings\johnny charcosset\mes documents\mes sites et pages webs\play\v2\validation_inscription.php on line 45 Tu n'as pas saisie de Pseudo ! Le Pseudo est le nom sous lequel tu apparaîtras lors de tes posts (News, commentaires, forums, etc...)
Si la variable n'existe pas ? Je pensais mettre un 'OR' mais je suis pas sûr j'attends vos réponse :wink: . A moin que le message d'erreur ne vient pas de là :idea: :?: Mais je pense que si !

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

05 août 2007, 18:06

Bah pour savoir ce qui pose problème, php te donne la ligne de l'erreur, donc ca ne devrait pas être trop dur à retrouver (même si parfois elle est une ou deux lignes avant pour une parse error :))

Pour le coup du OR (|| en l'occurence :)), le plus simple c'est d'essayer et de voir si le résultat te convient :) Mais effectivement, la logique serait de tester soit que la variable n'existe pas (avec isSet()) ou bien qu'elle soit vide (avec empty())
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Skafari
Invité n'ayant pas de compte PHPfrance

05 août 2007, 19:05

Merci de ta réponse !

J'ai réussi a corriger le problème tout seul et tout les autres trucs... Merci pour votre aide si précieuse maintenant tout fonctionne !

Mais je voudrais savoir si j'ai fait assez de vérification et assez de sécurisation (Sa existe comme mot ? :oops: ) pour une zone membre ?

Voici toutes les vérifiaction/ sécurisation :
  • - Le champ pseudo existe ? Est-ce qu'il est pas vide ?
    - Le pseudo >= 3 caractères ?
    - Le pseudo comporte aucun epslace ? Si oui les supprimer
    - Le champ e-mail existe ? Remplie ?
    - Adresse e-mail valide ?
    - Les champs mot de passe (MD et MDP vérification existe t-il ? Est-il vide ?
    - Le MDP >= 4 caractères ?
    - Le MDP = MDP vérification ?
    - Chartes accpetée ?
    - Code anti-bot existe t-il ? Est-il vide ?
    - Code anti-bot est-il bien saisie ?
    - Le pseudo existe t-il ?
    - Le mot de passe est 'hasher' (md5 + sha1
    - Un mail est envoyer (mais il n'y a pas de validation)

    Merci d'avance !

Skafari
Invité n'ayant pas de compte PHPfrance

06 août 2007, 14:30

:oops: Up :oops:

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

06 août 2007, 14:33

Modération :
Skafari, les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Skafari
Invité n'ayant pas de compte PHPfrance

06 août 2007, 16:23

Je suis terriblement désolée, en plus étant que je suis un "Invité"... :?

Je reformule ma quesion alors:

Est-ce qu'il y as assez de vérification et de sécurité aprés avoir valider un formulaire d'inscription pour s'inscrire à une zone membre ?
  • Voici toutes les vérifiaction/ sécurisation :

    - Le champ pseudo existe ? Est-ce qu'il est pas vide ?
    - Le pseudo >= 3 caractères ?
    - Le pseudo comporte aucun epslace ? Si oui les supprimer
    - Le champ e-mail existe ? Remplie ?
    - Adresse e-mail valide ?
    - Les champs mot de passe (MD et MDP vérification existe t-il ? Est-il vide ?
    - Le MDP >= 4 caractères ?
    - Le MDP = MDP vérification ?
    - Chartes accpetée ?
    - Code anti-bot existe t-il ? Est-il vide ?
    - Code anti-bot est-il bien saisie ?
    - Le pseudo existe t-il ?
    - Le mot de passe est 'hasher' (md5 + sha1
    - Un mail est envoyer (mais il n'y a pas de validation)
Merci d'avance !

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

07 août 2007, 09:27

Formulaire est-il soumis rempli ou est-il vide ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Skafari
Invité n'ayant pas de compte PHPfrance

07 août 2007, 22:19

Oui je fait cette vérification car je test tout les champs pour voir si ils osntvide ou remplie :) . D'autre remarque ? (D'ailleur demain je vais m'inscrire à la communautée vu qu'elle est agréable et nous réponde bien !)