Condition If - Else

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Condition If - Else

par mere-teresa » 08 août 2007, 11:41

Pour tous les champs : y a-t-il des caractères malicieux pour le SQL ? (voir phpsecure.info pour comprendre l'injection SQL)

Et puis, le form est-il remple, c'est pour éviter de lancer les tests si la personne a cliqué sur envoyer sans rien remplir.

re

par Skafari » 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 !)

par mere-teresa » 07 août 2007, 09:27

Formulaire est-il soumis rempli ou est-il vide ?

re

par Skafari » 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 !

par Ryle » 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.

re

par Skafari » 06 août 2007, 14:30

:oops: Up :oops:

re

par Skafari » 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 !

par Ryle » 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())

re

par Skafari » 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 !

par Ryle » 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 :))

Re: re

par ouckileou » 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" :)

re

par Skafari » 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 !

par hakazizi » 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 :)

re

par Skafari » 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:

par Ryle » 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 :)