Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] duda con sort de bd

Estas en el tema de duda con sort de bd en el foro de PHP en Foros del Web. Hola, quiero mostrar los datos de x tabla de mi db en mysql en tablas html (tipo datagrid en vb.net) y ordenarlos segun peticion de ...
  #1 (permalink)  
Antiguo 01/08/2013, 21:00
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 11 años, 10 meses
Puntos: 96
duda con sort de bd

Hola, quiero mostrar los datos de x tabla de mi db en mysql en tablas html (tipo datagrid en vb.net) y ordenarlos segun peticion de la url a traves de $_GET['sort'] de manera ascendiente

si la url fueses asi: asdf.php?sort=id segun yo deberia ir asi la consulta,

Código PHP:
Ver original
  1. $sort = $_GET['sort']
  2. $query="SELECT * FROM tabla ORDER BY ".$sort. "ASC";
  3. $res= mysql_query($query, $conn);
  4. while($row= mysql_fetch_assoc($res){
  5. //todo lo que necesite para la tabla
  6. }

muestra los datos ordenados segun el id de la fila, o segun el nombre del campo, estara bien asi?
  #2 (permalink)  
Antiguo 02/08/2013, 01:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.993
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: duda con sort de bd

Qué tardará más?
a) Que tú mismo realices las pruebas y veas si funciona o no
b) Esperar que alguien responda tu duda en el foro

No lo tomes a mal, si realmente quieres programar, debes tener iniciativa, de lo contrario, estarás preguntando en el foro por cualquier duda y perderás tiempo valioso que podrías dedicar a avanzar con tu proyecto.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 02/08/2013, 10:53
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 11 años, 10 meses
Puntos: 96
Respuesta: duda con sort de bd

En el momento que formule la pregunta no tenia como probarlo, llegue a casa lo probe y no funciono, ponga lo qye ponga comi parametro en la url lo ordena por ID ASC, se que algo esta fallando en la parte del $_GET['sort'], pero ahora no tengo como probarlo, solo quiero saber donde esta el error, gracias.
  #4 (permalink)  
Antiguo 02/08/2013, 11:24
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 8 años, 4 meses
Puntos: 397
Respuesta: duda con sort de bd

Hola si has notado de que tienes muchos errores de sintaxis, no has depurado tus consultas y que no estan bien formulados tu sql (teniendo en cuenta de que tome el mismo codigo que diste)

Si no tienes donde probar mal por ti ya que con esa actitud de solo quiero saber que esta mal no obtendras nada, cuando hayas depurado tu codigo y verificar que el sql esta bien formado y lo PRUEBAS nos muestras y te podemos seguir orientando

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 02/08/2013, 16:22
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 11 años, 10 meses
Puntos: 96
Respuesta: duda con sort de bd

Hola, les comento que he realizado varias pruebas y he encontrado la solucion, aunque es momentanea porque me falta agregarle seguridad al script, aqui va:

Código PHP:
Ver original
  1. <?php
  2. if ($_GET['sort']== NULL){
  3. $order= "ID";
  4. }else{
  5. $order=$_GET['sort'];
  6. $order=strtoupper($order);
  7. }
  8. include('config.php');
  9. $q="SELECT * FROM noticias ORDER BY ".$order." DESC";
  10. $r=mysql_query($q,$conexion);
  11. $i=0;
  12. while($row=mysql_fetch_array($r)){
  13. $id=$row['ID'];
  14. $title=$row['TITULO'];
  15. echo $id." el ".$title;
  16. echo "<br/>";
  17. $i++;
  18. }
  19. ?>

Estoy usando strtoupper porque el nombre de los campos estan en mayusculaz y por el momento solo lo he probado con 2 campos, tambien tengo hacer pruebas para despues hacer el sort asc o desc, gracias a ambos por los consejos
  #6 (permalink)  
Antiguo 02/08/2013, 20:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.993
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: duda con sort de bd

Excelente, la iniciativa deja buenos resultados!

Sólo un comentario, si 'sort' no fue proporcionada en GET seguramente obtendrás un mensaje de error con ese if($_GET['sort'] == NULL) porque no puedes comparar una variable (o índice de array) no definida.

Te sugiero usar asignación ternaria, que es como un if, pero en una sola línea, y realizando la comparación de forma adecuada:

