Logo du forum
 

Forum TTH-News

| 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

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


Auteur
Sujet : Resultat d'un requete vide
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 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 : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
13839 (2.53 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
----------
Desktop : Core i7 2600 | Gigabyte GA-Z68MA-D2H-B3 | 8 Go DDR3 PC10600 | SSD UltraPlus 128 Go / HDD 500 Go / 1 To | Sapphire R9 280 3 Go | CoolerMaster RC690 | Windows 7
Asus MemoPad 10

Stromille powered !!!
- Haut de page -
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 03-12-2007 @ 10:16   Site personnel   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 : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
13839 (2.53 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?
----------
Desktop : Core i7 2600 | Gigabyte GA-Z68MA-D2H-B3 | 8 Go DDR3 PC10600 | SSD UltraPlus 128 Go / HDD 500 Go / 1 To | Sapphire R9 280 3 Go | CoolerMaster RC690 | Windows 7
Asus MemoPad 10

Stromille powered !!!
- Haut de page -
B2000
Administrateur
Membre # 185

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

Messages :
9757 (1.56 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]
----------
Intel i5 2500K | Asus P8P67 Pro Rev3.1 | 2x Corsair Vengeance 4Go DDR3-12800 CAS 8 | Sandisk Ultra Plus 256Go | Sony AD-7280S | Logitech QuickCam Pro 5000 | Microsoft Natural Ergonomic 4000 | Logitech Cordless Optical Mouse | 2x Iiyama ProLite E2472HDD

Lenovo T430s : i5 3320m / 2x8Go / SAMSUNG 840 Pro 512Go / station Mini Dock serie 3 / LG 34um95 3440x1440 34" / SAMSUNG SyncMaster SA450 1920x1200 24"/ Clavier et souris Lenovo Ultraslim sans fil

Nexus 6 64Go Android 6.0.1 | Garmin Forerunner 305 | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL neufbox de SFR

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
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 03-12-2007 @ 10:55   Site personnel   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 : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
13839 (2.53 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...
----------
Desktop : Core i7 2600 | Gigabyte GA-Z68MA-D2H-B3 | 8 Go DDR3 PC10600 | SSD UltraPlus 128 Go / HDD 500 Go / 1 To | Sapphire R9 280 3 Go | CoolerMaster RC690 | Windows 7
Asus MemoPad 10

Stromille powered !!!
- Haut de page -
B2000
Administrateur
Membre # 185

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

Messages :
9757 (1.56 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]
----------
Intel i5 2500K | Asus P8P67 Pro Rev3.1 | 2x Corsair Vengeance 4Go DDR3-12800 CAS 8 | Sandisk Ultra Plus 256Go | Sony AD-7280S | Logitech QuickCam Pro 5000 | Microsoft Natural Ergonomic 4000 | Logitech Cordless Optical Mouse | 2x Iiyama ProLite E2472HDD

Lenovo T430s : i5 3320m / 2x8Go / SAMSUNG 840 Pro 512Go / station Mini Dock serie 3 / LG 34um95 3440x1440 34" / SAMSUNG SyncMaster SA450 1920x1200 24"/ Clavier et souris Lenovo Ultraslim sans fil

Nexus 6 64Go Android 6.0.1 | Garmin Forerunner 305 | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL neufbox de SFR

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
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 03-12-2007 @ 11:08   Site personnel   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 : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 03-12-2007 @ 11:30   Site personnel   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 : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
13839 (2.53 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! ;)

----------
Desktop : Core i7 2600 | Gigabyte GA-Z68MA-D2H-B3 | 8 Go DDR3 PC10600 | SSD UltraPlus 128 Go / HDD 500 Go / 1 To | Sapphire R9 280 3 Go | CoolerMaster RC690 | Windows 7
Asus MemoPad 10

Stromille powered !!!
- Haut de page -
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 03-12-2007 @ 11:56   Site personnel   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 : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
B2000
Administrateur
Membre # 185

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

Messages :
9757 (1.56 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
----------
Intel i5 2500K | Asus P8P67 Pro Rev3.1 | 2x Corsair Vengeance 4Go DDR3-12800 CAS 8 | Sandisk Ultra Plus 256Go | Sony AD-7280S | Logitech QuickCam Pro 5000 | Microsoft Natural Ergonomic 4000 | Logitech Cordless Optical Mouse | 2x Iiyama ProLite E2472HDD

Lenovo T430s : i5 3320m / 2x8Go / SAMSUNG 840 Pro 512Go / station Mini Dock serie 3 / LG 34um95 3440x1440 34" / SAMSUNG SyncMaster SA450 1920x1200 24"/ Clavier et souris Lenovo Ultraslim sans fil

Nexus 6 64Go Android 6.0.1 | Garmin Forerunner 305 | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL neufbox de SFR

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 :
4161 (0.8 par jour)


Score :

Message du 03-12-2007 @ 20:01   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

;)
----------
chani_tth sur PSN ;)
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.058 secondes