Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2006, 16h23   #1
Invité régulier
 
Inscription : octobre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 17
Points : 5
Points : 5
Par défaut [SQL] Problème requete sql

Salut à tous,

je suis en train de bosser sur un site de petites annonces. On me demande de pouvoir réaliser des recherches dans les petites annonces suivant un formulaire multicritères (recherche par mot clés, recherche par rubriques, et recherche par date de création d'annonce). C'est à dire qu'un utilisateur pourra faire une recherche en remplissant un ou plusieurs champs du formulaire.

Voici le code du formulaire:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form action="affiche_ann.php" method="post">
		<p>Recherche par mots clés: 
			<input name="motcle" type="text" class="saisie" onfocus="this.value=''" value="Recherche" /></p>
	<p>Recherche par rubrique: 
			<select name="id_rub" class="saisie">
			<option>Choisissez une catégorie</option>
		<?php
		$sql = "SELECT * FROM rubriques WHERE 1";
		$result = mysql_query($sql);
		while($rubriques = mysql_fetch_assoc($result)){
			echo "\n\t\t\t\t".'<option value="'.$rubriques['id_rub'].'">';
			echo $rubriques['titre'];
			echo '</option>';
		}
		?>
			</select></p>
	<p>Rechercher par date: 
			<input name="date_ann" type="text" class="saisie" onfocus="this.value=''" value="Recherche" /><br />
			<input type="submit" class="bouton" value="Valider" /></p>
		</form>
Sur la page affiche_ann.php, l'affichage des petites annonces trouvées doit pouvoir se faire suivant un classement de rubriques.

C'est à dire (par exemple):

INFORMATIQUE
P.A. 1
P.A. 2

IMMOBILIER
P.A. 1
ect...

Or je n'arrive pas à faire ma reqête ou plutot je ne suis pas sûr de moi sur le coup

Code :
1
2
$sql = "SELECT id_rub,id_ann,contenu,date_ann FROM annonces WHERE id_ann='$id_ann' OR contenu LIKE '%$motcle%' 
	ORDER BY id_ann  ;";
Quand je fais un echo $sql; voici le résultat retourné:
Code :
SELECT id_rub,id_ann,contenu,date_ann FROM annonces WHERE id_ann='Recherche' OR contenu LIKE '%free%' ORDER BY id_ann ;
Ce qui est bizzare c'est le 'Recherche' dans la variable id_ann (qui est le l'identifiant de l'annonce). La valeur est celle qui se trouve dans le value du champ de recherche par date

Je ne sais pas si j'ai été assez explicite...

Merci de votre aide
dionysos73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 17h22   #2
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut pas clair

Tu dis que cela doit être affiché par rubrique et tu fais un order by sur id_ann, c'est pas très logique?

Ensuite, mieux vaut, par convention utiliser = que LIKE à moins que LIKE ait des vertues dont je ne sois pas au courant. Ensuite pour des % avant et après $motcle.

Et puis est-ce que tu as récupéré les infos du formulaire par $_POST[]? car maintenant le register_globals et à OFF par défaut.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 17h37   #3
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Citation:
Envoyé par zyongh
Ensuite, mieux vaut, par convention utiliser = que LIKE à moins que LIKE ait des vertues dont je ne sois pas au courant.
Attention, le = permet de vérifier une égalité parfaite du champ.

Dans le cadre de son script, le mot clé peut être présent un peu n'importe où dans le contenu, donc le LIKE s'impose.
Rien à redire sur sa requete.

Pour le problème, je pense que c'est parceque tu ne testes pas la variable id_ann pour savoir si celle-ci a été renseigné dans le formulaire. En effet, si l'utilisateur ne choisit rien, la valeur value ( en l'occurrence Recherche) est quand même transmise.

Il suffirait de faire un test avant la requête, du genre
Code :
1
2
3
4
 
$sql_annee = '';
if ($id_ann != 'Recherche' ) $sql_annee = 'AND id_ann=\'' .$id_ann .'\'';
$sql = "SELECT id_rub,id_ann,contenu,date_ann FROM annonces WHERE contenu LIKE '%$motcle%' $sql_annee ORDER BY id_ann  ;";
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 17h42   #4
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Citation:
Tu dis que cela doit être affiché par rubrique et tu fais un order by sur id_ann, c'est pas très logique?
j'ai bien peur que ce n'est pas la seule chose qui n'est pas logique : Personnellement quand je fais une recherche et je remplis des criteres, c'est bien pour raffiner ma recherche et recuperer des annonces qui repondent aux maximum de criteres et non pour avoir de plus en plus d'offres??!!

En mettant "OR" dans ta requete, plus l'utilisateur choisit de critere plus le nombre d'annonces affichées augmente (ce qui est absurde à mon avis). Je ne sais pas pour les autre!
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 17h43   #5
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Citation:
Envoyé par SegmentationFault
En mettant "OR" dans ta requete, plus que l'utilisateur choisit de critere plus le nombre d'annonces affichées augmente (ce qui est absurde à mon avis). Je ne sais pas pour les autre!

Ah je l'avais pas vu ça. D'ailleurs dans mon script j'ai corrigé sans m'en rendre compte. L'expérience surement
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 18h11   #6
Invité régulier
 
Inscription : octobre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 17
Points : 5
Points : 5
Merci pour les réponses

bon, j'aurais peut etre du préciser que je débute et que j'ai encore un peu de mal avec l'execution de certaines requêtes. Mais effectivement, l'ORDER BY sur l'id_ann ne me parait pas, avec le recul, des plus logiques


je vais faire au mieux en tenant compte des diverses remarques et je reviens vous voir

Merci à tous...
dionysos73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h50.


 
 
 
 
Partenaires

Hébergement Web