Código PHP:
Ver original
  1. // Con if normal
  2. (if(empty($_GET['sort'])) {
  3.      // Empty devuelve verdadero si la variable (o índice):
  4.      //  No está definida, su valor es null, cero, false o cadena vacía
  5.      $order = 'ID';
  6. } else {
  7.      $order = strtoupper($_GET['sort']);
  8. }
  9.  
  10. // Con asignación ternaria:
  11. $order = (empty($_GET['sort'])) ? 'ID' : strtoupper($_GET['sort']);

Ahora, la cuestión de seguridad es muy fácil de resolver creando un array con los campos disponibles para ordenar, ejemplo:

Código PHP:
Ver original
  1. $campos = array('ID', 'NOMBRE', 'CATEGORIA', 'ETC');
  2.  
  3. // Defines el orden:
  4. $order = (empty($_GET['sort'])) ? 'ID' : strtoupper($_GET['sort']);
  5.  
  6. // Haces una validación
  7. if(!in_array($order, $campos)) {
  8.        // El campo para ordenar no es válido
  9.        // Aquí puedes generar un mensaje de error
  10.        // O simplemente asignar el campo por default
  11.        $order = 'ID';
  12. }

Lo del ASC o DESC es mucho más sencillo si adaptas lo mismo que hagas para el orden.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 03/08/2013, 15:29
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 11 años, 10 meses
Puntos: 96
Respuesta: duda con sort de bd

Hola, he probado y funciona la primera parte, intente agregar al script lo de ASC y DESC pero no funciona,

Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <?php
  4. $ord = array('ASC', 'DESC');
  5. $campos = array('ID', 'TITULO', 'DESCRIPCION', 'FOTO', 'VIDEO', 'HORA', 'FECHA');
  6. // Defines el orden:
  7. $order = (empty($_GET['sort'])) ? 'ID' : strtoupper($_GET['sort']);
  8. $sorter= (empty($_GET['sorter'])) ? 'ASC' : strtoupper($_GET['sorter']);
  9. // Haces una validación
  10. if(!in_array($order, $campos)) {
  11.        $order = 'ID';
  12. }
  13. if(!in_array($sorter, $ord)) {
  14. $sorter= 'ASC';
  15. }
  16. include('config.php');
  17. ?>
  18. </head>
  19. <body>
  20. <table border="2">
  21. <?php
  22. $q="SELECT * FROM noticias ORDER BY '$sort' '$sorter'";
  23. $r=mysql_query($q,$conexion);
  24. $i=0;
  25. while($row=mysql_fetch_assoc($r)){
  26. $id=$row['ID'];
  27. $title=$row['TITULO'];
  28. $des= $row['DESCRIPCION'];
  29. echo "<tr>";
  30. echo "<td>".$id."</td><td>".$title."</td><td>".substr($des,0, 10)."</td>";
  31. echo "</tr>";
  32. $i++;
  33. }
  34. ?>
  35. </table>
  36. </body>
  37. </html>
Si no pongo ningun parametro en la url lo ordena por ID y ASC. Y si pongo parametros sigue igual
Pienso que el error esta en la consulta
Código PHP:
Ver original
  1. $q="SELECT * FROM noticias ORDER BY '$order' '$sorter'";

he puesto las. Variables con comilla simple y con doble comilla perk no funciona
  #8 (permalink)  
Antiguo 03/08/2013, 22:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.993
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: duda con sort de bd

Esas dos variables se supone que corresponden al nombre de un campo y tipo de orden, no son un valor que se vaya a guardar, entonces... no necesitan comillas, ni dobles ni simples.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 04/08/2013, 21:29
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 11 años, 10 meses
Puntos: 96
Respuesta: duda con sort de bd

Bueno, despues de muchas pruebas pude conseguir lo que queria, era problema de comillas el asunto :D

Código PHP:
Ver original
  1. <?php
  2. $campos = array('ID', 'TITULO', 'DESCRIPCION', 'FOTO', 'VIDEO', 'HORA', 'FECHA');
  3. $order = (empty($_GET['sort'])) ? 'ID' : strtoupper($_GET['sort']);
  4. if(!in_array($order, $campos)) {
  5.       $order = 'ID';
  6. }
  7. $orden= array('ASC', 'DESC');
  8. $sorter= (empty($_GET['sorter'])) ? 'ASC' : strtoupper($_GET['sorter']);
  9. if(!in_array($sorter, $orden)){
  10.     $sorter= 'ASC';
  11. }
  12. include('config.php');
  13. ?>
  14. <table border="2">
  15. <?php
  16. $q="SELECT * FROM noticias ORDER BY ".$order." ".$sorter;

Gracias por la ayuda y la paciencia :D

Etiquetas: bd, html, mysql, select, sort, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:15.