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 :

trier une table mysql avec une variable [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut trier une table mysql avec une variable
    Bonsoir

    voilà je me suis créé une table de films blu-rays, j'aimerai les trier selon le titre des colonnes: les classer par année, par durée, etc...

    il me faut donc une variable, j'essaie avec $_GET renseignée par un lien, mais rien ne se passe, voilà le site et le code

    http://www.villa-camargue.com/Cine/films.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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <div id="films">
     
     
       <?php    try  
                {
    	 $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	  $bdd = new PDO('mysql:host=mysql51-31.perso;dbname=villacam408', 'villacam408', 'jolie408', $pdo_options);
    		      }
    			catch (Exception $e)
    				{
         	   die('Erreur : ' . $e->getMessage());
    				}
         ?>
     
     
       <table class="table1">
       <caption><h2> Liste des Films Blu-Ray </h2></caption><br/>
       <th>Affiche</th>
       <th><a href="films.php?tri=title">Titre</a></th>
       <th><a href="films.php?tri=year">Année</a></th>
       <th><a href="films.php?tri=time">Durée</a></th>
       <th>Réalisateur</th><th>Type</th><th>Acteur</th>
     
    <?php   $val = $_GET['tri']; 
       echo $val ; ?>
     
    <?php   $AllMembers = $bdd->query("SELECT * FROM films ORDER BY '$val'"); // charge tous les films     
     
          while($member = $AllMembers->fetch())    // charge les films 1 par 1 (boucle while)
             {  ?>
          <tr>
           <td> <?php echo '<img src="'.$member['affiche'].'" alt="Affiche">'   ?> </td>
           <td> <?php echo $member['title'] ?></td>
           <td> <?php echo $member['year'] ?></td>
           <td> <?php echo $member['time']  ?> </td>
           <td> <?php echo $member['realisator'] ?> </td>
           <td> <?php echo $member['type']  ?> </td>
           <td> <?php echo $member['actor1'] ?><br />
                <?php echo $member['actor2'] ?></td>
          </tr> <?php } ?>
        </table>
     
    </div>

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    si tu choisis le mode de tri ca marche mais si t'arrives sur la page depuis le menu de navigation ca ne marche pas parce que $_GET['tri'] n'existe pas, comme ça, c'est mieux :
    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
    <div id="films">
     
     
       <?php    try  
                {
    	 $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	  $bdd = new PDO('mysql:host=mysql51-31.perso;dbname=villacam408', 'villacam408', 'jolie408', $pdo_options);
    		      }
    			catch (Exception $e)
    				{
         	   die('Erreur : ' . $e->getMessage());
    				}
         ?>
     
     
       <table class="table1">
       <caption><h2> Liste des Films Blu-Ray </h2></caption><br/>
       <th>Affiche</th>
       <th><a href="films.php?tri=title">Titre</a></th>
       <th><a href="films.php?tri=year">Année</a></th>
       <th><a href="films.php?tri=time">Durée</a></th>
       <th>Réalisateur</th><th>Type</th><th>Acteur</th>
     
    <?php  
    if(isset($_GET['tri']) && !empty($_GET['tri'])){
     $val = $_GET['tri'];
     $AllMembers = $bdd->query("SELECT * FROM films ORDER BY '$val'"); // charge tous les films   
       }else{
    $AllMembers = $bdd->query("SELECT * FROM films");
     }     
          while($member = $AllMembers->fetch())    // charge les films 1 par 1 (boucle while)
             {  ?>
          <tr>
           <td> <?php echo '<img src="'.$member['affiche'].'" alt="Affiche">'   ?> </td>
           <td> <?php echo $member['title'] ?></td>
           <td> <?php echo $member['year'] ?></td>
           <td> <?php echo $member['time']  ?> </td>
           <td> <?php echo $member['realisator'] ?> </td>
           <td> <?php echo $member['type']  ?> </td>
           <td> <?php echo $member['actor1'] ?><br />
                <?php echo $member['actor2'] ?></td>
          </tr> <?php } ?>
        </table>
     
    </div>

  3. #3
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    salut mon cher vorace, tj là pour secourir les noobs en perdition

    tu as donc rajouté ce IF Else, je viens de modifier le code, chez moi, rien ne marche, la variable tri se remplit et s'affiche dans l'adresse, mais le tri ne se fait pas, la requête semble HS

    bref ça ne marche pas du tout chez moi

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Les apostrophes sont en trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT * FROM films';
    if(isset($_GET['tri']) && !empty($_GET['tri'])){
     $sql .= ' ORDER BY ' . $bdd->quote($_GET['tri']);
    }
    $bdd->query($sql);

  5. #5
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    salut mon cher vorace, tj là pour secourir les noobs en perdition

    tu as donc rajouté ce IF Else, je viens de modifier le code, chez moi, rien ne marche, la variable tri se remplit et s'affiche dans l'adresse, mais le tri ne se fait pas, la requête semble HS

    bref ça ne marche pas du tout chez moi
    et pourtant sur le lien que tu as mis, quand j'arrive sur la page, il y a effectivement une erreur mais quand je clique sur les liens du bas pour le tri, je vois bien la variable tri en url avec sa valeur et le résultat s'affiche correctement...
    Les apostrophes sont en trop :
    non les quottes ne sont pas en trop, essaies de protéger des nom de champs avec des simples quottes sur mysql, ça marche.

  6. #6
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    essaies de protéger des nom de champs avec des simples quottes sur mysql, ça marche.
    Ba non ça ne marche pas.
    Si nécessaire les noms d'éléments s'encadrent avec des ` mais pas avec des '

  7. #7
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    merci mais ça ne marche tj pas, voici donc le code corrigé:

    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
     
       <table>
       <caption>Liste des Films Blu-Ray </caption>
         <th>Affiche</th>
         <th><a href="films.php?tri=title">Titre</a></th>
         <th><a href="films.php?tri=year">Année</a></th>
         <th><a href="films.php?tri=time">Durée</a></th>
         <th><a href="films.php?tri=realisator">Réalisateur</th>
         <th><a href="films.php?tri=type">Type</th>
         <th><a href="films.php?tri=actor1">Acteur</th>
     
    <?php  
       $sql = 'SELECT * FROM films';
          if(isset($_GET['tri']) && !empty($_GET['tri'])){
          $sql .= ' ORDER BY ' . $bdd->quote($_GET['tri']);
          }
     
       $movies = $bdd->query($sql);
     
       while($movie = $movies->fetch())    // charge les films 1 par 1 (boucle while)
             {  ?>
          <tr>
           <td> <?php echo '<img src="'.$movie['affiche'].'" alt="Affiche">'   ?> </td>
           <td> <?php echo $movie['title'] ?></td>
           <td> <?php echo $movie['year'] ?></td>
           <td> <?php echo $movie['time']  ?> </td>
           <td> <?php echo $movie['realisator'] ?> </td>
           <td> <?php echo $movie['type']  ?> </td>
           <td> <?php echo $movie['actor1'] ?><br />
                <?php echo $movie['actor2'] ?></td>
          </tr> <?php } ?>
        </table>
    Lorsque l'on clique sur les titres de colonnes, le tri ne se fait pas, c'est tj la même page qui est rechargée avec la table classée ds le même ordre


  8. #8
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Ba non ça ne marche pas.
    Si nécessaire les noms d'éléments s'encadrent avec des ` mais pas avec des '
    ce que je veux dire c'est que la requete s’exécute, le tri ne se fait pas effectivement mais aucune erreur n'est levée...

  9. #9
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    essaies de rajouter un echo dans le if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          if(isset($_GET['tri']) && !empty($_GET['tri'])){
          echo 'ca marche';
          $sql .= ' ORDER BY ' . $bdd->quote($_GET['tri']);
          }

  10. #10
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    OK je viens de le faire, ça s'affiche bien, tu peux tester

    donc le code est correct, le IF confirme que la variable se remplit bien, elle s'affiche d'ailleurs ds la barre d'adresse, mais la requête sql ne marche pas

  11. #11
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    sabotage a raison, y a des simple quotes autour du nom de la colonne sur laquelle porte le tri, la requete marchera quand meme mais pas le tri...
    enlève la fonction quote() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          if(isset($_GET['tri']) && !empty($_GET['tri'])){
          $sql .= ' ORDER BY ' . $_GET['tri'];
          }

  12. #12
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    Warch ! vous êtes trop forts !

    c'est nickel, ça marhe à merveille

    Un gros Merci !!

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

Discussions similaires

  1. Copie d'une table mySQL vers une table SQLite : optimisation de code
    Par Invité dans le forum Bases de données
    Réponses: 23
    Dernier message: 11/11/2014, 19h59
  2. [MySQL-5.6] Linker une table KEYWORDS avec une table WEBSITES !
    Par elhadiDZ dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/02/2014, 15h03
  3. Lier une table standard avec une table de paramétrage (contenu variable)
    Par romain.alcaraz dans le forum Développement de jobs
    Réponses: 22
    Dernier message: 14/02/2011, 16h45
  4. Joindre une table Oracle et une table MySQL
    Par guidav dans le forum Requêtes
    Réponses: 0
    Dernier message: 27/10/2008, 15h44
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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