Logo du forum
 

Forum TT-Hardware

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [PHP] » Resultat d'un requete vide
Login Mot de passe

1 visiteurs sur ce topic (0 membre(s), 1 invité(s) )


Auteur
Sujet : Resultat d'un requete vide
Keanu
Sage
Membre # 4886

 Avatar du membre
Lieu : Namur

Messages :
1704 (0.77 par jour)




Message du 03-12-2007 @ 9:41   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Salut,

je suis entrain de préparer une fonction en php qui permet de taper dans un champ un critere de recherche et lorsque l'on appuie sur le bouton, faire une recherche sur une BD.

Mais le resultat qui me revient est toujours vide...

je rentre bien dans le if, mes variable $motcle et $sql sont remplient mais ma variable $resultat reste vide et donc, je ne rentre pas dans la boucle... Lors de l'execution, pas d'erreur, juste rien qui s'affiche.

Vous avec une idée où je me suis planté ?

Merci


voici le code :

Code :


<?php

if (isset($_GET['motcle']))
{

$motcle = $_GET['motcle'];

$sql = "SELECT * FROM 'clients' WHERE INSTR(nom,$motcle) OR INSTR(prenom,$motcle)";

$resultat = mysql_query ($sql);


while ($clients = @mysql_fetch_array ($resultat))
{
   echo "<tr>";
   echo "<td>" . $clients['Id'] . "<td>";
   echo "<td>" . $clients['nom'] . "<td>";
   echo "<td>" . $clients['prenom'] . "<td>";
   echo "<tr>";
}
   
}


   
?>


----------
Laptop : Dell Inspiron 8200 P4M 1.6 - 512Mo - 60Go - DVD+-RW - Ubuntu ---
Desktop : Amd Sempron 3000+ - 1Go - 160Go - DVD+-RW - Win XP --- Mess with the best or die like the rest
- Haut de page -
Soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
12731 (5.86 par jour)


Score :

Message du 03-12-2007 @ 10:02   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Normal, vu que tu utilises la fonction INSTR dans ta requête, tu dois plutôt construire ta requête de la façon suivante:

Code :


WHERE INSTR(champ, mot_cle) > 0



