Système d'inscription sur son site.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Système d'inscription sur son site.

par JeanJean » 23 mars 2009, 23:10

Ahaha je suis trop fort. :p Ca marche du feu de Dieu. :D

Merci à vous tous pour m'avoir aider, vous êtes précis et sympathique bref vous pouvez être sur que je reviendrais vous voir si jamais j'ai encore un problème (ça c'est sûr :P)

Voilà, bonne soirée chez vous. :)

par Ryle » 23 mars 2009, 22:42

Bingo ;)

par JeanJean » 23 mars 2009, 21:38

Ah, c'est bien toi au moins tu me fais réfléchir. :p

Alors hum voyons ça... :twisted:

Je dirais... Hum nan pas ça... :roll:




Ah trouvé ! :D

Dans ID_Utilisateurs ? :)

par Ryle » 23 mars 2009, 21:28

J'en ai même une bonne idée ;) Mais si je te le dis tout de suite, ca sera pas drôle... :P

Alors partons du principe qu'un tuto peut contenir des bugs, des coquilles ou des bizareries (sauf sur phpfrance naturellement, si tel était le cas, elle serait nécessairement voulu par l'auteur et viserait à tester l'internaute, si si ! ;))

Maintenant et pour te mettre sur la piste, regardons ce qu'est sensé faire ton script. Le but est d'enregistrer un utilisateur dans une table de ta base de données. Actuellement ton script :
- récupère les données du formulaire
- vérifie la validité des champs
- se connecte à la base de données
- Vérifie si le nom d'utilisateur et l'adresse existent déjà dans la table des utilisateurs
- et si aucun enregistrement n'est trouvé, va générer la clé d'activation et ajouter l'utilisateur dans la table des utilisateurs

Sachant que l'erreur que tu rencontres vient de cette dernière étape, alors que tu essayes d'insérer ton utilisateur dans une table nommée "Comptes_Utilisateurs" qui n'existe pas, dans quelle table existante devrais-tu logiquement stocker ces informations... et pourquoi ? :) (relis le début du code, regardes bien les étapes, la réponse est dedans ;))

par JeanJean » 23 mars 2009, 20:15

En effet, cette table est manquante... :/

D'ailleurs dans ce tuto la table n'est pas non plus présente... :/

Tu n'aurais pas une petite idée de quoi mettre dans cette table par hasard ? :d

par Ryle » 23 mars 2009, 19:53

Et ben voilà ! Maintenant tu sais pourquoi ça ne fonctionne pas ! :)

comment ça "non" ? :x

Il vient pourtant de te le dire : la Table "Comptes_Utilisateurs" n'existe pas dans la base "jnewb" :)

Alors petitah, est-ce que tu es bien connecté à la bonne base de données (jnewb) et petitbéh,
as-tu bien une table nommée "Comptes_Utilisateurs" dans cette base (attention aux s, aux majuscules/minuscules, etc.)

par JeanJean » 23 mars 2009, 19:44

TADAM ! :D
Erreur
requête SQL:

INSERT INTO Comptes_Utilisateurs( Nom_Utilisateur, Mot_de_Passe, Adresse_Email, Date_Inscription, Clef_Activation ) 
VALUES (
'Jean',  'c4e5e086e8ddf70272926014cacd83c6',  '[email protected]',  '1237830211',  '5a39462f'
)

MySQL a répondu:

#1146 - Table 'jnewb.Comptes_Utilisateurs' doesn't exist

par Ryle » 23 mars 2009, 19:41

Ah bah ouais mais non...... c'est pas ton code php que mysql doit tester :)

C'est le code sql que php lui envoi qu'il faut vérifier. Et pour connaitre le code SQL que php envoi à MySQL, il faut l'afficher : c'est ce que t'as fait faire Julian.

Donc normalement c'est ta requête :

Code : Tout sélectionner

INSERT INTO Comptes_Utilisateurs( Nom_Utilisateur , Mot_de_Passe , Adresse_Email , Date_Inscription , Clef_Activation ) VALUES( 'Mon Pseudo' , 'Mot De Passe Crypté' , 'Mon eMail' , '1237818552' , 'ac124678' )
qu'il faut essayer de jouer dans phpMyAdmin :)
(enfin la vrai, celle qui est affichée à ton écran, parce que 'Mot De Passe Crypté' m'a pas l'air d'être véritablement une chaine cryptée en md5 ;))

par JeanJean » 23 mars 2009, 18:32

Okay :)

Alors voilà ce que j'ai fait (j'espère que c'est bon :p)

J'ai copié / collé
$result = mysql_query("
                              INSERT INTO Comptes_Utilisateurs(
                                   Nom_Utilisateur
                                   , Mot_de_Passe
                                   , Adresse_Email
                                   , Date_Inscription
                                   , Clef_Activation
                              )
                              VALUES(
                                   '" . $_POST["TB_Nom_Utilisateur"] . "'
                                   , '" . md5($_POST["TB_Mot_de_Passe"]) . "'
                                   , '" . $_POST["TB_Adresse_Email"] . "'
                                   , '" . time() . "'
                                   , '" . $clef_activation . "'
                              )
                         ");
Et j'ai exécuté la chose :p

Et ça me donne ça :
requête SQL:

$result = mysql_query(
"
                              INSERT INTO Comptes_Utilisateurs(
                                   Nom_Utilisateur
                                   , Mot_de_Passe
                                   , Adresse_Email
                                   , Date_Inscription
                                   , Clef_Activation
                              )
                              VALUES(
                                   '".$_POST[ "TB_Nom_Utilisateur"]. "'
                                   , '".md5(
$_POST[ "TB_Mot_de_Passe"]
). "'
                                   , '".$_POST[ "TB_Adresse_Email"]. "'
                                   , '".time(
). "'
                                   , '".$clef_activation. "'
                              )
                         "
)

MySQL a répondu:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$result = mysql_query("
                              INSERT INTO Comptes_Utili' at line 1 

Voilà voilà. :)

par Ryle » 23 mars 2009, 17:56

Alors en fait tu as tout bon jusqu'à la selection des champs. En effet, dans le cas présent, on ne veut pas faire un select pour connaitre les valeurs des enregistrements en base, mais on veut tester la requête affichée par ton script pour voir si elle passe ou pas :)

Donc dans le formulaire sql, tu vires tout ce que tu peux trouver (les SELECT * FROM ...), tu colles ta requête et tu l'exécutes pour voir si elle s'insère bien. Si c'est le cas, c'est que le problème de ton script est lié à la connexion avec la base de données. S'il y a une erreur, bah il te donnera un message te permettant d'identifier le problème et de le corriger ;)

par JeanJean » 23 mars 2009, 16:49

Alors alors. :)

Quand je veux exécuter ma requête sous MyAdmin, je vais dans l'onglet SQL, c'est bien ça ? :)

Après je choisis quelle champ je veux exécuter, je clique sur le bouton "<<" pour afficher le champ. Le délimiteur est par défaut avec un ";" je laisse ça comme ça ?

Ensuite je clique sur Executer et à chaque fois je tombe sur une erreur du type :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`Nom_Utilisateur` SELECT * FROM `ID_Utilisateur` WHERE 1 `ID_Utilisateur`
LIMI' at line 1

Et ce pour tous les champs... :d

je sens qu'il va falloire être patient avec moi :P

En tout cas merci de m'aider. :)

par Ryle » 23 mars 2009, 16:36

Le but de cette instruction est en effet d'afficher la requête telle qu'elle est envoyée à MySQL (et donc de voir les valeurs que tu lui envois). C'est uniquement pour du débuggage et tu pourras la vider ensuite ;)

Une fois la requête affichée à l'écran, tu peux la copier/coller sous phpMyAdmin et vérifier si son exécution ne provoque pas d'erreur (ce qui justifierait pourquoi $result ne contient pas la bonne valeur).

A partir de là et selon le message d'erreur tu pourras voir si c'est un problème dans le nom de la table, dans le nom d'un champ, dans la taille d'un champ, etc... et donc corriger ton code en conséquence :)

Edit : par exemple si ta date est un champ de type "date" dans mysql alors la valeur "1237818552" que tu essayes d'y insérer n'est pas au bon format (aaaa-mm-jj)

par JeanJean » 23 mars 2009, 16:31

En effet une fois l'ajout d'un ";", je n'ai plus l'erreur. :D

Cependant, quand je tente de m'inscrire j'ai toujours le droit à la même erreur, mais en plus, j'ai :

"INSERT INTO Comptes_Utilisateurs( Nom_Utilisateur , Mot_de_Passe , Adresse_Email , Date_Inscription , Clef_Activation ) VALUES( 'Mon Pseudo' , 'Mot De Passe Crypté' , 'Mon eMail' , '1237818552' , 'ac124678' ) "

par zeus » 23 mars 2009, 16:18

@Julian : Quand j'ajoute ton script, j'ai le droit à : Parse error: syntax error, unexpected T_IF, expecting ',' or ';' in /mnt/102/sda/4/3/jnewb/inscription.php on line 143
Ce message d'erreur dit, une fois traduit :
"Je n'attendais pas un if, mais une virgule "," ou un point-virgule ";""

C'est donc qu'il manque un caractère de fin de ligne avant le if.

par JeanJean » 23 mars 2009, 15:39

Merci pour la rapidité de vos réponses, ça fait plaisir. :)

@Ryle : Je vais regarder dans la console PHP MyAdmin voir comment on exécute ma commande. :)

@Julian : Quand j'ajoute ton script, j'ai le droit à : Parse error: syntax error, unexpected T_IF, expecting ',' or ';' in /mnt/102/sda/4/3/jnewb/inscription.php on line 143

Pour info la ligne 143 et aux alentours, ça donne ça :
                         // Si une erreur survient
                         if(!$result)
                         {
                              $message = "Une erreur est survenue lors de la création de votre compte utilisateur!!";
                         }

Merci. ;)

Edit : @Ryle : Je suis débutant en PHP et je n'ai pas trouvé comment exécuter une fonction dans ma console PHP MyAdmin. :/