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

PHP & Base de données Discussion :

Variable doublon PHP


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    technicien applicatif
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : technicien applicatif

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut Variable doublon PHP
    Bonjour,

    n'étant pas un expert concernant le langage php, je sollicite votre aide. Dans mon cas, je souhaite faire le lien entre le mail saisi de l'utilisateur avec ma base de donnée afin de savoir si il n'existe pas de doublon. Sauf que mon echo ne s'affiche pas, je vois l'erreur via PDO m'indiquant un doublon en BDD.

    Voir la variable $reqmail pour les doublons, pouvez-vous m'expliquer ce qu'il ne va pas ?

    Code php : 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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    <?php
     
    try{
    $bdd =new PDO('mysql:host=localhost;
     dbname=knowthing; charset=utf8', 'root', '');
    // Activation des erreurs PDO
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
     $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) 
    {
        die('Erreur : ' . $e->getMessage());
    }
     
    if(isset($_POST['validation']))
    { 
      $pseudo = htmlspecialchars($_POST['pseudo']);
      $Mail = htmlspecialchars($_POST['Mail']);
      $password = sha1($_POST['password']);
      $password2 = sha1($_POST['password2']);
     
    if (!empty($_POST['pseudo']) AND !empty ($_POST['Mail']) and !empty($_POST['password']) and !empty ($_POST['password2']))
    {
      $pseudolenght =strlen($pseudo);  
       if  ($pseudolenght <= 50)
       {
        if (!empty($POST['Mail']))
    					{
    					$reqmail = $bdd->prepare("select * from membres where mail = ? ");
    					$reqmail->execute(array($Mail));
    					$mailexist = $reqmail->rowcount();
    					}
    					if ($mailexist ==0)
    						{	
    						if($password == $password2)
       						{
            				try
            				{
    				        $sql = "INSERT INTO membres(membre_pseudo,membre_mail,membre_mdp) VALUES(?, ?, ?)";
    				        $params = array($pseudo, $Mail, $password);
    				        $insertmbr = $bdd->prepare($sql);
    				        $insertmbr->execute($params); 
            				}catch(Exception $e) 
           				    {
    				        echo "<br>ERREUR ! ".$e->getMessage()."<br>";
    				        echo "<br>params : <br>";
    				        print_r($params);
    						}
    						}
    	else
    	{
           	$erreur = "Les mots de passe sont différents !";
      	}
      }
     
    					else
    					{
    					$erreur = "Adresse mail déjà connu";
    					}
    					} 			
    	else 
    	{
      	$erreur = " Votre pseudo ne doit pas dépasser 50 caractères";
    	}
    	}
     
    else
     
        {
        $erreur = "Merci de remplir tous les champs !";
        }
    }
    ?>
     
    <html>
    <head>
      <title>TUTO PHP </title>
    <meta charset="utf-8">
    </head>
    <body>
      <div align="center">
        <h2> Inscription </h2>
        <br /> <br /> 
        <form method="POST" action="">
          <table align="center">
            <tr>
              <td align="right">
                <label for= "pseudo"> Pseudo : </label>
              </td>
              <td>
                <input type="text" name="pseudo"  placeholder="Votre pseudo" id="pseudo" value= "<?php if(isset($pseudo)) { echo $pseudo; } ?>" />  
              </td>
            </tr>
            <tr>
              <td align="right">
                <label for= "Mail"> Mail : </label>
              </td>
              <td>
                <input type="email" name="Mail"  placeholder="Votre mail" id="Mail" value= "<?php if(isset($Mail)) { echo $Mail; } ?>" /> 
              </td>
            </tr>
            <tr>
              <td align="right">
                <label for= "password"> Mot de passe : </label>
              </td>
              <td>
                <input type="password" name="password"  placeholder="Saisir mot de passe" id="password" />  
              </td>
            </tr>
            <tr>
              <td align="right">
                <label for= "password2"> Confirmation mot de passe : </label>
              </td>
              <td>
                <input type="password" name="password2"  placeholder="Confirmation du mot de passe" id="password2" /> 
              </td>
            </tr>
            <tr>
              <td> </td>
              <td align="center">
              <br /> 
                <input type="submit" name="validation" value="je m'inscris">
              </td>
            </tr>
          </table>
        </form>
      <?php 
      if (isset($erreur))
        {
          echo '<font color="red">' .$erreur. "</font>";
        }
      ?>
    </div>
    </body>
    </html>

    Cordialement,

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    A première vue, ton code a l'air ok. Cela dit, tu as beaucoup de conditions imbriquées, du coup il est possible qu'une condition ne soit pas exécutée à l'endroit que tu penses.

    Trois remarques :

    1) Imbriquer des if dans des ifs dans des ifs, ça fait ressembler ton code à une poupée russe. Je te conseille d'inverser tes conditions et de tester d'abord les cas d'erreurs.
    Exemple au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (!empty($_POST['pseudo']) AND !empty($_POST['Mail']) and !empty($_POST['password']) and !empty($_POST['password2'])) {
        $pseudolenght = strlen($pseudo);
        if ($pseudolenght <= 50) { 
            // ... pseudo ok, on continue
        }
        else {
            $erreur = " Votre pseudo ne doit pas dépasser 50 caractères";
        }
    }
    else {
        $erreur = "Merci de remplir tous les champs !";
    }
    Tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $erreur = '';
    if (empty($_POST['pseudo']) || empty($_POST['Mail']) || empty($_POST['password']) || empty($_POST['password2'])) {
        $erreur = "Merci de remplir tous les champs !";
    }
    if (!$erreur) {
        $pseudolenght = strlen($pseudo);
        if ($pseudolenght > 50) {
            $erreur = " Votre pseudo ne doit pas dépasser 50 caractères";
        }
    }
    if (!$erreur) {
        // ... pseudo ok, on continue
    }

    2) Personnellement, j'évite d'utiliser rowCount à cause de cette mention dans la doc :
    Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête. Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données et ne devrait pas être exécuté pour des applications portables.
    En pratique, le plus souvent ça fonctionne très bien (notamment sur MySQL), mais quand même... A la place, j'utilise une requête SELECT COUNT(*) et une récupération par fetchColumn :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $reqmail = $bdd->prepare("select count(*) from membres where mail = ? ");
    $reqmail->execute(array($Mail));
    $mailexist = $reqmail->fetchColumn();
    Le résultat est normalement le même.

    3) Tu utilises htmlspecialchar avant de mettre en base : ce n'est pas utile/nécessaire. C'est une fonction à appliquer à l'affichage et non à l'enregistrement en base.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Homme Profil pro
    technicien applicatif
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : technicien applicatif

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Merci beaucoup d'avoir pris le temps de me répondre, tes explications sont en effets très claires et cela va me permettre de corriger surement tous mes problèmes sur mon script

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec la PORTE DE VIE D'UNE VARIABLE EN PHP
    Par stomerfull dans le forum Langage
    Réponses: 1
    Dernier message: 09/12/2005, 14h19
  2. probleme avec la PORTE DE VIE D'UNE VARIABLE EN PHP
    Par stomerfull dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 14h17
  3. Réponses: 1
    Dernier message: 21/11/2005, 12h07
  4. [Cookies] passage de variable vbs à php
    Par Sheraf dans le forum Langage
    Réponses: 4
    Dernier message: 25/10/2005, 23h11
  5. [FLASH MX2004] Recuperation variable de PHP
    Par gchanteux dans le forum Flash
    Réponses: 11
    Dernier message: 10/05/2005, 19h16

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