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 :

Ajout d'une variable à une requête [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut Ajout d'une variable à une requête
    Bonjour,

    Les codes suivants doivent me permettre de filtrer les résultats d'une requête (liste de livres) soit par éditeur, soit par librairie, soit par année de publication :

    page liste.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
    20
    21
    $select_livre = 'SELECT L.TITRE AS titre, L.ID_LIVRE AS id_livre,
    DATE_FORMAT(L.DATE_ACHAT,"%Y")AS date_achat,DATE_FORMAT(L.DATE_PUBLICATION,"%Y")AS date_publication,DATE_FORMAT(L.DATE_LECTURE,"%Y")AS date_lecture, 
    ED.NOM_EDITEUR AS editeur,ED.ID_EDITEUR AS id_editeur,LIB.NOM_LIBRAIRIE AS librairie,LIB.ID_LIBRAIRIE AS id_librairie
     
     
    FROM LIVRE L
    INNER JOIN EDITEUR ED		
    ON ED.ID_EDITEUR = L.ID_EDITEUR	
     
    INNER JOIN LIBRAIRIE LIB		
    ON LIB.ID_LIBRAIRIE = L.ID_LIBRAIRIE
     
    ORDER BY L.DATE_ACHAT DESC
    LIMIT 0,100
    ';
    $resultat_livre = mysql_query($select_livre);
     
    while ($data = mysql_fetch_assoc($resultat_livre)) {
    echo '<a href="filtres.php?id_editeur='.$data['id_editeur'].'"><strong>'.$data ['editeur'].'</strong></a><br/>';
    echo '<a href="filtres.php?id_librairie='.$data['id_librairie'].'">Librairie : '.$data ['librairie'].'</a><br/>';
    echo '<a href="filtres.php?annee_publication='.$data['date_publication'].'">Date publication : '.$data ['date_publication'].'</a><br/>';}
    Page filtres.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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
     
    $ID_EDITEUR= (iSset($_GET['id_editeur']) ? $_GET['id_editeur'] : null);
    $ID_LIBRAIRIE= (iSset($_GET['id_librairie']) ? $_GET['id_librairie'] : null);
    $DATE_PUBLICATION= (iSset($_GET['date_publication']) ? $_GET['date_publication'] : null);
     
    $select_livre = "SELECT L.TITRE AS titre, L.ID_LIVRE AS id_livre,
    DATE_FORMAT(L.DATE_ACHAT,'%Y')AS date_achat,DATE_FORMAT(L.DATE_PUBLICATION,'%Y')AS date_publication,DATE_FORMAT(L.DATE_LECTURE,'%Y')AS date_lecture, 
    ED.NOM_EDITEUR AS editeur,ED.ID_EDITEUR AS id_editeur,LIB.NOM_LIBRAIRIE AS librairie,LIB.ID_LIBRAIRIE AS id_librairie
    
     
    FROM LIVRE L
    INNER JOIN EDITEUR ED		
    ON ED.ID_EDITEUR = L.ID_EDITEUR	
    
    INNER JOIN LIBRAIRIE LIB		
    ON LIB.ID_LIBRAIRIE = L.ID_LIBRAIRIE";
     
    if ( $ID_EDITEUR != null) { // on ajoute le critère que s'il est demandé
     
      $select_livre  .= " WHERE ED.ID_EDITEUR=".$ID_EDITEUR;
    }
     
    if ( $ID_LIBRAIRIE != null) { // on ajoute le critère que s'il est demandé
      $select_livre  .= " WHERE LIB.ID_LIBRAIRIE=".$ID_LIBRAIRIE;
    }
     
     
    if ( $DATE_PUBLICATION != null) { // on ajoute le critère que s'il est demandé
      $select_livre  .= " WHERE DATE_FORMAT(L.DATE_PUBLICATION,'%Y')LIKE %".$DATE_PUBLICATION."%";
     
    $resultat_livre = mysql_query($select_livre)or die('Erreur SQL !'.$select_livre.'<br>'.mysql_error());

    Les 2 premiers liens fonctionnent : les résultats sont filtrés par éditeur ou par librairie. En revanche le 3eme lien devant filtrer par année de publication ne marche pas. Lorsque je clique, je n'ai pas d'erreur sql mais j'obtiens la totalité des enregistrements de ma base et non pas les résultats filtrés adéquats.
    Avez-vous une idée de la façon de résoudre ce dysfonctionnement ? Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Au niveau de la requête ca serait déjà plus ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( $DATE_PUBLICATION != null) { // on ajoute le critère que s'il est demandé
      $select_livre  .= " WHERE YEAR(L.DATE_PUBLICATION = " . $DATE_PUBLICATION;
    Sinon il faudrait que tu debug un peu plus, affiche ta requête par exemple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    En faisant ton code plus un echo de ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( $DATE_PUBLICATION != null) { // on ajoute le critère que s'il est demandé
    $select_livre  .= " WHERE YEAR(L.DATE_PUBLICATION = " . $DATE_PUBLICATION;
     echo $select_livre;
    Le filtre ne fonctionne toujours pas mais ce n'est pas étonnant vu le echo de la requête transmise qui ne comporte pas le WHERE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT L.TITRE AS titre, L.ID_LIVRE AS id_livre, DATE_FORMAT(L.DATE_ACHAT,'%Y')AS date_achat,DATE_FORMAT(L.DATE_PUBLICATION,'%Y')AS date_publication,DATE_FORMAT(L.DATE_LECTURE,'%Y')AS date_lecture, L.miniatures AS miniatures, ED.NOM_EDITEUR AS editeur,ED.ID_EDITEUR AS id_editeur,LIB.NOM_LIBRAIRIE AS librairie,LIB.ID_LIBRAIRIE AS id_librairie, L.RESUME AS resume, L.STATUT_LECTURE AS statut_lecture FROM LIVRE L INNER JOIN EDITEUR ED ON ED.ID_EDITEUR = L.ID_EDITEUR INNER JOIN LIBRAIRIE LIB ON LIB.ID_LIBRAIRIE = L.ID_LIBRAIRIE
    Je ne vois pas pourquoi le WHERE n'est pas transmis... Je précise que pour les 2 premières requêtes (éditeur et librairie) l'echo de la requête comporte bien le WHERE filtrant. Vois-tu une explication ? Merci

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as controlé $DATE_PUBLICATION, $_GET['date_publication'], si tu rentrais dans ton if ... bref tu as debugué un peu ?

    Utilise YEAR() partout plutot que DATE_FORMAT(), c'est fait pour ca.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    Effectivement mon lien était incorrect :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="filtres.php?date_publication='.$data['date_publication'].'">Date publication : '.$data ['date_publication'].'</a><br/>';
    alors que le lien erroné était ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="filtres.php?annee_publication=
    Merci pour ton aide

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

Discussions similaires

  1. Affecter une valeur à une variable avec requête SQL
    Par xeron33 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 26/02/2013, 00h57
  2. Réponses: 1
    Dernier message: 27/09/2012, 15h57
  3. [AC-2003] Ajout d'une variable dans requête Sql
    Par Plume27 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/09/2012, 22h50
  4. [MySQL] Introduire une variable dans requête SQL, insérer des données à la volée
    Par Ronan.f dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 29/04/2006, 22h10
  5. Ajouter un listener sur une variable
    Par serwol dans le forum Général Java
    Réponses: 4
    Dernier message: 14/10/2005, 15h39

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