Php trier un tableau par colonne

Fermé
j-ppduweb - 30 mars 2011 à 15:15
 j-ppduweb - 30 mars 2011 à 20:19
Bonjour,

je suis en train de creer un site internet et j'ai un petit soucis.
Je voudrais créer un tableau triable par colonne, lorsque l'utilisateur cliquera sur l'entête de cette dernière.
J'ai recherché sur le net mais je n'arrive pas a résoudre ce problème, j'aurais besoin d'un avis d'un développeur plus confirmé que moi pour me dire ce qui cloche dans mon code.
	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$bdd = new PDO('mysql:host=localhost;dbname=stats', 'root', '', $pdo_options);

// Tri sur colonne
$tri_autorises = array('ID','Noms','Nation','Arrivee','Depart');
$order_by = in_array($_GET['order'],$tri_autorises) ? $_GET['order'] : 'ID';

// Sens du tri
$order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC';
//récupère le contenu 
    $result = $bdd->query('SELECT * FROM entraineurs');
// fonction qui affiche les liens

function sort_link($text, $order=false)

{
    global $order_by, $order_dir;
    if(!$order)
        $order = $text;
    $link = '<a href="?order=' . $order;
    if($order_by==$order && $order_dir=='ASC')
        $link .= '&inverse=true';
    $link .= '"';
    if($order_by==$order && $order_dir=='ASC')
        $link .= ' class="order_asc"';
    elseif($order_by==$order && $order_dir=='DESC')
        $link .= ' class="order_desc"';
    $link .= '>' . $text . '</a>';
    return $link;
}
// Affichage
?>
<table>
    <tr>
        <th><?php echo sort_link('ID', 'ID') ?></th>
        <th><?php echo sort_link('Noms', 'Noms') ?></th>
        <th><?php echo sort_link('Nation', 'Nation') ?></th>
        <th><?php echo sort_link('Arrivee', 'Arrivee') ?></th>
        <th><?php echo sort_link('Depart', 'Depart') ?></th>
    </tr>
<?php while( $row=fetch_assoc($result) )  //le probleme viendrait de cette ligne ?
?> 
    <tr>
        <td><?php echo $row['ID'] ?></td>
        <td><?php echo $row['Noms'] ?></td>
        <td><?php echo $row['Nation'] ?></td>
        <td><?php echo $row['Arrivee'] ?></td>
        <td><?php echo $row['Depart'] ?></td>
    </tr>

<?php endwhile ?>

</table>


C'est un code récupéré en partie sur le net, je l'ai peut être mal adapter mais j'ai passer plusieurs heures a essayer de solutionner ce problème... en vain, et je commence à ne pu avoir les idées très claires...

Merci d'apporter votre aide à un jeune débutant qui a envie d'apprendre. :)
A voir également:

4 réponses

Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
Modifié par Fallentree le 30/03/2011 à 16:14
On sait vraiement pas d ou tu pars ?
Tu as une BdD avec des données et ce code qui t affiche un tableau.
Deja dans ce code
// Tri sur colonne 
$tri_autorises = array('ID','Noms','Nation','Arrivee','Depart'); 
$order_by = in_array($_GET['order'],$tri_autorises) ? $_GET['order'] : 'ID';

Il faut rejouter un test sur l'existance $_GET pour pouvoir l afficher une fois.
Ca doit etre la
0
Bonjour

Dans ta requête, tu ne tiens aucun compte de l'ordre que tu as déterminé avant. Il faut l'incorporer :
$result = $bdd->query('SELECT * FROM entraineurs ORDER BY '.$order_by.
' '.$order_dir);

0
exact, mais c'est juste un oubli quand j'ai coller le code, car même avec cette ligne ca ne fonctionne pas.

merci
0
voici l'erreur que j'ai
( ! ) Fatal error: Call to undefined function fetch_assoc() in C:\wamp\www\stats\entest.php on line 80
Call Stack
# Time Memory Function Location
1 0.0009 383616 {main}( ) ..\entest.php:0
0
en fait je crois que je n'arrive pas à utiliser correctement la fonction fetch_assoc() mais je ne trouve pas la solution.
je ne suis même pas sûre que le problème vient de la...
0
résolu. le problème venait que j'utilisais un pdo et une fonction mysqli.
en fait il suffisait de mettre $row = $result->fetch() tout simplement
0