Foros del Web » Programando para Internet » PHP »

código para ordenar las tablas por la columna seleccionada

Estas en el tema de código para ordenar las tablas por la columna seleccionada en el foro de PHP en Foros del Web. Buenas a todos, Tengo un php que presenta datos de una bd en mysql, y he estado intentando añadirle un código para hacer que se ...
  #1 (permalink)  
Antiguo 01/09/2011, 10:15
 
Fecha de Ingreso: agosto-2011
Mensajes: 11
Antigüedad: 12 años, 7 meses
Puntos: 0
código para ordenar las tablas por la columna seleccionada

Buenas a todos,

Tengo un php que presenta datos de una bd en mysql, y he estado intentando añadirle un código para hacer que se puedan ordenar las columnas ascendente y descendentemente, pero al ejecutarlo me dice que la consulta es inválida:

"Invalid query: Undeclared variable: 7ORDER"

Aquí está el todo el código:

Este es un archivo llamado tabla.php
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 .org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3 .org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title></title>
</head>

<body>

<p><?php
 //Connection
$GLOBALS['DB_IP'] = 'localhost';
$GLOBALS['DB_USER'] = 'root';
$GLOBALS['DB_PASS'] = '3456';
$GLOBALS['DB_NAME'] = 'prueba';
$GLOBALS['DB_TBL'] = 'hoja1';