ça devrait fonctionner
----------
Core 2 Duo E6750 2,66 GHz | Asrock Conroe 1333 D667 | 2 Go DDR-II 667 | GeForce 8800 GT 512 Mo | Acer X192W (qui marche bien, sisi spook' :p )
Dell Inspiron 6400 | Core2Duo T5500 | 1 Go DDR-II | ATI X1300 128 Mo

Enfin!! 300 au bowling sur Wii Sports :classe:
- Haut de page -
Keanu
Sage
Membre # 4886

 Avatar du membre
Lieu : Namur

Messages :
1704 (0.77 par jour)




Message du 03-12-2007 @ 10:16   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

ça n'a pas l'air d'être ça...

je fais la recherche sur des caractères, je sais pas si ça change qlq chose...

Merci

----------
Laptop : Dell Inspiron 8200 P4M 1.6 - 512Mo - 60Go - DVD+-RW - Ubuntu ---
Desktop : Amd Sempron 3000+ - 1Go - 160Go - DVD+-RW - Win XP --- Mess with the best or die like the rest
- Haut de page -
Soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
12731 (5.86 par jour)


Score :

Message du 03-12-2007 @ 10:31   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

par contre, fais gaffe à ton code, y'a une jolie faille SQL injection puisque tu utilises le $_GET["motcle"] tel quel dans ta requête... utilises mysql_real_escape_string pour éviter tout problème!
Le fait de rechercher des caractères ne doit rien changer au résultat de ta requête. As-tu essayé d'afficher ta requête et de l'exécuter telle quelle dans MySQL pour vérifier si y'a pas d'erreur?
----------
Core 2 Duo E6750 2,66 GHz | Asrock Conroe 1333 D667 | 2 Go DDR-II 667 | GeForce 8800 GT 512 Mo | Acer X192W (qui marche bien, sisi spook' :p )
Dell Inspiron 6400 | Core2Duo T5500 | 1 Go DDR-II | ATI X1300 128 Mo

Enfin!! 300 au bowling sur Wii Sports :classe:
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 03-12-2007 @ 10:53   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

le probleme est plus dans la construction de ta requete
deja, encadre la chaine de caracteres par des apostophes et pas par des guillemets
insere les variables en fermant et ouvrant la chaine de caracteres
normalement pas besoin du test "> 0", la logique veut que tout ce qui est different de 0 est 1

moi je mettrais ca comme requete :
Code :


$sql = 'SELECT * FROM clients WHERE INSTR(nom,"'.$motcle.'") OR INSTR(prenom,"'.$motcle.'")';



maintenant, je proposerais aussi ca a la place :
Code :


$sql = 'SELECT * FROM clients WHERE nom LIKE "%'.$motcle.'%" OR prenom LIKE "%'.$motcle.'%"';



et il est imperatif, comme l'indique Soulmanto, d'utiliser 'mysql_real_escape_string' pour proteger ta requete sur tout ce qui vient du POST ou du GET

[message édité le 03-12-2007 @ 10:56 Par B2000]
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Keanu
Sage
Membre # 4886

 Avatar du membre
Lieu : Namur

Messages :
1704 (0.77 par jour)




Message du 03-12-2007 @ 10:55   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

c'est grave comme faille ? C'est un faille de sécurité ?
l'appli sera pour utiliser dans un intranet et non sur internet.

Je vais essayer la requete dans mysql

merci

----------
Laptop : Dell Inspiron 8200 P4M 1.6 - 512Mo - 60Go - DVD+-RW - Ubuntu ---
Desktop : Amd Sempron 3000+ - 1Go - 160Go - DVD+-RW - Win XP --- Mess with the best or die like the rest
- Haut de page -
Soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
12731 (5.86 par jour)


Score :

Message du 03-12-2007 @ 11:04   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

oui, c'est une faille de sécurité, et si elle est exploitée comme il faut, ça peut faire très mal...
----------
Core 2 Duo E6750 2,66 GHz | Asrock Conroe 1333 D667 | 2 Go DDR-II 667 | GeForce 8800 GT 512 Mo | Acer X192W (qui marche bien, sisi spook' :p )
Dell Inspiron 6400 | Core2Duo T5500 | 1 Go DDR-II | ATI X1300 128 Mo

Enfin!! 300 au bowling sur Wii Sports :classe:
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 03-12-2007 @ 11:04   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

ca peut etre grave en effet... ici ca n'aurait pas beaucoup d'incidence mais par exemple, si tu utilisais cette requete pour identifier un utilisateur (login/password) on pourrait passer au travers cette authentification en un rien de temps

le risque est que l'on puisse injecter dans la requete des caracteres comme l'apostrophe ou la guillemets ou encore un bout de requete qui detournerait alors ta propre requete, exemple en injectant ceci :
Code :

1) OR 1 OR (


ta requete deviendrait a ton insue :
Code :


$sql = "SELECT * FROM 'clients' WHERE INSTR(nom,1) OR 1 OR ($motcle) OR INSTR(prenom,$motcle)";


et retournerait la liste totale de tes clients

[edit]
en relisant je viens de me rendre compte qu'en plus, sans borner les variables par des apostrophes ou des guillemets, y a encore plus de risque (comme le montre l'injection ci dessus)
[/edit]

[message édité le 03-12-2007 @ 11:07 Par B2000]
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Keanu
Sage
Membre # 4886

 Avatar du membre
Lieu : Namur

Messages :
1704 (0.77 par jour)




Message du 03-12-2007 @ 11:08   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

merci pour toutes ces infos !!!
----------
Laptop : Dell Inspiron 8200 P4M 1.6 - 512Mo - 60Go - DVD+-RW - Ubuntu ---
Desktop : Amd Sempron 3000+ - 1Go - 160Go - DVD+-RW - Win XP --- Mess with the best or die like the rest
- Haut de page -
Keanu
Sage
Membre # 4886

 Avatar du membre
Lieu : Namur

Messages :
1704 (0.77 par jour)




Message du 03-12-2007 @ 11:30   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

j'ai utilisé la syntaxe avec like %

mais j'ai fais une erreur de bleu... je me suis trompé dans le nom de ma variable dans la table, au lieu de nom, c'etait NomC...

encore merci


----------
Laptop : Dell Inspiron 8200 P4M 1.6 - 512Mo - 60Go - DVD+-RW - Ubuntu ---
Desktop : Amd Sempron 3000+ - 1Go - 160Go - DVD+-RW - Win XP --- Mess with the best or die like the rest
- Haut de page -
Soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
12731 (5.86 par jour)


Score :

Message du 03-12-2007 @ 11:42   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Si t'as pas eu de message d'erreur pour ça, c'est que t'as pas bien configuré ton environnement de développement! il faut afficher tous les messages d'erreur et warnings quand tu développes, ça aide à voir plus facilement d'où viennent les merdes! ;)

----------
Core 2 Duo E6750 2,66 GHz | Asrock Conroe 1333 D667 | 2 Go DDR-II 667 | GeForce 8800 GT 512 Mo | Acer X192W (qui marche bien, sisi spook' :p )
Dell Inspiron 6400 | Core2Duo T5500 | 1 Go DDR-II | ATI X1300 128 Mo

Enfin!! 300 au bowling sur Wii Sports :classe:
- Haut de page -
Keanu
Sage
Membre # 4886

 Avatar du membre
Lieu : Namur

Messages :
1704 (0.77 par jour)




Message du 03-12-2007 @ 11:56   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

pour le développement, j'utilise easyphp configuré par defaut

je m'en suis redu compte lorsque j'ai executé ma requete dans mysql comme tu me l'as conseillé plus haut... et là, j'ai eu un message d'erreur.

Merci
----------
Laptop : Dell Inspiron 8200 P4M 1.6 - 512Mo - 60Go - DVD+-RW - Ubuntu ---
Desktop : Amd Sempron 3000+ - 1Go - 160Go - DVD+-RW - Win XP --- Mess with the best or die like the rest
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 03-12-2007 @ 12:19   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

pour les erreurs, modifie ton php.ini (normalement dans c:\windows) en modifiant l'option "error_reporting" comme ceci :
Code :


error_reporting = E_ALL



puis relance le service httpd/apache
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Chani
Vétéran
Membre # 9009

 Avatar du membre
Lieu : METZ

Messages :
3667 (1.9 par jour)


Score :

Message du 03-12-2007 @ 20:01   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Deux trois conseils comme ça :

- Utilise Wamp Server en dernière version (PHP5 et Mysql 5 ;))
- Utilise les requête préparées afin d'être protégé complétement pas les injections (uniquement avec php5)
- utilise les PDO de connexion et dialogue avec les bdd
- gére tes erreurs, afin de pouvoir les rediriger vers un journal de log une fois l'appli déployée

;)
----------
Mon site perso - le site de notre jeu (en développement) - Le forum du jeu
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2006

Valid XHTML 1.0 Transitional

Page générée en 0.109 secondes