Requete php BDD - PHP - Programmation
Marsh Posté le 13-03-2009 à 14:06:37
marquito a écrit : Bonsoir, je viens vous voir avec une énigme qui j'espère trouvera une solution avec vous. |
Traduction ?
Ca plante (message d'erreur ?), le résultat n'est pas conforme aux attentes, autre ?
Un départ :
après ton code, fais un echo $search; et étudie les reuqêtes générées - voire passe les sous phpMyAdmin (ou autre).
Marsh Posté le 13-03-2009 à 14:08:30
affiche la requête SQL générée au complet qui a le pb. Je suis sûr que c'est une erreur de syntaxe SQL dû à une erreur de construction de la requête par ton programme.
Marsh Posté le 13-03-2009 à 23:52:48
Non ça ne plante pas !! Le résultat n'est pas conforme aux attentes.
En faisant un echo $search;
J'ai ;
adcat.catid IN (10) AND a.ad_price > '' AND a.ad_price < '' AND a.published = 1
Marsh Posté le 13-03-2009 à 23:58:47
Je précise que j'ai modifié mon code du départ par :
Code :
|
Marsh Posté le 14-03-2009 à 13:33:54
ben a.ad_price < '', c'est pas une bonne condition. Faut la retirer du where (l'autre aussi du reste) et quan don a une condition sur un champ avec un > et un <, faut utiliser BETWEEN.
Marsh Posté le 15-03-2009 à 09:36:22
Merci pour ta réponse rufo, tu sais comment je pourrais adapter BERWEEN à ma condition ??
Marsh Posté le 15-03-2009 à 11:45:28
$search .= " AND a .ad_price between ." $_GET['Prixmini']." and ".$_GET['Prixmaxi']
Marsh Posté le 15-03-2009 à 14:13:27
Cool c'est sympa mais j'ai ce message
Parse error: syntax error, unexpected T_VARIABLE
C'est certainement moi qui me trompe j'ai ecris
if ($text_search <> "" ) {
$search .= " AND (a.ad_headline LIKE '%$text_search%' OR a.ad_text LIKE '%$text_search%') ";
}
//MODIFICATION
if (isset($_GET['Prixmini']) && isset($_GET['Prixmaxi'])) {
$search .= " AND a .ad_price between ." $_GET['Prixmini']." and ".$_GET['Prixmaxi']
}
$search .= " AND a.published = 1";
Marsh Posté le 15-03-2009 à 20:23:04
oui luc@s j'ai essayé aussi avec le point virgule mais c'est le même message d'erreur !!
Marsh Posté le 16-03-2009 à 14:29:13
$search .= " AND a.ad_price between ".$_GET['Prixmini']." and ".$_GET['Prixmaxi'];
Marsh Posté le 16-03-2009 à 18:00:33
ah désolé
mais la prochaine fois envoi le message d'erreur exact, çà fait gagner pas mal de temps.
Marsh Posté le 17-03-2009 à 08:12:38
Comme ça j'ai plus de message d'errreur
$search .= " AND (a.ad_price BETWEEN '" . $_GET['Prixmini']. "' AND '" . $_GET['Prixmaxi'] . "')";
Par contre le truc qui reste dingue c'est que si je ne rempli pas les champs mini et maxi il me donne pas le résultat !
Marsh Posté le 17-03-2009 à 09:35:08
mais c'est normal gros malin! Tu vas ta retrouver avec la condition dans le WHERE : " AND (a.ad_price between '' and '')".
Y'a forcément aucun enregistrement qui correspondra à cette condition.
Dans un moteur de recherche, si un champ n'est pas rempli, on ne prend carrément pas en compte sa valeur. Dans ton cas :
Code :
|
Et là, ça va marcher.
Marsh Posté le 17-03-2009 à 11:07:38
Je ne comprends pas actuellement je suis comme ça :
Code :
|
Je résume si je fais une recherche sur simplement la première requête
Code :
|
sans remplir les champs prix mini maxi j'ai aucun résultat
par contre si je les rempli c'est bon !
Si j'enlève
Code :
|
En faisant la recherche ça fonctionne normalement
Moi j'aimerai que ça me donne le résultat si je fait une recherche sur la première requête même si je n'ai pas rempli les champs prix mini et maxi
Marsh Posté le 17-03-2009 à 11:55:44
puré, lis ce que j'ai mis! J'ai pas fait un test avec isset() mais !empty(). isset va forcément être bon puisque le formulaire posté contient les champs testés. Sauf que leur valeur est vide et que ça te fait une condition à la con!
Marsh Posté le 17-03-2009 à 12:45:47
Oh la vache tu es peut être colérique mais kes que tu es doué
Je vais tester tout ça je te tiens informé
Merci mille fois je suis trop content
Marsh Posté le 17-03-2009 à 12:57:19
pas colérique mais énervé car ça fait plusieurs fois que je te dis qu'il ne faut prendre en compte tes 2 champs relatifs au prix que s'ils ne sont pas vide.
Marsh Posté le 17-03-2009 à 13:50:53
Je comprends je n'avais pas fais gaffe au !empty
Dans tous les cas je te remercie encore tu m'as vraiment enlevé une grosse épine du pied
A bientôt peut être
Marsh Posté le 17-03-2009 à 14:00:53
oui, bien sûr mais après, faut faire attention à ce que la requête SQL ainsi générée soit syntaxiquement (pas d'erreur de syntaxe) et sémantiquement (la requête doit avoir du sens, être logique) correcte. Faut donc faire attention au contenu de la clause SELECT, FROM et WHERE.
Et bon sang de bon soir, tu trouves encore le moyen de te trouer dans ton code alors que t'as qu'à faire un copier-coller
Code :
|
Y'a que des !empty(), pas de isset(). T'es lourd à vouloir en mettre à tout prix!
Marsh Posté le 17-03-2009 à 14:18:28
OK j'ai fais la modif et j'ai crié avant d'avoir mal maintenant tout fonctionne comme je veux
Par contre ce code ça marche pas !
Code :
|
Celui là si
Code :
|
Marsh Posté le 17-03-2009 à 15:19:25
ok j'ai oublié un jeu de ( ), t'aurais pu corriger toi-même
Code :
|
Marsh Posté le 17-03-2009 à 15:20:25
Vu les trucs sur lesquels tu bloques, j'ai l'impression que t'as pas dû passer beaucoup temps à la lire la doc relative au PHP et sa syntaxe
Marsh Posté le 17-03-2009 à 17:07:14
On ne peux pas être bon partout et c'est vrai que j'ai bcp de lacune en PHP
D'ailleurs en ce moment je cherche un truc pour toi c'est certainement de la rigolade
J'aimerai faire apparaitre ces champs en fonction du choix de l'internaute
C'est un site de moto.....si il cherche une bécane je lui donne le choix de chercher par cylindrée par contre si il cherche de l'équipement avec mon truc bien sûr le champs cylindrée reste affiché
Tu vois dans quelle galère je suis avec mes lacunes
Marsh Posté le 17-03-2009 à 17:18:48
archi traité sur ce forum : principe des listes déroulantes liées entre elles. La sélection d'une valeur dans l'une conditionne le contenu de l'autre. Faut passer par du javascript.
Marsh Posté le 17-03-2009 à 21:27:27
Il y a peut être un moyen de le faire sans javascript...non?
Parce que sur le script que j'ai (sans js a moins que je me trompe) il me sort les champs en fonction des catégories choisis !
Marsh Posté le 18-03-2009 à 09:01:38
marquito a écrit : Il y a peut être un moyen de le faire sans javascript...non? |
Non.
En tout cas, pas sans recharger la page.
Pour rappel :
Citation : PHP => Traitement côté serveur. |
- En php : il "suffit" de tester ce qui est demandé (à voir suivant tes pages), et d'activer/désactiver la liste de choix avant de renvoyer la page.
Inconvénient : génère du trafic pour pas grand chose.
- En JS : Une fonction OnChange sur le premier choix, qui va activer/désactiver la liste.
Inconvénient : il faut penser à faire les vérifications côté serveur, et il faut penser à ceux qui n'utilisent pas le JS
Marsh Posté le 18-03-2009 à 14:30:56
Ok vu j'ai abandonné cette idée je l'ai contourné par facilité !
Rufo va dire que je suis nul et c'est vrai le Php c'est pas ma tasse de thé
Juste une dernière question
Pour contourner mon truc j'aimerai savoir comment faire une recherche juste sur un mot avec mon principe:
# if (!empty($_GET['Cubemini']) && !empty($_GET['Cubemaxi'])) {
# $search .= " AND (a.ad_cylindre BETWEEN '" . $_GET['Cubemini']. "' AND '" . $_GET['Cubemaxi'] . "')";
# }
Marsh Posté le 18-03-2009 à 15:17:46
ben tu l'avais bien fait en début :
Code :
|
Marsh Posté le 18-03-2009 à 19:01:09
ben après, faut adapter. T'as pas dit sur quel champ tu voulais rechercher l'info.
Enlèves moi un doute : la variable $text_search, tu l'alimentes bien avec une variable de ton formulaire de recherche via $_POST ou $_GET?
Marsh Posté le 18-03-2009 à 20:39:29
Sur le champ: ad_text
<input name="Motcle" type="text" size="20" maxlength="20" class="inputbox"/>
je pensais faire un truc du genre:
Code :
|
Mais c'est certainement du grand n'importe quoi
Citation : tu l'alimentes bien avec une variable de ton formulaire de recherche via $_POST ou $_GET |
$_POST je crois
Marsh Posté le 19-03-2009 à 11:22:13
Code :
|
Marsh Posté le 19-03-2009 à 11:43:41
marquito a écrit : Sur le champ: ad_text |
$_POST je crois
C'est clair Tu ne prends même aps le temps de regarder si ta requête SQL est syntaxiquement correcte
Code :
|
Marsh Posté le 19-03-2009 à 12:18:54
Merci merci.....Tu es vraiment génial rufo tu as encore gagné
Moi je ne suis pas fais pour le PHP trop compliqué pour moi ça me désole
Dis moi on m'a dis que
Citation : |
Citation : Passer directement des $_POST ou $_GET dans des requêtes sans tester leur contenu au préalable est un réel danger. |
C'est pas mon cas rassure moi
Marsh Posté le 19-03-2009 à 12:58:38
Si. On appelle ça le SQL injection. Pour contourner ça, tu peux déjà utiliser mysql_real_escape_string() http://fr3.php.net/manual/en/funct [...] string.php
Sinon, faut utiliser les requêtes préparées, avec la lib PDO, par exemple.
Marsh Posté le 19-03-2009 à 13:21:48
Il n'a pas moyen de vérifier si mon code comporte un risque ?
On m'a parlé de ça pour faire un test
Code :
|
Citation : |
Qu'est-que t'en penses ? et qu'est-que tu me conseil
Marsh Posté le 12-03-2009 à 23:47:07
Bonsoir, je viens vous voir avec une énigme qui j'espère trouvera une solution avec vous.
Voilà j'essaye de rajouter une code sur un script déjà écrit.
j'aimerai rajouter à la recherche existante une recherche par prix mini et prix maxi.
Voila un bout de code:
La recherche seulement par prix ça fonctionne
La recherche par prix plus les autres critères ça fonctionne
MAIS
Si je fais la recherche avec les autres critères sans les prix mini et maxi ça ne fonctionne plus.
Merci pour toutes les pistes