$conn = mysql_connect($GLOBALS['DB_IP'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASS']) or die("Unable to connect: " . mysql_error() . "<br>");
    $database = mysql_select_db($GLOBALS['DB_NAME']) or die( "Unable to select database<br>");
Este es un archivo llamado busquedas.php
Código:
<?php
//INCLUYO LA HOJA DE ESTILOS
?>
<link href="css/paginacion.css" type="text/css" rel="stylesheet">
<?
include('tabla.php');

//AL PRINCIPIO COMPRUEBO SI HICIERON CLICK EN ALGUNA PÁGINA
if(isset($_GET['page'])){
    $page= $_GET['page'];
}else{
//SI NO DIGO Q ES LA PRIMERA PÁGINA
    $page=1;
}

//ACA SE SELECCIONAN TODOS LOS DATOS DE LA TABLA
$consulta="SELECT * FROM ".$GLOBALS['DB_TBL'];
$datos=mysql_query($consulta,$conn);

//MIRO CUANTOS DATOS FUERON DEVUELTOS
$num_rows=mysql_num_rows($datos);

//ACA SE DECIDE CUANTOS RESULTADOS MOSTRAR POR PÁGINA , EN EL EJEMPLO PONGO 15
$rows_per_page= 7;

//CALCULO LA ULTIMA PÁGINA
$lastpage= ceil($num_rows / $rows_per_page);

//COMPRUEBO QUE EL VALOR DE LA PÁGINA SEA CORRECTO Y SI ES LA ULTIMA PÁGINA
$page=(int)$page;
if($page > $lastpage){
    $page= $lastpage;
}
if($page < 1){
    $page=1;
}

//PARA ORDENAR LAS COLUMNAS

$order_by = (isset($_GET['order_by'])) ? $_GET['order_by'] : 'Title';
    $sorting = (isset($_GET['sorting'])) ? $_GET['sorting'] : 'desc';
    switch($sorting){
  case "asc":
    $sort = 'desc';
    break;
  case "desc":
    $sort = 'asc';
    break;
    }
    

//CREO LA SENTENCIA LIMIT PARA AÑADIR A LA CONSULTA QUE DEFINITIVA
$limit= 'SELECT * FROM '.$GLOBALS['DB_TBL'].' LIMIT '. ($page -1) * $rows_per_page . ',' .$rows_per_page .'ORDER BY '.$order_by.' $sort';


//REALIZO LA CONSULTA QUE VA A MOSTRAR LOS DATOS (ES LA ANTERIO + EL $limit)
$consulta = $limit;
$resultados=mysql_query($consulta);

if(!$resultados){
        //SI FALLA LA CONSULTA MUESTRO ERROR
 die('Invalid query: ' . mysql_error());
}else{
      //SI ES CORRECTA MUESTRO LOS DATOS
      ?> 
<p align=left><? echo $num_rows; ?> resultados.</p>
<table border=1> <? 
$pagename="tabla";
print("<TR>");
    for($column_num = 0; $column_num < $column_count; $column_num++) {
        $field_name = mysql_field_name($resultados, $column_num);
        echo ("<TH><a href=\"$pagename.php?order_by=$field_name&sorting=$sort\">$field_name</a></TH>");
    } ?>
        <tbody>
    <? while($row = mysql_fetch_array($resultados)){  ?>
        <tr><td><? echo $row['0']; ?> </td><td> <? echo "<img src="."flags/".$row[1].".png title=$row[1] alt=$row[1]>"; ?> </td><td> <? echo $row['2']; ?> </td><td> <? echo $row['3']; ?> </td><td> <? echo $row['4']; ?> </td><td> <? echo $row['5']; ?> </td><td> <? echo $row['6']; ?> </td></tr>
       <?  } ?>
      </tbody>
      </table>
   <?   
      
	    
?>
<?
//UNA VEZ Q MUESTRO LOS DATOS TENGO Q MOSTRAR EL BLOQUE DE PAGINACIÓN SIEMPRE Y CUANDO HAYA MÁS DE UNA PÁGINA

if($num_rows != 0){
   $nextpage= $page +1;
   $prevpage= $page -1;
?><ul id="pagination-flickr"><?
//SI ES LA PRIMERA PÁGINA DESHABILITO EL BOTON DE PREVIOUS, MUESTRO EL 1 COMO ACTIVO Y MUESTRO EL RESTO DE PÁGINAS
 if ($page == 1) {
    ?>
      <li class="previous-off">&laquo; Previous</li>
      <li class="active">1</li> <?
    for($i= $page+1; $i<= $lastpage ; $i++){?>
            <li><a href="busquedas.php?page=<? echo $i;?>"><? echo $i;?></a></li>
 <? }
       //Y SI LA ULTIMA PÁGINA ES MAYOR QUE LA ACTUAL MUESTRO EL BOTON NEXT O LO DESHABILITO
    if($lastpage >$page ){?>       
      <li class="next"><a href="busquedas.php?page=<? echo $nextpage;?>" >Next &raquo;</a></li><?
    }else{?>
      <li class="next-off">Next &raquo;</li>
<?  }
 } else {
	     //EN CAMBIO SI NO ESTAMOS EN LA PÁGINA UNO HABILITO EL BOTON DE PREVIUS Y MUESTRO LAS DEMÁS
    ?>
      <li class="previous"><a href="busquedas.php?page=<? echo $prevpage;?>"  >&laquo; Previous</a></li><?
      for($i= 1; $i<= $lastpage ; $i++){
                       //COMPRUEBO SI ES LA PÁGINA ACTIVA O NO
            if($page == $i){
        ?>  <li class="active"><? echo $i;?></li><?
            }else{
        ?>  <li><a href="busquedas.php?page=<? echo $i;?>" ><? echo $i;?></a></li><?
            }
      }
         //SI NO ES LA ÚLTIMA PÁGINA ACTIVO EL BOTON NEXT    
      if($lastpage >$page ){    ?> 
      <li class="next"><a href="busquedas.php?page=<? echo $nextpage;?>">Next &raquo;</a></li><?
      }else{
    ?> <li class="next-off">Next &raquo;</li><?
      }
 }
}
}
?></ul></div>
Me he dado cuenta de que ese "7" que aparece en el error es el valor de la variable $rows_per_page

Tal vez alguno de vosotros podrá decirme en qué me estoy equivocando. Hace poco que utilizo php y todavía estoy bastante verde.

Muchas gracias :)
  #2 (permalink)  
Antiguo 01/09/2011, 10:36
Avatar de bitbow  
Fecha de Ingreso: julio-2006
Ubicación: Distrito Federal
Mensajes: 635
Antigüedad: 17 años, 9 meses
Puntos: 34
Respuesta: código para ordenar las tablas por la columna seleccionada

Saludos, imprime tu sentencia sql y te daras cuenta si te falta un espacio, que eso es lo que me parece.

Suerte.
__________________
El ego es el mayor enemigo de un hombre inteligente.
  #3 (permalink)  
Antiguo 01/09/2011, 10:39
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: código para ordenar las tablas por la columna seleccionada

Te falta un espacio antes del ORDER BY o sino se estaría pegando con $rows_per_page y esta variable no te funciona en comillas simples:

' $sort'
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 01/09/2011, 11:02
 
Fecha de Ingreso: agosto-2011
Mensajes: 11
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: código para ordenar las tablas por la columna seleccionada

Muchas gracias por vuestra rápida respuesta. He añadido un especio antes de ORDER BY y he cambiado las comillas simples por las dobles así:

Código:
//CREO LA SENTENCIA LIMIT PARA AÑADIR A LA CONSULTA QUE DEFINITIVA
$limit= 'SELECT * FROM '.$GLOBALS['DB_TBL'].' LIMIT '. ($page -1) * $rows_per_page . ',' .$rows_per_page .' ORDER BY 

'.$order_by." $sort";
pero ahora me da este error: "Invalid query: 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 'ORDER BY Title asc' at line 1"

¿Alguna idea de por qué puede ser?
  #5 (permalink)  
Antiguo 02/09/2011, 10:05
Avatar de bitbow  
Fecha de Ingreso: julio-2006
Ubicación: Distrito Federal
Mensajes: 635
Antigüedad: 17 años, 9 meses
Puntos: 34
Respuesta: código para ordenar las tablas por la columna seleccionada

De igual forma como te comentaba, has un echo a la sentencia SQL ya armada para que puedas apreciar cual es el problema.
__________________
El ego es el mayor enemigo de un hombre inteligente.

Etiquetas: código, columna, html, mysql, sql, tabla, tablas, variables
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 20:02.