Aller au contenu

Sujets conseillés

Posté

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 ! :wacko:

Posté

Bonjour,

Tu peux nous donner un exemple de requète ? et, tant qu'on y est :P un exemple de données ?

Posté

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.

: :wacko:

Posté (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é par Mikiman
Posté

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 ?

Posté (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);

...

:unsure:

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é par cretefre
Posté

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.... :blink:

Posté

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 !

Posté (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é par captain_torche
Posté (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,parcours
age,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é par Portekoi
Posté

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 !

Posté

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 plus
echo "Pb sur la requete : ".mysql_error();
}

Posté

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 !

Posté

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 !

Posté

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 B)

Posté

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.

Posté

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.

Posté

Je crois que je viens de voir un truc :blink::blink:

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 :hypocrite:

Posté

ç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 !

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...