Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 24/04/2011, 23h17   #1
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
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 :
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>
maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 00h31   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
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 :
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>
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 08h01   #3
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
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
maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 12h10   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Les apostrophes sont en trop :
Code :
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);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/04/2011, 13h43   #5
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
Citation:
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...
Citation:
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.
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 14h58   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
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 '
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/04/2011, 15h43   #7
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
merci mais ça ne marche tj pas, voici donc le code corrigé:

Code :
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

maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 15h51   #8
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
Citation:
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...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 16h09   #9
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
essaies de rajouter un echo dans le if :
Code :
1
2
3
4
      if(isset($_GET['tri']) && !empty($_GET['tri'])){
      echo 'ca marche';
      $sql .= ' ORDER BY ' . $bdd->quote($_GET['tri']);
      }
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 16h19   #10
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
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
maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 16h25   #11
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
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 :
1
2
3
      if(isset($_GET['tri']) && !empty($_GET['tri'])){
      $sql .= ' ORDER BY ' . $_GET['tri'];
      }
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/04/2011, 16h33   #12
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
Warch ! vous êtes trop forts !

c'est nickel, ça marhe à merveille

Un gros Merci !!
maxiNoob 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 06h23.


 
 
 
 
Partenaires

Hébergement Web