problème de connection a la bdd avec un cookie

Petit nouveau ! | 7 Messages

12 janv. 2007, 19:26

bonjour

meilleurs voeux deja pour commencer^^
bon pour vous expliquer mon probleme rapidement
j'ai crée un formulaire qui quand il est rempli me génère une signature image
(c est pour un jeu)
les infos du formulaire sont envoyées sur une bdd
j'utilise par la meme occasion un cookie pseudo
l'idée est de récupérer a partir du cookie pseudo les infos de l intéressé pour compléter automatiquement le formulaire.

voici pour le code
//conection bdd
mysql_connect("localhost", "*****", "******");
mysql_select_db("*******");

//recup des infos via le cookie
$recup = mysql_query("SELECT * FROM signature_wow WHERE 'pseudo' = '".$_COOKIE['pseudo']."'")or die(mysql_error()); // Requête SQL

?>
alors le soucis (et oui j'en ai un...)

c est que lorsque je fais
Pseudo : <input type="text" name="pseudo" value="<?php echo $recup['pseudo'];?>"/>
rien ne se passe et j ai pas d erreur qui s affiche
j suis vraiment débutant débutant
si vous donnez une explication merci de bien détailler svp :wink:

d'avance merci pour votre aide

Eléphant du PHP | 445 Messages

12 janv. 2007, 19:28

As tu pensé au session_start() ?

Il est indispensable pour les cookies.
LLDC
Ulti

Petit nouveau ! | 7 Messages

12 janv. 2007, 19:30

Ah non
je ne connaissais pas je m'en vais me documenter de ce pas :roll:
merci

Eléphant du PHP | 445 Messages

12 janv. 2007, 19:37

Oups, je dis vraiment n'importe quoi moi... Désolé ... ^^'

Le problème vient de ta requête

Je ne vois pas de mysql_fetch_array(); ;)
LLDC
Ulti

ViPHP
ViPHP | 1961 Messages

12 janv. 2007, 19:38

Bonjour,

Je pense que ton PB vient du fait que tu tentes de récupérer des valeurs à partir d'une ressource.

Quand tu fais ceci
$recup = mysql_query("SELECT * FROM signature_wow WHERE 'pseudo' = '".$_COOKIE['pseudo']."'")or die(mysql_error()); // Requête SQL
Dans $result tu as une ressource, tu dois la transformer pour pouvoir récupérer tes valeurs.
Ajoute cette ligne et ça devrait aller mieux, en remplaçant les noms par les tiens.
$pseudo = mysql_result($result, 0, 'pseudo');
echo $pseudo;
Tu peux aussi utiliser les autres fonctions PHP pour récupérer tes résultats comme mysql_fetch_array(), mysql_fetch_assoc(), ...
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

12 janv. 2007, 21:17

Tu peux aussi utiliser les autres fonctions PHP pour récupérer tes résultats comme [...]
Oui, oublie tout de suite mysql_result() et par pitié n'utilisez pas mysql_fetch_array() ou mysql_fetch_object() non plus. Utilisez mysql_fetch_assoc(), c'est de très loin la solution qui rapporte le moins d'ennuis:
$sql = 'SELECT * FROM table WHERE id = ' . $id;
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
Et n'oublie pas d'utiliser mysql_real_escape_string() sur $_COOKIE['pseudo'] si tu ne veux pas que ton site soit piraté. (Google "SQL injection")

ViPHP
ViPHP | 1961 Messages

12 janv. 2007, 21:22

Re,
Oui, oublie tout de suite mysql_result() et par pitié n'utilisez pas mysql_fetch_array() ou mysql_fetch_object() non plus. Utilisez mysql_fetch_assoc(), c'est de très loin la solution qui rapporte le moins d'ennuis:
Peut-on avoir plus de précisions sur les raisons de ce conseil ?
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Petit nouveau ! | 7 Messages

12 janv. 2007, 21:34

houlla j suis perdu la j dois dire
j vais attaquer avec mysql_fetch_assoc() (essayer de comprendre comment ca fonctionne déjà)
puis
mysql_real_escape_string()

si vraiment j'y arrive pas je reposterais
en tout cas merci de votre aide :wink:

Petit nouveau ! | 7 Messages

13 janv. 2007, 02:09

