IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Problème requete sql


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Points : 11
    Points
    11
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    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.

  3. #3
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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  ;";

  4. #4
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    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!

  5. #5
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    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

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    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...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL]Problème requete sql sous access avec vba
    Par aaliyan dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 13/04/2007, 18h53
  2. problème requete sql fusion de deux count
    Par TuxP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/12/2005, 15h15
  3. Problème requete SQL
    Par tonyskn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2004, 20h37
  4. problème requete sql
    Par Fred- dans le forum ASP
    Réponses: 2
    Dernier message: 13/06/2004, 02h20
  5. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo