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 :

Enregistrer Utilisateur nouveau


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Debutant php
    Inscrit en
    Juin 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Debutant php

    Informations forums :
    Inscription : Juin 2018
    Messages : 20
    Par défaut Enregistrer Utilisateur nouveau
    Bonjour,

    Je rencontre un problème au niveau de la requête d'insertion.
    Merci.

    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
    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
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    <?php
    $nom = $_POST['nom'];
    $prenom = $_POST['prenom'];
    $dateNaissance = $_POST['dateNaissance'];
    $pays= $_POST['pays'];
    $NPA = $_POST['NPA'];
    $localite = $_POST['localite'];
    $rue = $_POST['rue'];
    $numero = $_POST['numero'];
    $telephone = $_POST['telephone'];
    $email = $_POST['email'];
    $mdp = $_POST['mdp'];
    $pass_confirm = $_POST['pass_confirm'];
     
     
    // on teste si le visiteur a soumis le formulaire
    if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
    	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
    	if ((isset($nom) && 
    	!empty($nom)) && 
    	(isset($prenom) && 
    	!empty($prenom)) && 
    	(isset($dateNaissance) && 
    	!empty($dateNaissance)) &&
    	(isset($pays) && 
    	!empty($pays)) && 
    	(isset($NPA) && 
    	!empty($NPA)) && 
    	(isset($localite) && 
    	!empty($localite)) && 
    	(isset($rue) && 
    	!empty($rue)) && 
    	(isset($numero) && 
    	!empty($numero)) && 
    	(isset($telephone) && 
    	!empty($telephone)) && 
    	(isset($email) && 
    	!empty($email)) && 
    	(isset($mdp) && 
    	!empty($mdp)) && 
    	(isset($pass_confirm) && 
    	!empty($pass_confirm))) 
     
    	{
     
    	// on teste les deux mots de passe
    	     if ($mdp != $pass_confirm) {
    		       $erreur = 'Les 2 mots de passe sont différents.';
    	         }
    	          else {
                    // Vérifie si la chaine ressemble à un email
                        if (!preg_match('#^[\w.-]+@[\w.-]+\.[a-z]{2,6}$#i', $email)) 
    	                     {
                           $erreur =   'Adresse mail incorrect!.';
                           }
                           else
                              {
                               if (!preg_match('  `^\d{1,2}/\d{1,2}/\d{4}$`    ', $dateNaissance))
                                  {
                                 $erreur = 'La date saisie est incorrecte.'; 
                                  }
                                  else
                                   {
                                  	try 
                                     { 
                                      $db = new PDO('mysql:host=localhost;dbname=CaveVin;charset=utf8', 'user', 'password'); 
                                      }
                                        catch (Exception $e) 
                                     { 
                                         die('Erreur : ' . $e->getMessage()); 
                                      }
     
     
    		// on recherche si ce login est déjà utilisé par un autre membre
    		$sql = $db ->prepare('SELECT 1 FROM Utilisateur WHERE email = :email ');
    	//	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    	$sql ->execute(['email'  =>  $email]);
    		if ($sql -> rowCount()) {
    		         $erreur = 'Un membre possède déjà ce mail.';
    	           	}
    		        	else
                 {
    	               $sqlreq = "INSERT INTO Utilisateur (nom, prenom, dateNaissance, pays, NPA, localite, rue, numero, telephone, email, mdp) VALUES ( :nom, :prenom,:dateNaissance, :pays, :NPA, :localite, :rue, :numero, :telephone, :email, :mdp";
    	               $res = $db->prepare($sqlreq);
    	               $exec = $res->execute(array("",":nom"=>$nom, ":prenom"=>$prenom, ":dateNaissance"=>date("Y-d-m",strtotime($dateNaissance)), ":pays"=>$pays, ":NPA"=>$NPA, ":localite"=>$localite, ":rue"=>$rue,":numero"=>$numero,  ":telephone"=>$telephone,":email"=>$email,":mdp"=>sha1(htmlspecialchars($mdp)))); 
     
    //vérifier si la requête d'insertion a réussi 
                       if($exec)
                          { 
                          echo 'Données insérées';
                          }
                         else
                            { 
                            echo "Échec de l'opération d'insertion"; 
                            }
     
    //	session_start();
    //	$_SESSION['email'] = $_POST['email'];
    //		header('Location: test1.php');
    //	exit();
     
    			        	}
    		      	}
         	}
    	  }
    	}
     
    	else {
    	$erreur = 'Tous les champs doivent être renseignés.' ;
    }
    }
    ?>
     
    <html>
     
    <link type="text/css" href="./jquery-ui/css/smoothness/jquery-ui-1.10.3.custom.css" rel="stylesheet" />  
    <script type="application/javascript" src="./jquery-ui/js/jquery-1.9.1.js"></script>  
    <script type="application/javascript" src="./jquery-ui/js/jquery-ui-1.10.3.custom.js"></script> 
    <script type="application/javascript" src="./jquery-ui/js/jquery.ui.datepicker-fr.js"></script>
     
    <head>
    <title>Inscription</title>
    </head>
     
    <body>
    Inscription Cave a Vin :<br /><br />
     
    Inscription<br /><br />
     
    Vos données<br /><br />
    <form action="test2.php" method="post">
    Nom : <input type="text" name="nom" value="<?php if (isset($nom)) echo htmlentities(trim($nom)); ?>"><br />
    Prenom : <input type="text" name="prenom" value="<?php if (isset($prenom)) echo htmlentities(trim($prenom)); ?>"><br />
    Date de naissance : <input type="text" id="dateNaissance" name="dateNaissance"  value="<?php if (isset($dateNaissance)) echo htmlentities(trim($dateNaissance)); ?>" ><br /><br />
     
    Contact<br /><br />
    Pays : <input type="text" name="pays" value="<?php if (isset($pays)) echo htmlentities(trim($pays)); ?>"><br />
    NPA : <input type="text" name="NPA" value="<?php if (isset($NPA)) echo htmlentities(trim($NPA)); ?>"><br />
    Localité : <input type="text" name="localite" value="<?php if (isset($localite)) echo htmlentities(trim($localite)); ?>"><br />
    Rue : <input type="text" name="rue" value="<?php if (isset($rue)) echo htmlentities(trim($rue)); ?>"><br />
    Numéro : <input type="text" name="numero" value="<?php if (isset($numero)) echo htmlentities(trim($numero)); ?>"><br />
    Téléphone : <input type="text" name="telephone" value="<?php if (isset($telephone)) echo htmlentities(trim($telephone)); ?>"><br /><br />
     
    Données de connexion<br /><br />
    Email : <input type="text" name="email" value="<?php if (isset($email)) echo htmlentities(trim($email)); ?>"><br />
    Mot de Passe : <input type="password" name="mdp" value="<?php if (isset($mdp)) echo htmlentities(trim($mdp)); ?>"><br />
    Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($pass_confirm)) echo htmlentities(trim($pass_confirm)); ?>"><br />
     
    <input type="submit" name="inscription" value="Inscription">
    </form>
    <?php
    if (isset($erreur)) echo '<br />',$erreur;
    ?>
     
    </body>
    </html>

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Tu ne dis pas quel est le problème, et tu ne présentes pas correctement ton script => Utilise la balise CODE (le # de l'éditeur)

  3. #3
    Membre averti
    Homme Profil pro
    Debutant php
    Inscrit en
    Juin 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Debutant php

    Informations forums :
    Inscription : Juin 2018
    Messages : 20
    Par défaut
    Comment mettre le code dans la balise #?

    Le problème c'est au niveau de la requête d'insertion mais je ne vois où.
    Dans le test de la requête ça part direct "Échec de l'opération d'inserton.
    Merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Le nombre de valeurs peut-être ne correspond pas au nombre de colonnes peut-être ?
    Est-ce normal d'avoir une chaîne vide au début, avant la valeur nom ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $exec = $res->execute(array("",":nom
    Je rajouterais ceci après avoir instancié PDO afin de faire ressortir les erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    Et pourquoi ne pas envelopper tout ça dans un block try/catch un peu comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
        $sqlreq = "INSERT INTO Utilisateur (nom, prenom, dateNaissance, pays, NPA, localite, rue, numero, telephone, email, mdp) VALUES ( :nom, :prenom,:dateNaissance, :pays, :NPA, :localite, :rue, :numero, :telephone, :email, :mdp";
        $res = $db->prepare($sqlreq);
        $exec = $res->execute(...
    } catch (PDOException $e) {
        echo ("PDOException: " . $e->getMessage());
        }
    }
    Le détail de l'exception est disponible, il faut juste le récupérer. Le message que vous affichez n'aide pas beaucoup. C'est normal de ne pas montrer les détails aux utilisateurs, mais si une exception se produit il serait une bonne pratique de logger tous les détails quelque part.

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 982
    Par défaut
    Manque une parenthèse en fin de requête et il faut enlever la chaîne vide en début de tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sqlreq = "INSERT INTO Utilisateur (nom, prenom, dateNaissance, pays, NPA, localite, rue, numero, telephone, email, mdp)
               VALUES ( :nom, :prenom,:dateNaissance, :pays, :NPA, :localite, :rue, :numero, :telephone, :email, :mdp)";
    $res = $db->prepare($sqlreq);
     
    $exec = $res->execute([
        ':nom' => $nom, ':prenom' => $prenom,
        ':dateNaissance' => date('Y-d-m', strtotime($dateNaissance)),
        ':pays' => $pays, ':NPA' => $NPA, ':localite' => $localite,
        ':rue' => $rue, ':numero' => $numero, ':telephone' => $telephone,
        ':email' => $email, ':mdp' => sha1(htmlspecialchars($mdp))
    ]);

  6. #6
    Membre averti
    Homme Profil pro
    Debutant php
    Inscrit en
    Juin 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Debutant php

    Informations forums :
    Inscription : Juin 2018
    Messages : 20
    Par défaut
    Ça fonctionne toujours pas!
    En tout cas merci pour l'instant

  7. #7
    Membre averti
    Homme Profil pro
    opérateur
    Inscrit en
    Avril 2023
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Avril 2023
    Messages : 30
    Par défaut . ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($erreur)) echo '<br />',$erreur;
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($erreur)) echo '<br />'.$erreur;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($sql -> rowCount()) {
    $erreur = 'Un membre possède déjà ce mail.';
    }
    manque une condition ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql ->execute(['email' => $email]);
    $sql -> rowCount());
     
    if $sql => 1

  8. #8
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 982
    Par défaut
    Citation Envoyé par PrincessLoiseau Voir le message
    [Remplacer]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($erreur)) echo '<br />',$erreur;
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($erreur)) echo '<br />'.$erreur;
    Quelle drôle d'idée!

    En utilisant le point tu vas forcer PHP à produire une nouvelle chaîne de caractères, en concaténant '<br />' avec le contenu de $erreur, pour ensuite l'afficher. Alors qu'avec la virgule, tu demandes simplement d'afficher '<br />' puis le contenu de $erreur. Donc moins de travail. L'instruction echo peut avoir autant d'arguments que l'on veut (enfin il doit tout de même y avoir une limite) séparés par des virgules.

    Pour la suite de ton message je n'ai pas compris, peut-être avec quelques mots par-ci par-là ce serait plus clair.

  9. #9
    Membre averti
    Homme Profil pro
    opérateur
    Inscrit en
    Avril 2023
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Avril 2023
    Messages : 30
    Par défaut
    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
    // -> Verification de l'existence de l'adresse email.
    $sqlVerif = $pdo->prepare("");
    $sqlVerif->execute();
    $sqlVerifFetch = $sqlVerif->fetch();
    $sqlVerifCount = $sqlVerif->rowCount();
    $sqlVerif->closeCursor();
    // <- Verification de l'existence de l'adresse email.
     
        if ($sqlVerifCount > 0) {
          // L'adresse email existe.
            echo "L'adresse email : " . $sqlVerifFetch["l"]. " existe déjà. <br>";
          } else { 
          // Enregistrement OK.
            echo "Nouvel enregistrement créer avec succès : ".$email ;
          }

Discussions similaires

  1. [XL-2003] Enregistrer un nouveau workbook à partir d'un autre workbook sur une clé USB
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/11/2009, 16h59
  2. Enregistrer un nouveau server sql
    Par GodGives dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 06/06/2008, 09h43
  3. Enregistrer le nouveau contenu du fichier texte
    Par labrute dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 29/05/2008, 16h09
  4. [SQL2K] Pb "Enregistrer un nouveau serveur SQL"
    Par Ludoblanc dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/02/2006, 09h31
  5. Enregistrer un nouveau serveur dans un groupe de serveur ?
    Par pop bob dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/07/2005, 16h18

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