IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Mise en place conditions de test


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 59
    Par défaut Mise en place conditions de test
    Bonjour tout le monde!

    J'ai un problème sur une page de mon site, elle gère les inscriptions sur le site en question... Jusque là, tout va bien, sauf que!
    J'ai mis des conditions (un peu partout je l'avoue) qui ne font pas leur travail... (du moins, celui espéré)

    Voici le code de la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php 
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=asbl;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch(Exception $e)
    {
    //En cas d'erreur, on affiche un message et on arrête tout
    	die('Erreur : '.$e->getMessage());
    }
     
    // Si la bd s'ouvre, on continue
    // Vérification de la validité des informations
    if(isset($_POST['nom']) AND isset($_POST['prenom']) AND isset($_POST['mail']) AND isset($_POST['pass']) AND isset($_POST['pass2']))
    {
    	$mail = htmlspecialchars($_POST['mail']);
    	$nom = htmlspecialchars($_POST['nom']);
    	$prenom = htmlspecialchars($_POST['prenom']);
    	$pass = htmlspecialchars($_POST['pass']);
    	$pass2 = htmlspecialchars($_POST['pass2']);
     
    	if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
        {
            $reponse = $bdd->prepare('SELECT email FROM membres WHERE email = :mail');
     
    		if(!$reponse->execute(array( 'mail' => $mail)))
    		{
    				//echo "L'adresse email saisie existe déjà";
    				header('Location: connexion.php?error=existEmail');
    		}
     
    		if($_POST['pass'] == $_POST['pass2'])
    		{
    			// Hachage du mot de passe
    			$pass_hache = sha1($_POST['pass']);
     
    			// Insertion
    			$req = $bdd->prepare('INSERT INTO membres(nom, prenom, email, pass, membreASBL) VALUES(:nom, :prenom, :mail, :pass, 0)');
    			$req->execute(array(
       				'nom' => $nom,
       				'prenom' => $prenom,
       				'mail' => $mail,
       				'pass' => $pass_hache));
    		}
    		else
    		{
    			//echo "Les mots de passe ne sont pas identiques";
    			header('Location: inscription.php?error=passwordMismatch');
    		}
       }
       else
       {
           //echo "L'adresse " . $_POST['mail'] . " n'est pas valide, recommencez !";
           header('Location: inscription.php?error=invalidEmail');
       }
     
    	//Inscription réussie
    	header('Location: accueil.php?error=InscripOK');
    }
    else // Il manque des paramètres, on avertit le visiteur
    {
    	//echo 'Veuillez remplir tous les champs du formulaire';
    	header('Location: inscription.php?error=emptyField');
    }
    J'ai des problèmes pour plusieurs choses comme le fait que si tous les champs ne sont pas remplis, je n'est pas de message d'erreur (ligne 15), la page continue de s'exécuter, si l'email existe déjà (ligne 27), je ne suis pas redirigé non plus, si les mots de passe ne coïncident pas (ligne 33)...
    Je ne sais pas si le problème vient du code en lui-même ou si ca vient de la base de données :/

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Déjà, n'utilise htmlspecialchars que quand tu affiches une données. Donc ici, tu peux tout retirer.

    Pour la ligne 15, isset() vérifie seulement que la variable n'est pas NULL. Utilise !empty pour vérifier son contenu (attention "0" est considéré comme "empty")

    Pour la ligne 33, execute est vrai tant que la requête est bonne, qu'il y ait des résultats ou non. Il faut regarder precisement le resultat.
    Également, header() n'arrête pas l'execution du script, place un exit()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $reponse = $bdd->prepare('SELECT COUNT(email) FROM membres WHERE email = :email');
    $sth = $reponse->execute(array( ':email' => $mail)))
    if ($sth->fetchColumn() !== 1) {
    	header('Location: connexion.php?error=existEmail');
            exit();
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club Avatar de HydreFunky
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2016
    Messages : 8
    Par défaut
    Moi perso pour la verification d'email je fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ($_POST['email'] == $mail)
    {
    header('Location: connexion.php?error=existEmail');
    exit();
    }

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Et $email c'est quoi ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club Avatar de HydreFunky
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2016
    Messages : 8
    Par défaut
    Effectivement ce n'est pas $email mais $mail, je reprend par rapport s'est variable de sont premier poste

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne vois pas trop ou tu veux en venir car $mail c'est $_POST['mail']
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/09/2011, 23h56
  2. [1.x] Mise en place de tests
    Par mach2Toulon dans le forum Symfony
    Réponses: 7
    Dernier message: 24/02/2010, 18h22
  3. Réponses: 1
    Dernier message: 17/01/2008, 00h05
  4. [Test][VS2005] Mise en place des tests unitaires
    Par Dadou74 dans le forum Test
    Réponses: 1
    Dernier message: 31/08/2006, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo