Probléme de débutant

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 : Probléme de débutant

Re: Probléme de débutant

par Alphacentor » 03 nov. 2010, 11:56

Salut,
C'était exactement ça :D , merci beaucoup ! J'en perdais mon latin héhé.

Re: Probléme de débutant

par moogli » 02 nov. 2010, 00:11

faudrait le reste du message
j'ai intervertis un . et un ' le
$message = 'Erreur d'accès à la base de données lors de la création du compte utilisateur <br /> message : ' .mysql_error().'<br />Avec la requête' .$requete;

pour le debug tu peu direct mettre echo $message; pour avoir le message complet.

le problème vient du fait que la requête est "foireuse", => force est un mot clef pour mysql c'est pour cela que la requête plante. ajoute des ` autour ou change le nom du champ

Code : Tout sélectionner

INSERT INTO Comptes_Utilisateurs ( Nom_Utilisateur, Mot_de_Pass, `Force`, Adresse_Email, Date_Inscription, Clef_Activation ....
Edit : Dsl pas pensé plutôt au mot clef ;)
@+

Re: Probléme de débutant

par Invité » 01 nov. 2010, 23:53

Salut, merci pour ta réponse rapide. Voilà le message que celà me donne :

" 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 'Force, Adresse_Email, Date_Inscription, Clef_Activation) ' at line 1 "

J'ai du mal à comprendre se que je dois faire, il me dit que c'est la requête SQL qui n'est pas bonne en faite c'est ça ? Et je dois faire quoi :(

Re: Probléme de débutant

par moogli » 01 nov. 2010, 23:39

salut,

dans le code de vérification du formulaire modifie le mysql_query ligne 102 ainsi
<?php
 $requete = "
                              INSERT INTO Comptes_Utilisateurs(
                                   Nom_Utilisateur
                                   , Mot_de_Pass
                    , Force
                                   , Adresse_Email
                                   , Date_Inscription
                                   , Clef_Activation
                              )
                              VALUES(
                                   '" . $_POST["TB_Nom_Utilisateur"] . "'
                                   , '" . md5($_POST["TB_Mot_de_Pass"]) . "'
                                   , '" . $_POST["TB_Adresse_Email"] . "'
                                   , '" . $_POST["TB_Force"] . "'
                                   , '" . time() . "'
                                   , '" . $clef_activation . "'
                              )
                         ";
                         $result = mysql_query($requete);
                         
                         // Si une erreur survient
                         if(!$result)
                         {
                              $message = "Erreur d'accès à la base de données lors de la création du compte utilisateur <br /> message".mysql_error().'<br />Avec la requete .'$requete;
                         }
?>
cela va te fournir un message d'erreur exploitable afin de corriger l'erreur.

@+

Probléme de débutant

par Andromede86 » 01 nov. 2010, 23:24

Bonsoir à tous,
voilà ça fait une heure que je me prends la tête sur quelques chose de très simple, je débute en php et j'étais en train de tester un l'aide d'un tutoriel la réalisation d'un formulaire d'inscription.

J'ai créer une base de donnée avec ce code :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `Comptes_Utilisateurs` ( `Id_utilisateur` bigint(20) NOT NULL auto_increment, `Nom_Utilisateur` varchar(20) NOT NULL, `Mot_de_Pass` varchar(32) NOT NULL, `Adresse_Email` varchar(255) NOT NULL, `Date_Inscription` int(10) NOT NULL default '0', `Compte_Active` enum('0','1') NOT NULL default '0', `Clef_Activation` varchar(8) NOT NULL, KEY `Id_utilisateur` (`Id_utilisateur`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
suivi d'une page codée (et une autre pour l'accès à la BDD)

Code : Tout sélectionner

<?php // Redirige l'utilisateur s'il est déjà identifié if(isset($_COOKIE["ID_UTILISATEUR"])) { header("Location: index.php"); } else { // Formulaire visible par défaut $masquer_formulaire = false; // Une fois le formulaire envoyé if(isset($_POST["BT_Envoyer"])) { // Vérification de la validitée des champs if(!ereg("^[A-Za-z0-9_]{4,20}$", $_POST["TB_Nom_Utilisateur"])) { $message = "Votre nom d'utilisateur doit comporter entre 4 et 20 caractéres<br />\n"; $message .= "L'utilisation de l'underscore est autorisée"; } elseif(!ereg("^[A-Za-z0-9]{4,}$", $_POST["TB_Mot_de_Pass"])) { $message = "Votre mot de passe doit comporter au moins 4 caractéres"; } elseif($_POST["TB_Mot_de_Pass"] != $_POST["TB_Confirmation_Mot_de_Passe"]) { $message = "Votre mot de passe n'a pas été correctement confirmé"; } elseif(!ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$", $_POST["TB_Adresse_Email"])) { $message = "Votre adresse e-mail n'est pas valide"; } //elseif(!ereg("[1-5]", $_POST["TB_Force"])) //{ // $message = "Votre force doit être différente de 0"; //} else { // Connexion à  la base de donéees // Valeurs à  modifier selon vos paramêtres configuration include 'secur/config.php'; mysql_connect("$serveur", "$login", "$motdepasse"); mysql_select_db("$nom_base"); // Vérification de l'unicité du nom d'utilisateur et de l'adresse e-mail $result = mysql_query(" SELECT Nom_Utilisateur , Adresse_Email FROM Comptes_Utilisateurs WHERE Nom_Utilisateur = '" . $_POST["TB_Nom_Utilisateur"] . "' OR Adresse_Email = '" . $_POST["TB_Adresse_Email"] . "' "); // Si une erreur survient if(!$result) { $message = "Erreur d'accès à la base de données lors de la vérification d'unicité"; } else { // Si un enregistrement est trouvé if(mysql_num_rows($result) > 0) { while($row = mysql_fetch_array($result)) { if($_POST["TB_Nom_Utilisateur"] == $row["Nom_Utilisateur"]) { $message = "Le nom d'utilisateur " . $_POST["TB_Nom_Utilisateur"]; $message .= "est déjà utilisé"; } elseif($_POST["TB_Adresse_Email"] == $row["Adresse_Email"]) { $message = "L'adresse e-mail " . $_POST["TB_Adresse_Email"]; $message .= "est déjà utilisée"; } } } else { // Génération de la clef d'activation $caracteres = array("a", "b", "c", "d", "e", "f", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9); $caracteres_aleatoires = array_rand($caracteres, 8); $clef_activation = ""; foreach($caracteres_aleatoires as $i) { $clef_activation .= $caracteres[$i]; } // Création du compte utilisateur $result = mysql_query(" INSERT INTO Comptes_Utilisateurs( Nom_Utilisateur , Mot_de_Pass , Adresse_Email , Date_Inscription , Clef_Activation ) VALUES( '" . $_POST["TB_Nom_Utilisateur"] . "' , '" . md5($_POST["TB_Mot_de_Pass"]) . "' , '" . $_POST["TB_Adresse_Email"] . "' , '" . time() . "' , '" . $clef_activation . "' ) "); // Si une erreur survient if(!$result) { $message = "Erreur d'accès à la base de données lors de la création du compte utilisateur"; } else { // Envoi du mail d'activation $sujet = "Activation de votre compte utilisateur"; $message = "Pour valider votre inscription, merci de cliquer sur le lien suivant :\n"; $message .= "http://" . $_SERVER["SERVER_NAME"]; $message .= "/activer-compte-utilisateur.php?id=" . mysql_insert_id(); $message .= "&clef=" . $clef_activation; // Si une erreur survient if(!@mail($_POST["TB_Adresse_Email"], $sujet, $message)) { $message = "Une erreur est survenue lors de l'envoi du mail d'activation<br />\n"; $message .= "Veuillez contacter l'administrateur afin d'activer votre compte"; } else { // Message de confirmation $message = "Votre compte utilisateur a correctement été créer<br />\n"; $message .= "Un email vient de vous être envoyer afin de l'activer"; // On masque le formulaire $masquer_formulaire = true; } } } } } // Fermeture de la connexion à la base de données mysql_close(); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>[PHP] Créer un espace membre</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php if(isset($message)) { ?> <p><?php echo $message; ?></p> <?php } if($masquer_formulaire != true) { ?> <form action="http://<?php echo $_SERVER["SERVER_NAME"] . $_SERVER["SCRIPT_NAME"]; ?>" method="post"> <p> Nom d'utilisateur : <input type="text" name="TB_Nom_Utilisateur" /> </p> <p> Mot de passe : <input type="password" name="TB_Mot_de_Pass" /> </p> <p> Confirmation du mot de passe : <input type="password" name="TB_Confirmation_Mot_de_Passe" /> </p> <p> Adresse e-mail : <input type="text" name="TB_Adresse_Email" /> </p> <p> <input type="submit" name="BT_Envoyer" value="Envoyer" /> </p> </form> <?php } ?> </body> </html>
jusque là ça fonctionne parfaitement... Content de moi je décide de refaire la même chose en ajoutant une autre entrée que celle du tutos, une entrée "force" par exemple.

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `Comptes_Utilisateurs` ( `Id_utilisateur` bigint(20) NOT NULL auto_increment, `Nom_Utilisateur` varchar(20) NOT NULL, `Mot_de_Pass` varchar(32) NOT NULL, `Adresse_Email` varchar(255) NOT NULL, `Force` varchar(255) NOT NULL, `Date_Inscription` int(10) NOT NULL default '0', `Compte_Active` enum('0','1') NOT NULL default '0', `Clef_Activation` varchar(8) NOT NULL, KEY `Id_utilisateur` (`Id_utilisateur`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Ensuite sur le même modèle et la même idée j'ajoute aussi dans la page du code :

Code : Tout sélectionner

<?php // Redirige l'utilisateur s'il est déjà identifié if(isset($_COOKIE["ID_UTILISATEUR"])) { header("Location: index.php"); } else { // Formulaire visible par défaut $masquer_formulaire = false; // Une fois le formulaire envoyé if(isset($_POST["BT_Envoyer"])) { // Vérification de la validitée des champs if(!ereg("^[A-Za-z0-9_]{4,20}$", $_POST["TB_Nom_Utilisateur"])) { $message = "Votre nom d'utilisateur doit comporter entre 4 et 20 caractéres<br />\n"; $message .= "L'utilisation de l'underscore est autorisée"; } elseif(!ereg("^[A-Za-z0-9]{4,}$", $_POST["TB_Mot_de_Pass"])) { $message = "Votre mot de passe doit comporter au moins 4 caractéres"; } elseif($_POST["TB_Mot_de_Pass"] != $_POST["TB_Confirmation_Mot_de_Passe"]) { $message = "Votre mot de passe n'a pas été correctement confirmé"; } elseif(!ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$", $_POST["TB_Adresse_Email"])) { $message = "Votre adresse e-mail n'est pas valide"; } //elseif(!ereg("[1-5]", $_POST["TB_Force"])) //{ // $message = "Votre force doit être différente de 0"; //} else { // Connexion à  la base de donéees // Valeurs à  modifier selon vos paramêtres configuration include 'secur/config.php'; mysql_connect("$serveur", "$login", "$motdepasse"); mysql_select_db("$nom_base"); // Vérification de l'unicité du nom d'utilisateur et de l'adresse e-mail $result = mysql_query(" SELECT Nom_Utilisateur , Adresse_Email FROM Comptes_Utilisateurs WHERE Nom_Utilisateur = '" . $_POST["TB_Nom_Utilisateur"] . "' OR Adresse_Email = '" . $_POST["TB_Adresse_Email"] . "' "); // Si une erreur survient if(!$result) { $message = "Erreur d'accès à la base de données lors de la vérification d'unicité"; } else { // Si un enregistrement est trouvé if(mysql_num_rows($result) > 0) { while($row = mysql_fetch_array($result)) { if($_POST["TB_Nom_Utilisateur"] == $row["Nom_Utilisateur"]) { $message = "Le nom d'utilisateur " . $_POST["TB_Nom_Utilisateur"]; $message .= "est déjà utilisé"; } elseif($_POST["TB_Adresse_Email"] == $row["Adresse_Email"]) { $message = "L'adresse e-mail " . $_POST["TB_Adresse_Email"]; $message .= "est déjà utilisée"; } } } else { // Génération de la clef d'activation $caracteres = array("a", "b", "c", "d", "e", "f", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9); $caracteres_aleatoires = array_rand($caracteres, 8); $clef_activation = ""; foreach($caracteres_aleatoires as $i) { $clef_activation .= $caracteres[$i]; } // Création du compte utilisateur $result = mysql_query(" INSERT INTO Comptes_Utilisateurs( Nom_Utilisateur , Mot_de_Pass , Force , Adresse_Email , Date_Inscription , Clef_Activation ) VALUES( '" . $_POST["TB_Nom_Utilisateur"] . "' , '" . md5($_POST["TB_Mot_de_Pass"]) . "' , '" . $_POST["TB_Adresse_Email"] . "' , '" . $_POST["TB_Force"] . "' , '" . time() . "' , '" . $clef_activation . "' ) "); // Si une erreur survient if(!$result) { $message = "Erreur d'accès à la base de données lors de la création du compte utilisateur"; } else { // Envoi du mail d'activation $sujet = "Activation de votre compte utilisateur"; $message = "Pour valider votre inscription, merci de cliquer sur le lien suivant :\n"; $message .= "http://" . $_SERVER["SERVER_NAME"]; $message .= "/activer-compte-utilisateur.php?id=" . mysql_insert_id(); $message .= "&clef=" . $clef_activation; // Si une erreur survient if(!@mail($_POST["TB_Adresse_Email"], $sujet, $message)) { $message = "Une erreur est survenue lors de l'envoi du mail d'activation<br />\n"; $message .= "Veuillez contacter l'administrateur afin d'activer votre compte"; } else { // Message de confirmation $message = "Votre compte utilisateur a correctement été créer<br />\n"; $message .= "Un email vient de vous être envoyer afin de l'activer"; // On masque le formulaire $masquer_formulaire = true; } } } } } // Fermeture de la connexion à la base de données mysql_close(); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>[PHP] Créer un espace membre</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php if(isset($message)) { ?> <p><?php echo $message; ?></p> <?php } if($masquer_formulaire != true) { ?> <form action="http://<?php echo $_SERVER["SERVER_NAME"] . $_SERVER["SCRIPT_NAME"]; ?>" method="post"> <p> Nom d'utilisateur : <input type="text" name="TB_Nom_Utilisateur" /> </p> <p> Mot de passe : <input type="password" name="TB_Mot_de_Pass" /> </p> <p> Confirmation du mot de passe : <input type="password" name="TB_Confirmation_Mot_de_Passe" /> </p> <p> Adresse e-mail : <input type="text" name="TB_Adresse_Email" /> </p> <p> Force : <input type="text" name="TB_Force" /> </p> <p> <input type="submit" name="BT_Envoyer" value="Envoyer" /> </p> </form> <?php } ?> </body> </html>
et là problème ça me retourne systématiquement à l'inscription d'un membre "Erreur d'accès à la base de données lors de la création du compte utilisateur"... Je ne comprends vraiment pas pourquoi, c'est exactement la même chose avec des lignes en plus sur le même modèle... Enfin autre chose depuis mon ajout quand je remplis un champ de la mauvaise façon ça m'affiche "Warning: mysql_close(): no MySQL-Link resource supplied in /homez.33/endromed/www/test/creer-compte-utilisateur.php on line 164", se qui ne se produisait pas dans le premier cas :shock: .

Merci d'avance pour votre aide.