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

Langage PHP Discussion :

requête de recherche sur plusieurs champs qui peuvent être vides ?


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de King_T
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 121
    Points
    121
    Par défaut requête de recherche sur plusieurs champs qui peuvent être vides ?
    salut ,
    je travail sur le site d'une bibliothèque avec PHP/MYSQL.
    je bloque au niveau de la recherche avancée de livre :
    un utilisateur peux chercher un livre selon plusieurs critères optionnels.
    comment faire pour les champs qui reste vide?
    Dois je faire un cas pour chaque champ !!!!!! je crois pas non :s


    Bon merci d'avance pour votre aide
    Dreaming in Digital, Living in Realtime, Thinking in Binary, Talking in IP .... Welcome to our World !!!!

  2. #2
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    c'est a dire plus précisément ?

    Vu que la construction d'un moteur de recherche est le rajout successif de WHERE, ou de jointure, en fonction de la saisie de ton IHM tu rajoute ou non les clauses correspondantes a ta requête.

    Avec un exemple plus concret il serait plus facile de t'aider.
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  3. #3
    Membre régulier Avatar de King_T
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 121
    Points
    121
    Par défaut
    Voici le code d'un partie de la page html de recherche avancée et aussi un imprim ecran pour mieux voir les choses
    {J'utilise la classe smarty}

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     <form name="searchl" action="" method="post">
     
     <table width="644" border="0" cellspacing="2" cellpadding="0" class="blocleft">
      <tr>
        <td height="12" colspan="5" class="entet">Recherche Avanc&eacute;e</td>
        </tr>
      <tr>
        <td width="116" rowspan="2">&nbsp;</td>
        <td width="133">&nbsp;</td>
        <td height="20" colspan="3" >&nbsp;</td>
      </tr>
      <tr>
        <td width="133">Titre de l ouvrage </td>
        <td colspan="3" ><input name="titrecherch" type="text" class="input" size="30"></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>Theme</td>
        <td colspan="3"><select name="themecher" class="input">
    	                  <option>Selectionner</option>
                      {section name=theme loop=$theme}                
                     <option >{$theme[theme].theme}</option>
                   {/section}
     				</select>
    </td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>Type de l ouvrage </td>
        <td colspan="3"><select name="typecher" class="input">
    	                  <option>Selectionner</option>
                      {section name=type loop=$type}                
                     <option >{$type[type].type}</option>
                   {/section}
        </select></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>Auteur</td>
        <td colspan="3"><input type="text" name="auteurcher" class="input"></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>Maison D edition </td>
        <td colspan="3"><input name="maisoncherch" type="text" class="input" size="30"></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>Date D apparition</td>
        <td colspan="3"><input type="text" name="datecherch" class="input"></td>
      </tr>
      <tr><input id="hide2" name="y" type="hidden" value="notsubmit">
        <td colspan="2">&nbsp;</td>
        <td width="89"><p>&nbsp;</p>
          <p>&nbsp;</p></td>
        <td width="143">      <input  type="button" name="submit3"class="entet" value="Effectuer la recherche" onClick="titreverif(searchl)"></td>
        <td width="151"><input name="Submit2" type="reset" class="entet" value="Réinitialiser les champs"></td>
      </tr>
    </table>
    </form>
    L'utilisateur, peut remplir un seul champ ou bien remplir tout les champs de requete.

    voici le code PHP
    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
      $p_titrecherch=$_POST['titrecherch'];
     $p_themecher= nom2code($_POST['themecher'],"theme","theme","code_them");
     $p_typecher=nom2code($_POST['typecher'],"type_ouvrage","type","code_type");
     $p_auteurcher=$_POST['auteurcher'];
     $p_maisoncherch=$_POST['maisoncherch'];
     $p_datecherch=$_POST['datecherch'];
     $p_sub=$_POST['y'];
     
    if ( $p_sub=="submit")
    {	echo $sql8="SELECT `CODE_O`, o.CODE_THEM, o.CODE_AUT, a.nom_aut, o.CODE_TYPE, `TITRE`, `MAISON_EDITION`, `DATE_APPARTION`, `NBRE_COPIEDISPO`, `NBRE_COPIETOTAL`, `URL_IMG`
    	FROM  ouvrage o, auteur a
    	Where  o.CODE_AUT=a.CODE_AUT
    	AND TITRE LIKE '%$p_titrecherch%'
    	AND o.code_them=$p_themecher
            AND o.code_type= $p_typecher
    	AND a.nom_aut LIKE '%$p_auteurcher%'
    	AND O.MAISON_EDITION LIKE '%$p_maisoncherch%'";	
     
    ....}
    Si un des champs manque, la requête ne s'exécute pas.
    Merci
    Images attachées Images attachées  
    Dreaming in Digital, Living in Realtime, Thinking in Binary, Talking in IP .... Welcome to our World !!!!

  4. #4
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Bonjour,
    Tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($_POST['titrecherch'] <> "") { $p_titrecherch = $_POST['titrecherch']; } else { $p_titrecherch = "%";}
    pour chaque variable qui risque d'être vide ...

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    C'est normal puisque ta requète devien syntaxiquement incorrecte.

    Je te conseil de construire ta variable bout par bout de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req8 = "SELECT ........... WHERE .........";
    if(!empty($valeurChamp)) { $req8 .= "AND table.champ LIKE '%$valeurChamp%'" }
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  6. #6
    Membre régulier Avatar de King_T
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 121
    Points
    121
    Par défaut
    j'y avais pas penser, je vais l'essayer merci
    Dreaming in Digital, Living in Realtime, Thinking in Binary, Talking in IP .... Welcome to our World !!!!

  7. #7
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Citation Envoyé par jumano Voir le message
    Bonjour,
    Tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($_POST['titrecherch'] <> "") { $p_titrecherch = $_POST['titrecherch']; } else { $p_titrecherch = "%";}
    pour chaque variable qui risque d'être vide ...
    Je pense qu'il est préférable de ne pas du tout rajouter de prédicat la ou il n'y en a pas besoin ...
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  8. #8
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Je ne connaissais pas cette façon de faire ...

  9. #9
    Membre régulier Avatar de King_T
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 121
    Points
    121
    Par défaut
    ça marche, merci pour votre aide
    Dreaming in Digital, Living in Realtime, Thinking in Binary, Talking in IP .... Welcome to our World !!!!

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

Discussions similaires

  1. Recherche sur plusieurs champs.
    Par icicmoi dans le forum JDBC
    Réponses: 6
    Dernier message: 09/08/2008, 00h54
  2. Pb de requète selection TOP sur plusieurs champs
    Par schnock dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/05/2008, 20h12
  3. Requête a/ recherche dans plusieurs champs de la table
    Par 810mcu dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/11/2007, 20h05
  4. [Débutant]Recherche sur plusieurs champs
    Par Touareg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/03/2007, 14h04
  5. Réponses: 2
    Dernier message: 30/11/2004, 09h42

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