cretefre Posté 16 Mars 2006 Posté 16 Mars 2006 Bonsoir ! Je commence juste en PHP et mysql et je galère un peu. J'ai écrit un formulaire XHTML traité en PHP. variables passées au htmlentities, ENT_QUOTES et md5 pour le mot de passe. les données sont correctement (à part les é, è etc... mais ça doit venir du HTMLentities, non ?) enregistrées dans la table. Par contre ,pour les récupérer.... certaines ne posent pas de problème (?) d'autre oui, elle ne sont pas trouvées par une requète mysql. Si je les écrit directement dans la base, par contre, ça marche. Alors, questions : _est-ce un pb de configuration de la table (champs en VARCHAR) et latin_swedish puis utf8 unicode pour essayer. _est-ce le traitement php qui ne marche pas ? Bref, quelle solution ? Merci beaucoup pour les réponses au débutant que je suis !
NorSeb Posté 17 Mars 2006 Posté 17 Mars 2006 Bonjour, Tu peux nous donner un exemple de requète ? et, tant qu'on y est un exemple de données ?
cretefre Posté 17 Mars 2006 Auteur Posté 17 Mars 2006 Merci pour le coup de main ! C'est un formulaire d'inscription : prenom, nom, age,pseudo, motdepasse, etc...17 champs dans la table.Que du texte. Jusque là, ça marche. Ensuite, les inscrits peuvent modifier leurs infos. on retourne donc dans la base, on vérifie que pseudo et motdepasse existent dans la table et on ressort les infos. Après ,on peut les modifier avec une requête UPDATE. Bref, après quelques inscriptions, je me rends compte que certains ont accès à leur données, d'autres pas. Par contre, si je rentre manuellement leur pseudo et mot de passe dans la table, ça marche. :
Mikiman Posté 17 Mars 2006 Posté 17 Mars 2006 (modifié) Ton problème doit donc venir du formulaire d'inscription. Contrôle la requête d'insertion, sa doit être à cet endroit qu'il y'a un problème Modifié 17 Mars 2006 par Mikiman
captain_torche Posté 17 Mars 2006 Posté 17 Mars 2006 Si j'ai bien compris, le souci ne vient pas du formulaire d'inscription (vu que les données sont déjà présentes en base), mais plutôt de celui de modification. Tu dis que tu appliques un HTML entities sur tes données. Tu le fais AVANT l'entrée en base ? Si c'est le cas, je te le déconseille fortement : - tu enregistres des valeurs supplémentaires dans ta base (donc tu l'alourdis) - tu empêches une modification simplifiée (tu dois auparavant faire un html_entity_decode sur toutes les valeurs pour les afficher dans les champs nécessaires) - Tu t'empêches également d'appliquer des fonctions d'affichage par la suite (BBCode, etc). L'idéal étant d'enregistrer les valeurs textuelles dans ta BDD, après les avoir transformées avec mysql_real_escape_string (pour éviter les injections SQL). Sinon, comment se passe la recherche d'informations quand on veut modifier sa fiche ? Sur quels champs te bases-tu ?
cretefre Posté 17 Mars 2006 Auteur Posté 17 Mars 2006 (modifié) c'est aussi ce que je me dis mais elle me semble correcte. Elle ressemble à ça : mysql_query=("INSERT INTO membres (id, prenom.....) VALUES ("","'.$prenom.'", etc...") est-ce que htmlentities ou ENT_QUOTES pourrait avoir un rapport ? J'ai traité les variables comme cela : $pseudo=htmlentities($_POST['pseudo'],ENT_QUOTES); ... EDIT : Captain Torche ça serait ça...ON m'avait conseillé ça pour éviter les injections. je ne connaissais pas mysql_real_escape_string, il faut que j'apprenne à m'en servir. Le problème se pose même avant la modif. : Une fois le formulaire rempli, je propose au nouvel inscrit de voir sa fiche mais on reconnait pas son pseudo et motdepasse... pourtant, si je vais sur phpmyadmin et que je les rerentre manuellement, ça marche. Pour êtreplus clair : http://www.amitiesmusicales.com/crbst_4.htm (oui, je sais ç'est la honte, j'ai fait le site avec Cariboost...mais je n'avais pas encore appris HTML et php !) inscrivez vous pour voir, j'enlèverai tout ça après. Modifié 17 Mars 2006 par cretefre
cretefre Posté 17 Mars 2006 Auteur Posté 17 Mars 2006 Pour la modif, je refais le même formulaire avec les infos récupérées avec une session que je mets en VALUE par défaut dans le formulaire de modification. Je ne suis peutetre pas très clair....
cretefre Posté 18 Mars 2006 Auteur Posté 18 Mars 2006 Bon, j'ai revu tout mon code, enlevé Htmlentities etc... Ne marche toujours pas... Je m'inscris...je vérifie que les données sont dans la table (elles le sont), quand je les rappelle depuis le site : nada ! Je retourne dans la table, je les réécris à la main, et là, ça marche ! Je ne vais quand même pas le faire à chaque inscription ! Sinon, je le fais par courrier à la poste ! Quelqu'un peut-il m'éclairer sur ce mystère ? Vaut il mieux du text ou du varchar dans la table ? On dirait qu'il y a un problème de "traduction" au moment de l'enregistrement. Merci d'éclairer le débutant !
captain_torche Posté 18 Mars 2006 Posté 18 Mars 2006 (modifié) Ce n'est pas ta requêtre d'INSERT qui ne fonctionne pas, apparemment. On pourrait avoir plus d'infos sur la construction de ta table ? Et sur la requête servant à l'identification ? Modifié 18 Mars 2006 par captain_torche
cretefre Posté 18 Mars 2006 Auteur Posté 18 Mars 2006 (modifié) Pour l'insertion ; else {mysql_connect("localhost","amitie_",""); //connection à la base amitie_ mysql_select_db("amitie_formulaire"); $reponse = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM membres WHERE pseudo='".$pseudo."'"); $donnees= mysql_fetch_array($reponse); mysql_close (); if ($donnees['nbre_entrees']!=0) {echo "Le pseudo choisi est déjà utilisé. Merci d'en trouver un autre"; echo'<a href="inscription_pseudo.php"> Retour</a>';} else {$pseudo=$_POST['pseudo']; $mot_de_passe=$_POST['mot_de_passe']; $mot_de_passe_verif=$_POST['mot_de_passe_verif']; $prenom=$_POST['prenom']; $nom=$_POST['nom']; $e_mail=$_POST['e_mail']; $adresse=htmlentities($_POST['adresse']); $ville=htmlentities($_POST['ville'],ENT_QUOTES); $arr=htmlentities($_POST['arr'],ENT_QUOTES); $dpt=htmlentities($_POST['dpt'],ENT_QUOTES); $tel=htmlentities($_POST['tel'],ENT_QUOTES); $instrument=htmlentities($_POST['instrument'],ENT_QUOTES); $autre=htmlentities($_POST['autre'],ENT_QUOTES); $niveau=htmlentities($_POST['niveau'],ENT_QUOTES); $parcours=htmlentities($_POST['parcours'],ENT_QUOTES); $parcours=nl2br($parcours); //enlever les br/ $age=htmlentities($_POST['age'],ENT_QUOTES); mysql_connect("localhost","amitie_",""); //connection à la base amitie_ mysql_select_db("amitie_formulaire"); mysql_query ("INSERT INTO membres (id,prenom,nom,e_mail,adresse,ville,arr,dpt,tel,instrument,autre,niveau,parcoursage,pseudo,mot_de_passe,mot_de_passe_verif ) VALUES ('','$prenom','$nom','$e_mail','$adresse','$ville', '$arr','$dpt','$tel','$instrument','$autre','$niveau','$parcours','$age','$pseudo','$mot_de_passe','$mot_de_passe_verif')"); mysql_close (); pour la récupération : mysql_connect("localhost","amitie_",""); //connection à la base amitie_ mysql_select_db("amitie_formulaire"); $reponse = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM membres WHERE pseudo='$pseudo' AND mot_de_passe='$mot_de_passe'"); $donnees = mysql_fetch_array($reponse); mysql_close(); if ($donnees['nbre_entrees']!=0) { echo"Bienvenue<strong> $pseudo</strong>";?><br/><?php echo"Voici les informations que vous avez fournies :"?><br/><br/><?php mysql_connect("localhost","amitie_",""); //connection à la base amitie_ mysql_select_db("amitie_formulaire"); $reponse_a = mysql_query("SELECT * FROM membres WHERE pseudo='".$pseudo."'"); while ($donnees_a = mysql_fetch_array($reponse_a)) {echo""; echo"<strong>Prénom : </strong>"; echo $donnees_a['prenom'] ;?><br/><?php echo "<strong>Nom : </strong>";echo $donnees_a['nom'];?><br/><?php echo "<strong>E_mail : </strong>"; echo $donnees_a['e_mail']; ?><br/><?php echo "<strong>Adresse : </strong>"; echo $donnees_a['adresse']; ?><br/><?php echo "<strong>Ville : </strong>"; echo $donnees_a['ville'];?><br/><?php echo "<strong>Arrondissement (pour Paris) : </strong>"; echo $donnees_a['arr']; ?><br/><?php echo "<strong>Département : </strong>"; echo $donnees_a['dpt']; ?><br/><?php echo "<strong>Téléphone : </strong>"; echo $donnees_a['tel']; ?><br/><?php echo "<strong>Instrument: </strong>"; echo $donnees_a['instrument'].$donnees_a['autre']; ?><br/><?php echo "<strong>Niveau : </strong>"; echo $donnees_a['niveau']; ?><br/><?php echo "<strong>Parcours : </strong>"; echo $donnees_a['parcours']; ?><br/><?php echo "<strong>Age: </strong>"; echo $donnees_a['age'];echo " ans"; ?><br/><?php echo "<strong>Pseudo : </strong>"; echo $donnees_a['pseudo']; ?><br/><?php echo "<strong>Mot de passe : </strong>"; echo $donnees_a['mot_de_passe']; base phpMyAdmin 2.6.4-pl2 17 champs text latin-swedish dont 1 id (INT, auto-increment) Voilà ! Merci EDIT : Merci d'utiliser le BB Code "CODEBOX" pour les sources. Modifié 20 Mars 2006 par Portekoi
cretefre Posté 20 Mars 2006 Auteur Posté 20 Mars 2006 Bonjour , Est-ce que quelqu'un pourrait m'aider, ça fait une semaine que j'ai le même problème. Je relis tout 10 fois par jour et je ne comprends pas. Merci beaucoup, beaucoup, beaucoup !
NorSeb Posté 20 Mars 2006 Posté 20 Mars 2006 Bonjour, Pour rechercher ce qui ne va pas tu peux déja essayer de vérifier que tes requètes sont correctes. Pour cela, tu peux utiliser la fonction mysql_error() de cette manière : $requete = "SELECT * FROM matable"; // Ta requete$resultat = mysql_query($requete);if ($resultat) {// traitement des donnees (mysql_fetch_array)}else {// Affichage de l'erreur - tu peux virer ca une fois débuggé pour que ca ne s'affiche plusecho "Pb sur la requete : ".mysql_error();}
cretefre Posté 20 Mars 2006 Auteur Posté 20 Mars 2006 Eh bien ,il n'y pas de pb sur la requête. mais la requête en question ne " reconnaît " pas la valeur recherchée dan s la table. Pourtant elle y est ! Si je l'affiche dans phpmyadmin et que je la retape à l'identique dans son champ, alors la requête fonctionne. En gros, pour le moment, il faut que je retape tous les pseudos des inscrits ! Je n'y comprends rien ! Continuez à m'aider, je vous en supplie !
cretefre Posté 20 Mars 2006 Auteur Posté 20 Mars 2006 Alors, je récacapipète : (pour voir le résultat : http://amitiesmusicales.com/entreemembres.htm vous pouvez tester ce que vous voulez, j'effacerai ensuite) En fait, tout semble fonctionner : pas de message d'erreur. On s'inscrit sans pb par contre, une fois inscrit, le script réagit comme si aucune inscription n'avait été faite. Pourtant, les infos ont correctement été prises en compte dans la table. Mais la requête ne les trouve pas. Si j'affiche la table et que je rentre au clavier le pseudo à l'identique, la requête me donne le résultat. (vous pouvez essayer avec pseudo=demo et mot de passe=demo, pour voir le résultat quand ça fonctionne (je l'ai ressaisi au clavier celui-là). Si vous essayez avec autre chose, vous constaterez que vous n'êtes pas reconnu. Merci pour toute aide !
NorSeb Posté 20 Mars 2006 Posté 20 Mars 2006 Bien, je vais aussi essayer d'être clair : Peux-tu nous donner un exemple concret ? Je voudrais : - Un login et un mot de passe que tu as rentré et qui ne marche pas ; - l'enregistrement correspondant dans ta table - savoir si tu as enregistré ca avec les htmlentities et savoir si, pour retrouver le login dans la table, tu utilise aussi cette fonction Merci
Portekoi Posté 20 Mars 2006 Posté 20 Mars 2006 Et l'affichage de la requête telle qu'elle est dans le script ( echo $requete; )
cretefre Posté 20 Mars 2006 Auteur Posté 20 Mars 2006 Alors : un pseudo et mot de passe qui ne marchent pas : "test" et "test" J'ai enlevé les htmlentities pour pseudo et mot de passe C'est le code pour afficher les infos de la base dans la base. $reponse2 = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM membres WHERE pseudo='$pseudo2' AND mot_de_passe='$mot_de_passe2'") or die(mysql_error()); //Si il existe une entree de la table qui correspond aux pseudos saisis $donnees2 = mysql_fetch_array($reponse2); mysql_close(); if ($donnees2['nbre_entrees']!=0) { echo"Bienvenue<strong> $pseudo2</strong>";?><br/><?php echo"Voici les informations que vous avez fournies :"?><br/><br/><?php mysql_connect("localhost","amitie_",""); //connection à la base amitie_ mysql_select_db("amitie_formulaire"); $reponse_a = mysql_query("SELECT * FROM membres WHERE pseudo='$pseudo2'"); //on va chercher toutes les données dans la table while ($donnees_a = mysql_fetch_array($reponse_a)) {echo""; echo"<strong>Prénom Le code d'enregsitrement dans la table $pseudo1=$_POST['pseudo1']; //créatiobn des variables à partir du formulaire $mot_de_passe1=$_POST['mot_de_passe1']; $reponse1 = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM membres WHERE pseudo='$pseudo1' AND mot_de_passe='$mot_de_passe1'") or die(mysql_error()); //on vérifie que le pseudo n'existe pas encore $donnees1 = mysql_fetch_array($reponse1); mysql_close (); if ($donnees1['nbre_entrees']!=0) {echo "Le pseudo choisi est déjà utilisé. Merci d'en trouver un autre"; //s'il existe, retour à l'inscription echo'<a href="inscription_pseudo.php"> Retour</a>';}//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- else { echo $pseudo1; $mot_de_passe_verif=$_POST['mot_de_passe_verif']; //on crée toutes les autres variables $prenom=$_POST['prenom']; $nom=$_POST['nom']; $e_mail=$_POST['e_mail']; $adresse=htmlentities($_POST['adresse']); $ville=htmlentities($_POST['ville'],ENT_QUOTES); $arr=htmlentities($_POST['arr'],ENT_QUOTES); $dpt=htmlentities($_POST['dpt'],ENT_QUOTES); $tel=htmlentities($_POST['tel'],ENT_QUOTES); $instrument=htmlentities($_POST['instrument'],ENT_QUOTES); $autre=htmlentities($_POST['autre'],ENT_QUOTES); $niveau=htmlentities($_POST['niveau'],ENT_QUOTES); $parcours=htmlentities($_POST['parcours'],ENT_QUOTES); $parcours=nl2br($parcours); //enlever les br/ $age=htmlentities($_POST['age'],ENT_QUOTES); mysql_connect("localhost","amitie_",""); //connection à la base amitie_ et insertion des variables dans la table mysql_select_db("amitie_formulaire"); mysql_query ("INSERT INTO membres VALUES ('','$prenom','$nom','$e_mail','$adresse','$ville', '$arr','$dpt','$tel','$instrument','$autre','$niveau','$parcours','$age','$pseudo1','$mot_de_passe1', '$mot_de_passe_verif')"); mysql_close (); Comment vous donner l'enregistrement dans la table ? champs en varchar 30.
captain_torche Posté 21 Mars 2006 Posté 21 Mars 2006 Je vois déjà plsusieurs erreurs de conception. D'une part, lorsque tu recherches si le pseudo existe déjà, ta requête est celle-ci SELECT COUNT(*) AS nbre_entrees FROM membres WHERE pseudo='$pseudo1' AND mot_de_passe='$mot_de_passe1' Cette requête ne te retournera une réponse, que s'il existe un enregistrement avec le même login ET le même mot de passe. Pour faire ce que tu recherches, vérifie juste l'existence du login. Sinon, il n'est pas nécessaire d'enregistrer le mot de passe de vérification (vu qu'il est censé être le même que le mot de passe normal). Le principe est juste de tester l'égalité avant d'enregistrer en base : if($_POST['mot_de_passe'] === $_POST['mot_de_passe_verif']) {// suite du code} Et, pour finir, je te conseillerai plutôt de passer le HTMLentities sur les champs à l'affichage, et non à l'enregistrement. Tout simplement parce que si tu veux permettre la modification des champs, le HTMLentities compliquerait grandement la chose. Pour donner la structure de la table, tu as une option 'exporter', dans PHPMyAdmin.
NorSeb Posté 21 Mars 2006 Posté 21 Mars 2006 Je crois que je viens de voir un truc Ta requète est très jolie mais tu ne risque pas de voir quoique ce soit s'afficher : SELECT COUNT(*) AS nbre_entrees FROM membres Lance la sous phpmyadmin et donne nous le résultat pour voir
captain_torche Posté 21 Mars 2006 Posté 21 Mars 2006 Hé, faut que je me réveille le matin, moi ! Deux jours de suite que je laisse passer des erreurs comme ça
cretefre Posté 21 Mars 2006 Auteur Posté 21 Mars 2006 ça m'affiche 20 . je n'ai pas vu le pb... elle est où mon erreur ? Sinon, quand j'enlève la session, ça marche. Est-ce que ça ne serait pas mon formulaire qui pose pb : <fieldset class="pseudo"> <label><strong>Pseudo</strong><input type="text" name="pseudo1" value=" <?php echo $_SESSION['pseudo']; ?>"/><br/> <label><strong>Mot de passe</strong><input type="password" name="mot_de_passe1" value="<?php echo $_SESSION['mot_de_passe']; ?>"/><br/> <label><strong>Mot de passe/vérification</strong><input type="password" name="mot_de_passe_verif1" value="<?php echo $_SESSION['mot_de_passe']; ?>"/><br/> </fieldset><br/> <fieldset class="etat"> <label>Prénom<input type="text" name="prenom"/><br/> <label>Nom<input type="text" name="nom"/><br/> ç'est peutêtre pas très orthodoxe... Merci pour l'aide précieuse !
cretefre Posté 21 Mars 2006 Auteur Posté 21 Mars 2006 J'ai trouvé ! Il y avait ça : value=" <?php echo $_SESSION['prenoma']; ?>"/> au lieu de ça value="<?php echo $_SESSION['prenoma']; ?>"/> c'est bête, hein ? petite question subsidiaire : Peut-on donner une value par défaut dans un formulaire Select ou radio Merci en tous cas
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant