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 :

Insertion de données pour inscription avec INSERT INTO


Sujet :

PHP & Base de données

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 1
    Par défaut Insertion de données pour inscription avec INSERT INTO
    Bonjour à tous !

    Je suis étudiant de 1ère année en développement. Actuellement, j'implémente un formulaire d'inscription avec PDO en PHP. Mais je bloque. Après des recherches personnelles, je ne trouve pas la solution.

    Une aide serait un plus pour mon apprentissage et le bienvenue.

    Voici le code en PHP et HTML :

    PHP

    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
    <?php
        session_start();
        require_once "connexion_db.php"; 
     
        if(isset($_SESSION["id"])) {
            header('Location: index.php');
            exit;
        }
     
        if(!empty($_POST)) {
            $valid = true;
        // On se place sur le bon formulaire grâce au "name" de la balise "input"
            if(isset($_POST['inscription'])) {
                $nom* = htmlentities(trim($_POST['nom'])); // On récupère le nom
                $prenom = htmlentities(trim($_POST['prenom'])); // on récupère le prénom
                $mail = htmlentities(strtolower(trim($_POST['mail']))); // On récupère le mail
                $mdp = trim($_POST['mdp']); // On récupère le mot de passe*
                $confmdp = trim($_POST['confmdp']); //* On récupère la confirmation du mot de passe
     
                //* Vérification du nom
                if (empty($nom)) {
                    $valid = false;
                    $er_nom = "Le nom d' utilisateur ne peut pas être vide";
                }      
     
                //* Vérification du prénom
                if(empty($prenom)){
                    $valid = false;
                    $er_prenom = "Le prenom d' utilisateur ne peut pas être vide";
                }      
     
                // Vérification du mail
                if(empty($mail)) {
                    // On vérifit que le mail est dans le bon format
                    $valid = false;
                    $er_mail = "mail vide";
                } else if(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)) {
                    $valid = true;
                    $er_mail = "Le mail invalide";
                } 
     
                // Vérification du mot de passe
                if(empty($mdp)) {
                    $valid = false;
                    $er_mdp = "Le mot de passe ne peut pas être vide";
                } else if($mdp != $confmdp){
                    $valid = false;
                    $er_mdp = "La confirmation du mot de passe ne correspond pas";
                }
     
                // Si toutes les conditions sont remplies alors on fait le traitement
                if($valid) {
                    $mdp = crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$");
                    $date_creation = date('Y-m-d H:i:s');
     
                    // On insert nos données dans la table utilisateur
                    try {
                        $bdd->beginTranscation();
                        $bdd->insert("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES*($nom, $prenom, $mail, $mdp, $date_creation)");
                        //$req = "INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES*($nom, $prenom, $mail, $mdp, $date_creation)";
                        //$bdd->exec($req);
                        header('Location: index.php');
     
                        exit;
                    } catch (Exception $e) {
                        echo $e->getMessage();
                    }
                } 
            }
        } 
    ?>
    HTML

    Code html : 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
    <!DOCTYPE html>
    <html lang="fr">
        <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Inscription</title>
        </head>
        <body>    **
        <div>Inscription</div>
        <form method="post">
               <?php
                if (isset($er_nom)) {
                ?>
                   <div><?php $er_nom ?></div>
                <?php    
                }
                ?>
               <input type="text" placeholder="Votre nom" name="nom" value="<?php if(isset($nom)){ echo $nom; }?>" required>    
               <?php
                if (isset($er_prenom)){
                ?>
                   <div><?= $er_prenom ?></div>
                <?php    
                }
               ?>
               <input type="text" placeholder="Votre prénom" name="prenom" value="<?php if(isset($prenom)){ echo $prenom; }?>" required>    
               <?php
                if (isset($er_mail)){
                ?>
                   <div><?= $er_mail ?></div>
                <?php    
                }
               ?>
               <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>
               <?php
                if (isset($er_mdp)){
                ?>
                   <div><?= $er_mdp ?></div>
                <?php    
                }
               ?>
               <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>
               <input type="password" placeholder="Confirmer le mot de passe" name="confmdp" required>
               <button type="submit" name="inscription">Envoyer</button>
        </form>
        </body>
    </html>

    Je vous remercie.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Bonjour,

    il y'a un "*" de trop à la ligne 16 du code PHP $nom* =..., puis si tu utilises PDO, ajoutes l'option des erreurs/avertissements dans le constructeur du PDO pour avoir plus de détails sur l'erreur.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 985
    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 985
    Par défaut
    Savoir déboguer un script fait partie des savoir-faire indispensables que tu dois acquérir. Tu dois déjà être bien armé:
    • En activant l'affichage des erreurs PHP en plaçant en début de script:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      error_reporting(E_ALL); // voire E_ALL|E_STRICT
      ini_set('display_errors', true);
      NB: l'affichage des erreurs peut également être activée via php.ini.
      Une fois la phase de développement terminée, l'affichage des erreurs doit être désactivée pour des raisons de sécurité.
    • En activant l'affichage des erreurs PDO: pour ce faire dans ton fichier de connexion à la base ajoute la ligne: $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    • Lire les erreurs affichées et les comprendre: ça peut paraître évident, mais il y a des gens qui sont capables de perdre des heures (voire des jours) juste parce qu'ils baissent les bras à l'affichage de la moindre erreur.
    • Utiliser une IDE comme vscode qui entre autres choses propose la coloration syntaxique du code. Il existe aussi une armada d'extensions concernant PHP. Le tout est gratuit.
    • Utiliser MySQL Workbench (plutôt que phpmyadmin) pour ce qui est modélisation de la base de données et pour tester des requêtes avant de les insérer dans ton code.
    • Se référer systématiquement aux documentations officielles des divers langages et outils que tu dois manipuler (Manuel PHP (php.net), MySQL (mysql.com), Mozilla Development Network, Apache HTTP server (httpd.apache.org), ...) . Le but de la manœuvre est de se familiariser avec ces sites pour y trouver une information rapidement. C'est un pli à prendre, mais au final c'est payant et on gagne du temps par rapport à une recherche sauvage sur un moteur de recherche.
    • Pour la recherche d'erreurs elle-même dans un script (un script peut ne pas faire ce qui est attendu sans pour autant afficher la moindre erreur):
      • afficher le contenu des variables avec var_dump (ou var_export ou print_r) pour voir si elles contiennent bien ce qui est attendu.
      • commenter des parties du code pour les désactiver. Ça peut aider à localiser une erreur dans un script en en désactivant des parties.


    Sinon, vite fait, dans ton code j'ai repéré:
    • des caractères * qui traînent
    • une méthode insert qui me semble louche.
    • une méthode beginTranscation qui n'existe pas. (et pourquoi démarrer une transaction si c'est pour faire une seule requête?)
    • la fonction htmlentities bien mal employé: htmlentities et htmlspecialchars sont des fonctions destinées à l'affichage en html. C'est une erreur de les utiliser avant l'insertion en base de données. Ça ne procure aucune sécurité et en plus cela nuira lorsque que tu voudras interroger la base ou trier des résultats.
    • on ne place pas directement des données provenant de l'extérieur dans une requête SQL, on utilise une requête préparée!
    • Le fait que $_POST['inscription'] soit défini ne prouve en aucun cas que $_POST['nom'], $_POST['prenom'], $_POST['mail'], $_POST['mdp'] et $_POST['confmdp'] existent!

Discussions similaires

  1. [PowerShell] Problème d'export de donnée en csv avec la commande foreach
    Par Overwatch dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/06/2016, 10h27
  2. Problème de base de donnée pour mon projet JEE !
    Par LaChaineDuMétalleux dans le forum Débuter
    Réponses: 2
    Dernier message: 09/02/2016, 17h04
  3. Réponses: 2
    Dernier message: 25/05/2013, 09h09
  4. [Joomla!] Problème traduction formulaires et données Community Builder avec Joomfish
    Par filiplarlibe dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/03/2011, 15h15
  5. Problème d'insert into avec inner join
    Par guivrator dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/04/2009, 15h43

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