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 :

Formulaire d'inscription [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut Formulaire d'inscription
    Bonjour, j'ai un petit soucis concernant mon formulaire d'inscription !

    A chaque fois que je le test en rentrant des valeurs, ça m'affiche ça:

    Merci, j'avais déjà essayé et ça me fait toujours ça...


    Erreur SQL !INSERT INTO membres(`pseudo`,`mot_de_passe`,`email`,`nom_perso`,`classe`,`type`,`réponse_secrète`) VALUES ("" ,"René", "d95679752134a2d9eb61dbd7b91c4bcc\", \"ooo@hotmail.fr\", \"lalalalala\", \"zombie\", \"mâle\", \"llallaa")
    Column count doesn't match value count at row 1
    Je pense que je dois mal gérer l'id dans l'insertion...Que faire, svp ? ^^

    Voici mon codage: http://pastebin.com/RuJAeNkB


    (Edit: ce n'est pas un problème d'orthographe, chaque colonne dans la BDD s'appelle pareil que ce dans quoi je veux insérer.)


    Merci.

  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
    Merci, j'avais déjà essayé et ça me fait toujours ça...
    tu te réponds à toi même ?

    tu as une valeur en trop : la premiere.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Salut, merci pour ton message^^.

    J'ai réessayer en enlevant 'id' pour avoir 7 valeurs d'un côté et 7 valeurs de l'autre mais ça me fait toujours pareil...!

    Erreur SQL !INSERT INTO membres (`pseudo`,`mot_de_passe`,`email`,`nom_perso`,`classe`,`type`,`réponse_secrète`) VALUES ("rttgg", "83878c91171338902e0fe0fb97a8c47a\", \"eldel@hotmail.fr\", \"efzfff\", \"blabla\", \"mâle\", \"gghhjj")
    Column count doesn't match value count at row 1


    Ca ne viendrait pas du count(*) par hasard ? ou alors ça vient de l'id et il faut mettre quelque chose de particulier et ne pas rien mettre...Ou alors ça peut venir des types que j'ai mis pour les champs.

    Champs/types dans ma BDD:

    id/int11 ==>auto_increment
    pseudo/varchar 20
    mot_de_passe/varchar32
    email/varchar45
    nom_perso/varchar25
    classe/varchar20
    type/varchar20
    réponse_secrète/varchar20


    Les valeurs à insérer dans la base ne dépasse pourtant pas les valeurs limites...Je ne comprends pas d'où vient l'erreur...

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    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 319
    Billets dans le blog
    17
    Par défaut
    Code sql : 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
    INSERT INTO membres (
        `pseudo`,
        `mot_de_passe`,
        `email`,
        `nom_perso`,
        `classe`,
        `type`,
        `réponse_secrète`
    ) VALUES (
        "rttgg",
        "83878c91171338902e0fe0fb97a8c47a\",
        \"eldel@hotmail.fr\",
        \"efzfff\",
        \"blabla\",
        \"mâle\",
        \"gghhjj"
    )

    Le \" fait que le " n'est pas interprété en tant que terminateur de chaîne. Ton VALUES ne contient donc que 2 arguments : "rttgg" et "83878c91171338902e0fe0fb97a8c47a\", \"eldel@hotmail.fr\", \"efzfff\", \"blabla\", \"mâle\", \"gghhjj".

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Bonsoir, merci à vous mais j'ai finalement décidé de changer de structure^^.

    Il y a une page:
    login.php pour taper les données(pseudo, mdp...)==>une page loginok.php pour les vérifier
    inscription.php pour taper les données(pseudo, mdp...)==>une page inscriptionok.php pour les vérifier
    Et lorsque le membre sera connecté il sera basculé vers index.php.
    Une page déconnexion.php à placer en haut de chaque page des membres connectés.


    Pour la vérification des données liées à l'inscription: inscriptionok.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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
      <?php
    /* si le membre est connecte*/
    if(isset ($_SESSION['id']))
    {
    if( $_SESSION['id']!="" || $_SESSION['pseudo']!="")
    {
    ?>
    <a href="loginout.php">Deconnexion</a><br />
    <?php
    }
    }
    else
    {
    ?>
    <a href="login.php">Connexion</a><br />
    <a href="inscription.php">Inscription</a><br />
    <?php
    }
    ?>
     
     
    	<?php
        /* il faut demarrer la session*/
        session_start();
     
        if (empty($_SESSION['id'])) //les membres connecte ne peuvent pas s'inscrire
        {
        /* il faut que toutes les variables du formulaires existent*/
        if(isset($_POST['pseudo']) && isset($_POST['mot_de_passe']) && isset($_POST['email']) && isset($_POST['nom_perso']) && isset($_POST['classe']) && isset($_POST['type']) && isset($_POST['reponse_secrete']))
        {
        /*il faut que tous les champs soient renseignes*/
        if($_POST['pseudo']!="" && $_POST['mot_de_passe']!="" && $_POST['email']!="" && $_POST['nom_perso']!="" && $_POST['classe']!="" && $_POST['type']!="" && $_POST['reponse_secrete']!="")
        {
        /*connexion a la BDD*/
        try
        {
        $bdd = new PDO('mysql:host=localhost;dbname=nom_base', 'login', 'mdp');
        }
        catch (Exception $e)
        {
        die('Erreur : ' . $e->getMessage());
        }
     
        /* on teste l'adresse email, si c'est bon, on continue, sinon, on affiche un message d'erreur*/
        if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}.[a-z]{2,4}$#", $_POST['email']))
        {
        /*on verifie si un membre ne possede pas deja le meme pseudo*/
        $req = $bdd->prepare('SELECT id FROM membres WHERE pseudo = :pseudo');
        $req->execute(array('pseudo'=> $_POST['pseudo']));
        $nb_resultats_recherche_membre=$req->fetch();
     
        if(!$nb_resultats_recherche_membre) /*si il n'y a pas de resultat*/
        {
        /*on crypte le mot de passe*/
    	$mot_de_passe = $_POST['mot_de_passe'];
    	$mot_de_passe = sha1($mot_de_passe);
     
        /*Si le pseudo est libre et l'email valide, alors on enregistre le nouveau membre*/
        $req=$bdd->prepare('INSERT INTO membres(pseudo, mot_de_passe, email, nom_perso, classe, type, reponse_secrete, date_inscription) VALUES (:pseudo, :mot_de_passe, :email, :nom_perso, :classe, :type, :reponse_secrete, CURDATE())');
        $req->execute(array('pseudo'=>$_POST['pseudo'], 'mot_de_passe'=>$_POST['mot_de_passe'], 'email'=>$_POST['email'], 'nom_perso'=>$_POST['nom_perso'], 'classe'=>$_POST['classe'], 'type'=>$_POST['type'], 'reponse_secrete'=>$_POST['reponse_secrete']));
     
        echo "Merci de votre inscription";
        }
        else
        {
        echo "Un membre possede deja ce pseudo";
        }
        }
        else
        {
        echo "Votre adresse email n'est pas valide";
        }
        }
        else
        {
        echo "Il faut remplir tous les champs";
        }
        }
        else
        {
        echo "Une erreur s'est produite";
        }
        }
        else
        {
        echo "Vous n'avez pas le droit d'acceder a cette page";
        }
        ?>
    ce code marche, le mot de passe est bien insérer dans la base de donnée mais j'aimerais l'insérer haché, je n'arrive pas à le faire malgré plusieurs tentatives...Pourriez-vous m'aider, svp ?^^



    Pour la vérification de données liées à la connexion: loginok.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
    <?php
        /* il faut demarrer la session*/
        session_start();
     
        if (empty($_SESSION['id'])) //les membres connecte ne peuvent pas s'inscrire
        {
        /* il faut que toutes les variables du formulaires existent*/
        if(isset($_POST['pseudo']) && isset($_POST['mot_de_passe']))
        {
        /*il faut que tous les champs soient renseignes*/
        if($_POST['pseudo']!="" && $_POST['mot_de_passe']!="")
        {
        /*connexion a la BDD*/
        try
        {
        $bdd = new PDO('mysql:host=localhost;dbname=nom_base', 'login', 'mdp');
        }
        catch (Exception $e)
        {
        die('Erreur : ' . $e->getMessage());
        }
     
        /*on crypte le mot de passe pour faire le test*/
        $mot_de_passehache= sha1($_POST['mot_de_passe']);
     
        /* on verifie qu'un membre a bien ce pseudo et ce mot de passe*/
        $req = $bdd->prepare('SELECT * FROM membres WHERE pseudo = :pseudo AND mot_de_passe= :mot_de_passe ');
        $req->execute(array('pseudo'=> $_POST['pseudo'], 'mot_de_passe'=> $_POST['mot_de_passehache']));
        $resultat=$req->fetch();
     
        /*si il n'y a pas de resultats, on renvoie a la page de connexion*/
        if(!$resultat)
        {
        header('Location: login.php');
        }
        else
        {
        /* on demarre la session */
        session_start();
     
        /* on cree les variables de session du membre qui lui serviront pendant sa session*/
        $_SESSION['id']= $resultat['id'];
        $_SESSION['pseudo']= $pseudo;
        $_SESSION['email']= $resultat['email'];
     
        /*on renvoie sur la page d'accueil*/
        header('Location: index.php');
        }
        }
        else
        {
        echo "Il faut remplir tous les champs";
        }
        }
        else
        {
        echo "Une erreur s'est produite";
        }
        }
        else
        {
        echo "Vous n'avez pas le droit d'acceder a cette page";
        }
        ?>

    Sauf que quand j'appuie sur valider, rien ne se passe, alors que j'entre un pseudo et un mot de passe qui sont dans la base de donnée. Et quand j'appuie sur valider en laissant les champs vides, ça charge et ça me ramène sur loginok.php au lieu de m'envoyer sur index.php. Avec "index.php", comme elle est codée ici, je pourrais m'en servir comme page de menu des membres connectés, est-ce bien ça ?

    Je devrais bien placer ce code ci: http://pastebin.com/sQVtRLvG en haut de chaque page réservées aux membres connecté ? C'est bien ça ?

    Avec "index.php", comme elle est codée ici http://pastebin.com/mKBCm0yC, je pourrais m'en servir comme page de menu des membres connectés, est-ce bien ça ?



    Lorsque le membre sera connecté il sera basculé vers index.php. ==>est-ce bien ce qui est codé ?

    Merci, bonne soirée.

  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
    tu as mis $_POST['mot_de_passehache'] au lieu de $mot_de_passehache.
    Et tu as deux fois le demarrage de session.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Merci, j'ai réglé le problème de la page de connexion je crois .

    Par contre, toujours un problème avec l'inscription...


    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
    <?php
    /* si le membre est connecte*/
    if(isset ($_SESSION['id']))
    {
    if( $_SESSION['id']!="" || $_SESSION['pseudo']!="")
    {
    ?>
    <a href="loginout.php">Deconnexion</a><br />
    <?php
    }
    }
    else
    {
    ?>
    <a href="login.php">Connexion</a><br />
    <a href="inscription.php">Inscription</a><br />
    <?php
    }
    ?>
     
     
    	<?php
        /* il faut demarrer la session*/
        session_start();
     
        if (empty($_SESSION['id'])) //les membres connecte ne peuvent pas s'inscrire
        {
        /* il faut que toutes les variables du formulaires existent*/
        if(isset($_POST['pseudo']) && isset($_POST['mot_de_passe']) && isset($_POST['email']) && isset($_POST['nom_perso']) && isset($_POST['classe']) && isset($_POST['type']) && isset($_POST['reponse_secrete']))
        {
        /*il faut que tous les champs soient renseignes*/
        if($_POST['pseudo']!="" && $_POST['mot_de_passe']!="" && $_POST['email']!="" && $_POST['nom_perso']!="" && $_POST['classe']!="" && $_POST['type']!="" && $_POST['reponse_secrete']!="")
        {
        /*connexion a la BDD*/
        try
        {
        $bdd = new PDO('mysql:host=localhost;dbname=nom_base', 'login', 'mdp');
        }
        catch (Exception $e)
        {
        die('Erreur : ' . $e->getMessage());
        }
     
        /* on teste l'adresse email, si c'est bon, on continue, sinon, on affiche un message d'erreur*/
        if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}.[a-z]{2,4}$#", $_POST['email']))
        {
        /*on verifie si un membre ne possede pas deja le meme pseudo*/
        $req = $bdd->prepare('SELECT id FROM membres WHERE pseudo = :pseudo');
        $req->execute(array('pseudo'=> $_POST['pseudo']));
        $nb_resultats_recherche_membre=$req->fetch();
     
        if(!$nb_resultats_recherche_membre) /*si il n'y a pas de resultat*/
        {
        /*on crypte le mot de passe*/
    	$mot_de_passe = sha1($_POST['mot_de_passe']);
     
        /*Si le pseudo est libre et l'email valide, alors on enregistre le nouveau membre*/
        $req=$bdd->prepare('INSERT INTO membres(pseudo, mot_de_passe, email, nom_perso, classe, type, reponse_secrete, date_inscription) VALUES (:pseudo, :mot_de_passe, :email, :nom_perso, :classe, :type, :reponse_secrete, CURDATE())');
        $req->execute(array('pseudo'=>$_POST['pseudo'], 'mot_de_passe'=>$_POST['mot_de_passe'], 'email'=>$_POST['email'], 'nom_perso'=>$_POST['nom_perso'], 'classe'=>$_POST['classe'], 'type'=>$_POST['type'], 'reponse_secrete'=>$_POST['reponse_secrete']));
     
        echo "Merci de votre inscription";
        }
        else
        {
        echo "Un membre possede deja ce pseudo";
        }
        }
        else
        {
        echo "Votre adresse email n'est pas valide";
        }
        }
        else
        {
        echo "Il faut remplir tous les champs";
        }
        }
        else
        {
        echo "Une erreur s'est produite";
        }
        }
        else
        {
        echo "Vous n'avez pas le droit d'acceder a cette page";
        }
        ?>

    Je ne vois toujours pas où ça plante...


    Je rappelle que je veux insérer le mot de passe haché dans la base de donné mais ça ne marche pas. Help, svp ^^

  8. #8
    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
    Concentre toi un peu sur ce que tu écris, tu as mis $_POST['mot_de_passe'] au lieu de $mot_de_passehache.

    Tu ne peux pas avoir le session_start() après tes affichages.

    Tu peux remplacer ta série isset() et !="" par !empty
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        /*on crypte le mot de passe*/
    	$mot_de_passe = sha1($_POST['mot_de_passe']);
     
        /*Si le pseudo est libre et l'email valide, alors on enregistre le nouveau membre*/
        $req=$bdd->prepare('INSERT INTO membres(pseudo, mot_de_passe, email, nom_insecte, especes, type, reponse_secrete, date_inscription) VALUES (:pseudo, :mot_de_passe, :email, :nom_insecte, :especes, :type, :reponse_secrete, CURDATE())');
        $req->execute(array('pseudo'=>$_POST['pseudo'], 'mot_de_passe'=>$mot_de_passe, 'email'=>$_POST['email'], 'nom_insecte'=>$_POST['nom_insecte'], 'especes'=>$_POST['especes'], 'type'=>$_POST['type'], 'reponse_secrete'=>$_POST['reponse_secrete']));
     
    	}
    	}
        ?>
    J'ai remplacé par ce que tu m'as dis, mais là j'ai raccourci, j'ai laissé mot_de_passe et non mot_de_passehache


    dans $req j'ai changé: 'mot_de_passe'=>$POST['mot_de_passe] par

    'mot_de_passe'=>$mot_de_passe

    mais j'ai aussi testé: mot_de_passe=>$('mot_de_passe') mais rien ne marche...C'est la $req du mot de passe à la ligne 7 qui est mal écrite, non ?

    Si oui, qu'est-ce qu'il faut écrire svp ? ^^ je galère dessus depuis quelques heures là :/, c'est peut-être tout con mais je débute.

  10. #10
    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
    Qu'est ce que tu obtiens avec le code corrigé ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    RECTIFICATION ! Ca marche pour 'mot_de_passe'=>$mot_de_passe !

    Merci à toi !

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

Discussions similaires

  1. [MySQL] Quelqu'un pourrait il m'aider à vérifier mon formulaire d'inscription?
    Par Pepito2030 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/07/2006, 00h56
  2. [Newbie]*Formulaire d'inscription pour théâtre
    Par [Débutant]*Ludo dans le forum Access
    Réponses: 1
    Dernier message: 16/05/2006, 18h09
  3. Formulaire d'inscription
    Par ero-sennin dans le forum Langage
    Réponses: 3
    Dernier message: 29/01/2006, 19h23
  4. Creation d'un formulaire d'inscription
    Par whbh dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 21/01/2006, 14h04
  5. Formulaire d'inscription
    Par Gourouni dans le forum ASP
    Réponses: 6
    Dernier message: 02/12/2004, 16h28

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