bon j ai bien regardé et j'suis largué je comprends pas trop la(malgrés l'exemple..)
j'ai essayé d'adapter mon code mais j'ai un tas d'erreur ...(j'ai donc remis comme c'etait pour l'instant)
:roll: :oops: :oops: :oops:

ViPHP
ViPHP | 1961 Messages

13 janv. 2007, 02:46

Bonsoir,

Cette ligne ne peut pas fonctionner
$recup = mysql_query("SELECT * FROM signature_wow WHERE 'pseudo' = '".$_COOKIE['pseudo']."'")or die(mysql_error()); // Requête SQL
Les caractères qui entourent pseudo
WHERE 'pseudo' =
ne doivent pas être de apostrophes mais des accents graves (Alt Gr + 7 dans clavier français). Je te déconseille fortement leur utilisation, c'est pas du SQL standard.

Tu ne testes pas, ni l'existence du cookie, ni la valeur (si elle existe).
Ceci serait plus proche
$pseudo_cookie = isset($_COOKIE['pseudo']) ? mysql_real_escape_string($_COOKIE['pseudo'] ) : '';
// On teste s'il contient une valeur, message et arrêt sinon
if(empty($pseudo_cookie)) die('Le cookie n\'est pas initialis&eacute;!');
// On constrit la requête
$qry = "SELECT * FROM signature_wow WHERE pseudo = '".$pseudo_cookie ."'";
// On exécute la requête
if(false === ($result = mysql_query($qry))){
   die('ERR_SQL :<br />'. $qry . '<br />' . mysql_error());
}
// On teste si ce pseudo existe
if(!mysql_num_rows($result)){
   die('Le pseudo "'. $_COOKIE['pseudo'].'" n\'a pas &eacute;t&eacute; trouv&eacute;');
}
// On récupère les résultats
$user_infos = mysql_fetch_assoc($result);
// Là on traite les résultats. Exemple : Affichage du id et du pseudo
echo 'Bonjour '. $user_infos['pseudo'].', votre identifiant est : '.$user_infos['id'];
Ceci n'est qu'un exemple, tu devras l'adapter à tes besoins.
Si tu as encore des soucis, reviens nous voir avec ton nouveau code (entre les balises [ php] et [/php])
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Petit nouveau ! | 7 Messages

13 janv. 2007, 17:16

Merci beaucoup le script fonctionne à merveille
j ai réussi à modifier pour que mon formulaire se remplisse automatiquement
il me reste a plancher sur la suite du prôblème
c'est les menus déroulants...
je sais que pour choisir le choix par défaut il faut mettre

Code : Tout sélectionner

<option value="choix1" selected="selected">Choix 1</option>
à partir de la je suppose qu'il faut se tourner vers les conditions (ou peut etre une fonction...)

je planche la dessus si quelqu un a une idée :wink:

mon formulaire se présente comme ca
<form method="post" action="******.php">
<p>
Pseudo : <input type="text" name="pseudo" value="<?php echo $user_infos['pseudo'];?>"/><br />
Race : <select name="race">
    <option value="Elfe de la nuit">Elfe de la nuit</option>
    <option value="Gnome">Gnome</option>
    <option value="Humain">Humain</option>
    <option value="Mort-Vivant">Mort-Vivant</option>
    <option value="Nain">Nain</option>
    <option value="Orc">Orc</option>
    <option value="Thauren">Thauren</option>
    <option value="Troll">Troll</option>
</select>

j arrive a faire des petites conditions par contre je ne sais pas comment je peux comparer ma bdd au différents choix de mon déroulant
Modifié en dernier par datura le 13 janv. 2007, 17:54, modifié 1 fois.

ViPHP
ViPHP | 1961 Messages

13 janv. 2007, 17:46

Bonjour,

Ton code pour le formulaire ne fonctionnera pas.

Tu mets des balises PHP (<?php, ?>) mais ce que tu écris c'est du HTML.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Petit nouveau ! | 7 Messages

13 janv. 2007, 17:53

j'ai pas fais gaffe je l' ai rajouté quand j ai écris le post il n'existe pas sur ma page :wink:

PS je l'ai édité pour éviter les erreurs

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 janv. 2007, 18:14

La FAQ :)
(si c'est bien de ça que tu parles :-k)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 7 Messages

13 janv. 2007, 19:17

vi merci c est exactement ca :wink: