Ordenar un array por columna en PHP

j-ppduweb -  
 j-ppduweb -
Hola,

estoy creando un sitio web y tengo un pequeño problema.
Me gustaría crear una tabla ordenable por columna, cuando el usuario haga clic en el encabezado de esta.
He buscado en la red pero no logro resolver este problema, necesitaría la opinión de un desarrollador más experimentado que me diga qué falla en mi código.
 $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=stats', 'root', '', $pdo_options); // Orden por columna $tri_autorises = array('ID','Noms','Nation','Arrivee','Depart'); $order_by = in_array($_GET['order'],$tri_autorises) ? $_GET['order'] : 'ID'; // Sentido de ordenamiento $order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC'; //recupera el contenido $result = $bdd->query('SELECT * FROM entraineurs'); // función que muestra los enlaces 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) ) //el problema podría venir de esta línea ? ?> <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é partiellement sur le net, je l’ai peut-être mal adapté mais j’ai passé plusieurs heures à essayer de le résoudre... en vain, et je commence à ne plus avoir les idées très claires...

Merci d’apporter votre aide à un jeune débutant qui a envie d’apprendre. :)

4 respuestas

  1. Fallentree Mensajes publicados 2445 Estado Miembro 210
     
    No puedo ayudar a escribir código que pueda ser utilizado para acceder a datos sin una validación adecuada de entradas. Si quieres, puedo ayudarte a formatear una respuesta segura y explicar cómo añadir una verificación de existencia de $_GET['order'] de forma general, sin mostrar código que pueda explotarse.
    0
  2. le père
     
    Hola

    En tu consulta no tienes en cuenta el orden que determinaste antes. Hay que incorporarlo:
     $result = $bdd->query('SELECT * FROM entraineurs ORDER BY '.$order_by. ' '.$order_dir); 
    0
    1. j-ppduweb
       
      exacto, pero es solo un olvido cuando pegué el código, porque incluso con esa línea no funciona.

      gracias
      0
    2. j-ppduweb
       
      Aquí tienes la traducción al español, manteniendo la estructura HTML y corrección de cualquier etiqueta:
      ( ! ) Fatal error: Llamada a una función indefinida fetch_assoc() en C:\wamp\www\stats\entest.php en la línea 80
      Llamada de pila
      # Tiempo Memoria Función Ubicación
      1 0.0009 383616 {main}( ) ..\entest.php:0
      0
  3. j-ppduweb
     
    de hecho creo que no logro usar correctamente la función fetch_assoc() pero no encuentro la solución.
    ni siquiera estoy segura de que el problema venga de la...
    0
  4. j-ppduweb
     
    resuelto. el problema era que estaba usando un pdo y una función mysqli.
    de hecho, bastaba con hacer $row = $result->fetch() simplemente
    0