problème de connection a la bdd avec un cookie

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 connection a la bdd avec un cookie

par Hubert Roksor » 13 janv. 2007, 19:50

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 ?
C'est simple, concernant mysql_fetch_array() la fonction est strictement inférieure à mysql_fetch_assoc() si l'on a pas besoin de la double indexation des données (et je ne connais aucune configuration qui pourrait en faire usage). Quant à mysql_fetch_object() elle force les utilisateurs à apprendre comment fonctionne les objets, et d'après ce que j'ai pu voir ici ça augmente les chances de faire des erreurs. À noter que l'accès à un membre de classe est marginalement plus lent qu'à une valeur dans un tableau.

Edit: j'ai oublié mysql_result(). La fonction n'est pas très explicite, ne fonctionne probablement pas avec mysql_unbuffered_query(), est plus lente que l'accès à un tableau et n'existe pas sous MySQLi.

par datura » 13 janv. 2007, 19:17

vi merci c est exactement ca :wink:

par Truc » 13 janv. 2007, 18:14

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

par datura » 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

par Ajoloca » 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.

par datura » 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

par Ajoloca » 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])

par datura » 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:

par datura » 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:

par Ajoloca » 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 ?

par Hubert Roksor » 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")

par Ajoloca » 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(), ...

par Ultim4T0m » 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(); ;)

par datura » 12 janv. 2007, 19:30

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

par Ultim4T0m » 12 janv. 2007, 19:28

As tu pensé au session_start() ?

Il est indispensable pour les cookies.