problème requête Sql

Eléphant du PHP | 417 Messages

24 juil. 2011, 18:32

bonjour à vous tous,

j'ai un problème avec ma requête sql

topic_id c'est une variable passé dans Url quand je change l'id d'un topic par une chaine de caractère exemple 'lklmkm' il m'affiche comme résultats

Champ 'lklmkm' inconnu dans where clause



$rechercheId= mysql_query("SELECT * FROM topic WHERE id_topic='".addslashes($_GET['topic_id'])."'") or die (mysql_error());
$nbR = mysql_num_rows($rechercheId);
if ($nbR == 0)
{
echo ' Non ';
}
else echo 'Yes';

*******************************************

Deuxième question :

comment faire pour empêcher les Script de redirection dans un commentaire mais autoriser les balises Html

Merci d'avance

Mammouth du PHP | 558 Messages

24 juil. 2011, 18:53

"Champ 'lklmkm' inconnu dans where clause" verifie l'orthographe du nom du champs.

2ème question fais une condition en interdisant par exemple le mot script ou metat refresh ainsi que tous les nom de fonction permettant la redirection etc...

Eléphant du PHP | 417 Messages

24 juil. 2011, 19:17

"Champ 'lklmkm' inconnu dans where clause" verifie l'orthographe du nom du champs.

2ème question fais une condition en interdisant par exemple le mot script ou metat refresh ainsi que tous les nom de fonction permettant la redirection etc...

pour ta première réponse le nom du champs est correct sauf que quand je met par exemple 100090909090 des chiffres ça marche vu que dans champs id_topic y a que des chiffres mais quand il s'agit d'une chaines de caractères il m'affiche le msg d'erreur "Champ 'lklmkm' inconnu dans where clause" donc ça vien de pas de nom du champ

Eléphanteau du PHP | 25 Messages

24 juil. 2011, 19:33

Bonjour,

Le champ id_topic de ta table topic est de quel type ?

si il est de type int par exemple il n'accepte que les chiffres, si tu lui demandes des lettres, il ne peut rien te retourner

Eléphant du PHP | 417 Messages

24 juil. 2011, 20:33

Bonjour,

Le champ id_topic de ta table topic est de quel type ?

si il est de type int par exemple il n'accepte que les chiffres, si tu lui demandes des lettres, il ne peut rien te retourner

oui Leozoe le champ id_topic c'est de type int et il accepte que les chiffres et c'est bien ça le problème psk ce champ est AUTO_INCREMENT donc je pourrai pas le mettre en varchar par exemple

moi le but de tous ça si que quand un utilisateur essayé de taper une chaine de caractères a la place de num de topic dans l'url s'affiche un msg d'erreur que je vais écrire moi et pas le msg de php :s

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2011, 20:56

Il te faut tester la variable avec is_int() ou is_numeric() avant de l'utiliser ... si c'est un nombre tu exécutes ton code, sinon, tu mets un message d'erreur à la place :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 417 Messages

24 juil. 2011, 21:12

Il te faut tester la variable avec is_int() ou is_numeric() avant de l'utiliser ... si c'est un nombre tu exécutes ton code, sinon, tu mets un message d'erreur à la place :)
ah donc je fait un truc comme ça

if (is_int(addslashes($_GET['topic_id'])) )
{
le script
}
else
{
message d'erreur
}

c'est comme ça ?

Edit : c'est bien ça :D

sauf que j'ai un problem qd je met a la place de la chaine des caractères dans lurl topic.php?topic_id=1* ça m'affiche ce message d'erreur

eurreu de syntaxe dans la ligne 1 :s

Eléphanteau du PHP | 25 Messages

24 juil. 2011, 21:52

pourquoi veux tu mettre une valeur non numérique dans ton url, je ne comprends pas
et pour protéger ta variable $_GET , un intval() est plus approprié je pense.

Eléphant du PHP | 417 Messages

24 juil. 2011, 22:08

pourquoi veux tu mettre une valeur non numérique dans ton url, je ne comprends pas
et pour protéger ta variable $_GET , un intval() est plus approprié je pense.

si pas que je veux passer une valeur non numérique dans l'url mais juste pour éviter qd un utilisateur s'amuse a changer les valeur dans lurl :)

merci pour intval() je vais essayé de voir a quoi ça sert :)

Eléphanteau du PHP | 25 Messages

25 juil. 2011, 01:14

intval() protège ta variable $_GET
intval() veut dire que ta variable $_GET ainsi protégée ne peut contenir que des valeurs numériques entières et pas de caractères
donc je ne vois pas l'utilité d'afficher un message, puisque si il insère des caractères ou même une requête pour te hacker, ils seront détuits par intval qui renverra 0
m'enfin c'est a toi de voir :wink:

Eléphant du PHP | 417 Messages

27 juil. 2011, 19:47

intval() protège ta variable $_GET
intval() veut dire que ta variable $_GET ainsi protégée ne peut contenir que des valeurs numériques entières et pas de caractères
donc je ne vois pas l'utilité d'afficher un message, puisque si il insère des caractères ou même une requête pour te hacker, ils seront détuits par intval qui renverra 0
m'enfin c'est a toi de voir :wink:

ah merci c'est ce que j'ai fait ^^ au début je connais pas a quoi sert la function intval :) merci encore