Tri colonne tableau ne fonctionne pas

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 janv. 2010, 14:03

C'est le second code qu'il te faut utiliser. En effet, si $ID_AUTEUR est null, la requête que tu génères avec le premier est : 'SELECT * FROM liste WHERE ID_AUTEUR=' ce qui ne fonctionnera pas :) (d'où le second code :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 47 Messages

24 janv. 2010, 15:21

J'ai donc utilisé le 2nd code. Puis pour faire des essais, j'ai tapé directement dans la barre d'adresse :

...biblio.php?tri=TITRE&ordre=asc : effectivement cela me trie tous les livres de ma base par titre croissant

... biblio.php?tri=TITRE&ordre=asc&ID_AUTEUR=5 : j'ai l'erreur suivante : "Erreur SQL ! WHERE ID_AUTEUR=5 ORDER BY TITRE desc
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID_AUTEUR=5 ORDER BY TITRE desc' at line 1"

... biblio.php?ID_AUTEUR=5 : même erreur...

Je commence un peu à désespérer...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 janv. 2010, 15:37

Oops ! Ma faute ! J'ai oublié le "."avant le "=" pour la concaténation des chaines :
$requete .= " WHERE ID_AUTEUR=". $ID_AUTEUR;
Sans lui, php écrase la valeur de $requete au lieu de la compléter :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 47 Messages

24 janv. 2010, 16:16

Un grand merci, effectivement la correction apportée enlève l'erreur. Si je tape dans la barre d'adresse : .. biblio.php?tri=TITRE&ordre=asc&ID_AUTEUR=5, cela me trie ce qu'il faut, à savoir uniquement les livres de l'auteur n°5 par titre croissant. On approche du but mais la valeur de l'ID_AUTEUR c'est moi qui l'ai tapée directement dans la barre d'adresse. Comment faire pour que la valeur de l'ID_AUTEUR s'affiche dynamiquement en fonction de l'auteur que j'ai sélectionné dans un 1er temps en cliquant sur son lien ? C'est à dire :
- sur ma page d'accueil où tous mes auteurs figurent, je clique par exemple sur le lien de l'auteur Stephen KING : cela m'affiche tous ses livres en fonction de son ID_AUTEUR sans tri particulier. Fin de la 1ere étape (étape qui doit toujours exister).
- 2eme étape : je veux trier (par exemple par thème) le résultat de la recherche figurant sur la page concernant les livres de Stephen KING : cela en cliquant sur un lien "flèche haut ou bas" sur cette page. Dans ce cas il faudrait bien que l'ID_AUTEUR soit dynamiquement renseigné dans la barre d'adresse, n'est-ce pas ? Comme cela, quel que soit l'auteur sélectionné lors de la 1ere étape, le tri effectué se ferait bien sur le bon auteur.

Quelque chose m'échappe-t-il (encore...) ? Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 janv. 2010, 17:28

C'est bien cela :)

Pour ta première étape il te suffit donc que ton lien (permettant de choisir l'auteur) t'ouvre cette url : "biblio.php?ID_AUTEUR=xxx" où xxx correspond respectivement à l'id de chaque auteur :)

Pour la deuxième étape, une fois arrivée sur la liste des livres de cet auteur, tu peux utiliser tes liens pour le tri. Le problème que tu vas rencontrer, c'est que si ton lien de tri ne contient que "biblio.php?tri=yyy&ordre=zzz" ta requête va trier tous les livres quelque soit l'auteur. Il faut donc adapter le lien que tu utilises pour le tri pour y faire figurer également l'id de l'auteur qui vient d'être choisit (et que tu as récupéré avec php) :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 47 Messages

24 janv. 2010, 18:44

Si je comprends bien, il faut que le lien permettant de choisir l'auteur soit du style :
<a href="biblio.php?ID_AUTEUR=<?php echo $donnees['ID_AUTEUR']; ?>">
pour que ID_AUTEUR soit renseigné dynamiquement ?

Quant à la seconde étape, le lien serait du style :
<a href="biblio.php?tri=yyy&ordre=zzz&ID_AUTEUR=<?php echo $donnees['ID_AUTEUR']; ?>">
Ou mon raisonnement n'est-il pas le bon ? J'ai bien peur en procédant ainsi de ne pas récupérer l'id de l'auteur qui vient d'être choisi à la 1ere étape. Sinon comment dois-je faire concrètement ?
Pardon pour le sujet à rallonge.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 janv. 2010, 22:26

Tu as bien compris le principe. Ce qui va changer c'est effectivement l'origine de l'id que tu vas utiliser.

Pour ta première étape tu boucles probablement sur les différents auteurs que tu as en base et tu vas utiliser $donnees['ID_AUTEUR']. Pour ta seconde étape, l'utilisateur a sélectionné un auteur et tu as son id dans l'url. C'est donc celui-ci qu'il te faut utiliser, soit directement avec un $_GET['ID_AUTEUR'], soit plus proprement avec ton $ID_AUTEUR puisque tu test déjà préalablement si cette variable est présente :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 47 Messages

25 janv. 2010, 21:57

Grâce à toi je suis arrivé à coder correctement la 1ere étape. J'arrive à la 2nde étape où sont affichés les livres de l'auteur sélectionné à l'étape 1 et j'ai donc son ID dans l'URL. J'ai encore une difficulté pour arriver au terme de la seconde étape. Comment ajouter la variable $ID_AUTEUR à mon lien :
<a href="biblio.php?tri=TITRE&ordre=asc&ID_AUTEUR=????">+</a>
pour enfin arriver à trier les livres de l'auteur considéré ? Je te remercie encore pour l'attention que tu portes à mon problème, en espérant que ta réponse à venir le résolve :P

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 janv. 2010, 22:52

Comme tu l'as fait juste au dessus :)
<a href="biblio.php?tri=TITRE&ordre=asc&ID_AUTEUR=<?php echo $ID_AUTEUR; ?>">+</a>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 47 Messages

26 janv. 2010, 21:42

Ça marche !!! Grâce à toi, le code permet parfaitement de faire ce que je voulais :lol:. Merci infiniment pour ta patience :wink: .

Petit nouveau ! | 6 Messages

29 août 2010, 12:15

Bonjour,
je me sers de ce sujet ancien car j'y ai trouvé beaucoup de codes dont j'avais besoin. Je crois que son créateur avait en tête le même type de projet que moi, puisque je me fais une base de données de mes disques.
Je reprends donc le sujet car je coince quelque part... j'arrive à faire le tri ASC et DESC sur mes colonnes, ça fonctionne bien. Cependant, j'aimerais aussi que, lorsque je clique sur le nom de l'artiste, s'affichent uniquement les entrées relatives à cet artiste.

Par exemple, en ce moment dans mon tableau j'ai ce résultat:
Artiste A - Album 1 - Année
Artiste A - Album 3 - Année
Artiste B - Album 9 - Année
...
Et j'aimerais qu'en cliquant sur Artiste A, il n'y aie plus que les entrées de cet artiste qui s'affichent.

J'ai donc repris le code proposé dans ce sujet mais au final, rien ne se produit dans ma page...
mon lien est du genre ?ARTISTE=artiste mais rien ne se produit.

Code : Tout sélectionner

// on se connecte à MySQL $db = mysql_connect('localhost', 'root', ''); // on sélectionne la base mysql_select_db('music',$db); $order = (iSset($_GET['ordre']) ? $_GET['ordre'] : null); $tri = (iSset($_GET['tri']) ? " ORDER BY " . $_GET['tri'].' '. $order : null); $ARTISTE = (iSset($_GET['ARTISTE']) ? $_GET['ARTISTE'] : null); $requete = "SELECT artiste,album,année,genre,label,pays FROM vinyles"; if ( $ARTISTE != null) { $requete .= "SELECT artiste,album,année,genre,label,pays FROM vinyles WHERE ARTISTE=". $ARTISTE; } $requete .= $tri; $resultat = mysql_query($requete) or die('Erreur SQL !'.$requete.'<br>'.mysql_error()); //TABLEAU echo '<table border="0">'; echo '<thead>'; echo '<tr> <th>Artiste <a href="?view=vinyle&tri=ARTISTE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ARTISTE&ordre=desc"> <img src="img/triUP.png"></a></th> <th>Album <a href="?view=vinyle&tri=ALBUM&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ALBUM&ordre=desc"> <img src="img/triUP.png"></a></th> <th>Année <a href="?view=vinyle&tri=ANNéE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ANNéE&ordre=desc"> <img src="img/triUP.png"></a></th> <th>Pays <a href="?view=vinyle&tri=PAYS&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=PAYS&ordre=desc"> <img src="img/triUP.png"></a></th> <th>Genre <a href="?view=vinyle&tri=GENRE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=GENRE&ordre=desc"> <img src="img/triUP.png"></a></th> <th>Label <a href="?view=vinyle&tri=LABEL&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=LABEL&ordre=desc"> <img src="img/triUP.png"></a></th> </tr>'; '</thead>'; // on fait une boucle qui va faire un tour pour chaque enregistrement while($data = mysql_fetch_assoc($resultat)) { // on affiche les informations de l'enregistrement en cours echo '<tr><td><a href="#">'.$data['artiste'].'</a></td><td>'.$data['album'].'</td><td align="center">'.$data['année'].'</td><td align="center">'.$data['pays'].'</td><td align="center">'.$data['genre'].'</td><td align="center">'.$data['label'].'</td></tr>'; } '</table>'; // on ferme la connexion à mysql mysql_close();

J'ai essayé des tas de trucs mais rien ne se produit...
Merci pour vos réponses!
Modifié en dernier par BloodyM le 29 août 2010, 18:04, modifié 1 fois.

Petit nouveau ! | 6 Messages

29 août 2010, 17:56

SVP, j'ai vraiment besoin d'aide!

J'ai bien remarqué le Nota: si ARTISTE est numérique, il ne faut pas le délimiter avec des apostrophes en SQL et je crois que c'est ce qui change tout. En effet, si dans mon navigateur je tape: ?view=vinyle&ARTISTE='test' ça fonctionne mais si j'enlève les guillemets ' ' ça ne fonctionne plus.
J'ai essayé de placer des guillemets et modifier la syntaxe de toutes les manières mais rien ne fonctionne...

Et sinon je n'arrive pas non plus à faire mon lien
J'ai essayé des trucs du genre
&ID_AUTEUR=<?php echo $ARTISTE; ?>
mais ça reste dans le même état dans le navigateur...

Eléphanteau du PHP | 47 Messages

29 août 2010, 18:04

Bonjour,

Pour la requête, je ferai plutôt :
$requete  = "SELECT artiste,album,année,genre,label,pays FROM vinyles";
if ( $ID_ARTISTE != null) {
$requete .= "WHERE ARTISTE=". $ID_ARTISTE;
}
$requete .=  $tri;
Bon courage

Petit nouveau ! | 6 Messages

29 août 2010, 18:09

Salut, oui c'est aussi ce que j'ai fais par la suite. Ça n'a pas eu grande incidence... Je crois vraiment que le problème vient des guillemets et donc de ma syntaxe...
Je remets le code complet au cas où:
// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('music',$db);

$order = (iSset($_GET['ordre']) ? $_GET['ordre'] : null);
$tri = (iSset($_GET['tri']) ? " ORDER BY " . $_GET['tri'].' '. $order : null);
$ARTISTE = (iSset($_GET['ARTISTE']) ? $_GET['ARTISTE'] : null);

$requete  = "SELECT artiste,album,année,genre,pays,label FROM vinyles";
if ( $ARTISTE != null) { 
  $requete  .= " WHERE ARTISTE=" .$ARTISTE;
}
$requete .=  $tri;
$resultat = mysql_query($requete) or die('Erreur SQL !'.$requete.'<br>'.mysql_error());


//TABLEAU
echo '<table border="0">';
echo '<thead>';
echo '<tr>
    <th>Artiste <a href="?view=vinyle&tri=ARTISTE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ARTISTE&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Album <a href="?view=vinyle&tri=ALBUM&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ALBUM&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Année <a href="?view=vinyle&tri=ANNéE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ANNéE&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Pays <a href="?view=vinyle&tri=PAYS&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=PAYS&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Genre <a href="?view=vinyle&tri=GENRE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=GENRE&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Label <a href="?view=vinyle&tri=LABEL&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=LABEL&ordre=desc"> <img src="img/triUP.png"></a></th>
    
    </tr>';
    '</thead>';

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($resultat))
    {
    // on affiche les informations de l'enregistrement en cours
        echo '<tr><td><a href="?view=vinyle&ARTISTE=test">'.$data['artiste'].'</a></td><td>'.$data['album'].'</td><td align="center">'.$data['année'].'</td><td align="center">'.$data['pays'].'</td><td align="center">'.$data['genre'].'</td><td align="center">'.$data['label'].'</td></tr>';
    }
'</table>';
// on ferme la connexion à mysql
mysql_close();