Foros del Web » Programando para Internet » PHP »

Xajax con order by y limit

Estas en el tema de Xajax con order by y limit en el foro de PHP en Foros del Web. Hola a todos, estoy intentando hacer un paginado de resultados con xajax y tengo un problema muy extraño. Y lo es porque me funciona en ...
  #1 (permalink)  
Antiguo 24/02/2009, 01:28
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Xajax con order by y limit

Hola a todos,

estoy intentando hacer un paginado de resultados con xajax y tengo un problema muy extraño. Y lo es porque me funciona en local y no cuando lo subo al host.

Para que me salgan determinados resultados, le pongo la cláusula LIMIT a mi sentencia sql, y no me muestra ningún resultado, y sin ella, me muestra todos los resultados, pero claro, no es lo que yo quiero.

He probado Paginator y me pasa lo mismo, me funciona en local, pero cuando lo subo al host obtengo los mismos resultados, no me muestra ninguno, ni siquiera el paginado.

Solo me funciona de dos formas, una es poniendo un alert de lo que quiero mostrar (que eso no es lo que quiero), y la otra es poniendo un paginado de solo 8 registros, que tampoco es lo que quiero pero ya llevo mucho tiempo con esto.

¿Alguien tiene alguna idea de lo que me pueda pasar?

mi sentencia sql es tal que así:

Código:
sqlSelect="select * from comentarios where activo=1 order by 1 limit ".$inicio.",".$cantidad;
y lo que he llegado a pensar es que, el order by con el limit es demasiado lento, y como con xajax el proceso es asincrono, cuando hago el assign para mostrar los resultados quizá no se ha terminado el proceso de los datos, y alomejor por eso solo me deja mostrar 8 resultados, y que en local me funciona porque es mas rápido. Es por buscarle un porqué, porque ya me estoy volviendo loco.

Si fuera esta la razón, ¿alguien sabe como optimizar el order by con el limit?

Si necesitais que ponga mas código, decídmelo.

gracias
  #2 (permalink)  
Antiguo 24/02/2009, 01:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Xajax con order by y limit

Código php:
Ver original
  1. $sqlSelect="select * from comentarios where activo=1 order by 1 limit $inicio,$cantidad";
  2.  
  3. // Devuelve algun error?
  4. $result = mysql_query($sqlSelect) or die(mysql_error());
  5.  
  6. // Intenta imprimir lo siguiente:
  7. die("Inicio: $inicio - cantidad: $cantidad - Registros leidos: " . mysql_num_rows($result));

Cuentanos lo que obtienes y tal vez sea mas facil encontrar el error.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 24/02/2009, 02:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: Xajax con order by y limit

www.php.net/register_globals
  #4 (permalink)  
Antiguo 24/02/2009, 03:26
 
Fecha de Ingreso: febrero-2008
Mensajes: 20
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Xajax con order by y limit

Así a bote pronto parece tal como dice Darkj que es un problema con la directriz register_globals de PHP, que en tu local esten a ON y arriba a OFF.

Prueba a recoger tus variables por $_GET antes de crear el SQL
$inicio = $_GET['inicio'];
$cantidad = $_GET['cantidad']

Espero te sirva de ayuda.
  #5 (permalink)  
Antiguo 24/02/2009, 10:23
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

Gracias por vuestra ayuda.
El caso es que al utilizar xajax, las variables las paso como parámetros de una función. Y tampoco se como cambiar la directriz register_globals a On, ni si puedo hacerlo en mi host. Me ha parecido entender que por defecto están a On.

Les pongo algo de código:

Código PHP:
require('../xajax/xajax_core/xajax.inc.php');

$xajax = new xajax(); 

//esta es la función que llamo con xajax
function listar_comentarios($inicio,$cantidad){
    
//aquí van entre otras el paginado

    
$res=new xajaxResponse();

    
$sqlselect "select * from comentarios where activo=1 order by 1 desc limit $inicio,$cantidad";

    
$result=mysql_query($sqlselect $conexion) or die ("Error en la consultal".mysql_error());

   
$salida listar_leidos($result); //llamada para listar
   
$res->assign("listado","innerHTML",$salida); 
   return 
$res;
}

//función que me crea la salida
function listar_leidos($result){
   
   
$salida="<table><tbody>";
   while (
$row=mysql_fetch_array($result)){

   
$salida .= crearFila($row);  // esto no es necesario que lo ponga
    
    
}
   
$salida .="</tbody></table>";
   return 
$salida;
}

$xajax->register(XAJAX_FUNCTION,"listar_comentarios");

$xajax->processRequest(); 
He procurado poner solo lo esencial, para no llenar de código, creo que con eso sería suficiente para entender cómo lo tengo.
Y si el problema es cambiar la register_globals, si me podeis decir como se hace.
Gracias de antemano.
  #6 (permalink)  
Antiguo 25/02/2009, 04:52
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

Quiero rectificar a que xajax es asincrono en el modo cliente - servidor, asique ese no sería el problema pues todo el proceso se hace en servidor, y ahí es lineal.

Y el caso de las variables globales, no se si será esa la cuestión porque cuando a mi sentencia sql no le pongo limit, no tengo ningún problema, pero me salen todos los resultados, y no quiero eso. No tengo ni idea que pueda pasar.
  #7 (permalink)  
Antiguo 25/02/2009, 11:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Xajax con order by y limit

Haz lo que te dice edualven aqui, inicializa las variables; si la ejecucion asincrona es en modo GET, ese codigo te servira muy bien, si es en modo POST, solo cambias $_GET por $_POST y listo.

edualven tambien te comento que tal vez en tu localhost tienes variables globales en on (por eso te funciona sin declarar las variables) y en el servidor estan por default en off por cuestiones de seguridad y no es recomendable activarlas.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 26/02/2009, 01:12
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

Gracias Triby por tu ayuda. Ya probé inicializando las variables de las dos maneras, con $_GET y $_POST, y tampoco me funciona.

Tampoco creo que sea problema de inicializar variables puesto que si mi sentencia sql la compongo sin la cláusula LIMIT, me funciona también en servidor, pero me saca todos los registros. Es sólo con el límit cuando no me funciona.

De todas formas, por probar, cómo puedo cambiar a on las variables globales en el servidor?
  #9 (permalink)  
Antiguo 26/02/2009, 01:35
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Xajax con order by y limit

Eso es muy dificil, la mayoria de los servidores no permiten hacerlo por el gran riesgo de seguridad que representa tener register_globals en on.

Entonces de donde salen $inicio y $cantidad... simplemente no entiendo, tienen que llegar por GET o POST. Podrias poner el codigo donde mandas llamar listar_comentarios?
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 26/02/2009, 01:57
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

OK, el código no lo tengo pues estoy en el trabajo y con los métodos tan limitados que tengo en el acceso a internet no puedo conseguir los archivos por ftp. Intentaré explicartelo lo mejor posible, y si no habrá que esperar a llegar a casa.

Las variables $inicio y $cantidad las paso por parámetros en una función xajax. Esta es la llamada a la función.

Código PHP:
//...
//código
//...
<li onclick="xajax_listar_comentarios(0,15)">Bandeja de entrada</li>
//...
//código
//... 
y esta es la función xajax que recoje los parámetros

Código PHP:

function listar_comentarios($inicio,$cantidad){
   
//y aquí el código que puse en un post anterior

Se que todo es muy raro, en realidad ha habido 3 casos en los que me salen datos, pero ninguno me convence.
Uno cuando no le pongo la cláusula LIMIT en el sql, me salen todos los resultados.
Otro cuando justo antes de hacer el assign le pongo un alert para ver el string formado, cuando le doy a aceptar me funciona, pero no quiero ese alert ahí, si no, no me funciona.
Y el otro caso es cuando limito el LIMIT a sólo 6 resultados, si le pongo uno mas, ya no me funciona, este es el caso que estoy utilizando por ahora, pero tampoco me convence, son muy pocos resultados. Pensé que pudiera ser por algo de memoria, o que el string es demasiado grande, no conozco mucho xajax ni php, pero esa teoria de deshace cuando al no ponerle LIMIT me salen todos los registros y me los muestra sin problemas.

No se si esta información pueda ayudaros a ver algo. Yo no se ni por donde buscar, a veces creo que mi host (que es gratuito) está limitado en cosas que desconozco, pero aun así, no veo lógica por ningún lado.
  #11 (permalink)  
Antiguo 26/02/2009, 02:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Xajax con order by y limit

Ok, ahora solo falta ver en javascript la funcion xajax_listar_comentarios y con que metodo ejecuta la llamada.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 26/02/2009, 07:45
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

OK, no lo puse para no repetirlo porque la habia puesto en uno de los post anteriores, pero bueno, lo pongo de nuevo..

Código PHP:
require('../xajax/xajax_core/xajax.inc.php'); 

$xajax = new xajax();  

//esta es la función que llamo con xajax 
function listar_comentarios($inicio,$cantidad){ 
    
//aquí van entre otras el paginado 

    
$res=new xajaxResponse(); 

    
$sqlselect "select * from comentarios where activo=1 order by 1 desc limit $inicio,$cantidad"

    
$result=mysql_query($sqlselect $conexion) or die ("Error en la consultal".mysql_error()); 

   
$salida listar_leidos($result); //llamada para listar 
   
$res->assign("listado","innerHTML",$salida);  
   return 
$res


//función que me crea la salida 
function listar_leidos($result){ 
    
   
$salida="<table><tbody>"
   while (
$row=mysql_fetch_array($result)){ 

   
$salida .= crearFila($row);  // esto no es necesario que lo ponga 
     
    

   
$salida .="</tbody></table>"
   return 
$salida


$xajax->register(XAJAX_FUNCTION,"listar_comentarios"); 

$xajax->processRequest(); 
  #13 (permalink)  
Antiguo 27/02/2009, 01:48
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

Probe poniendo dentro de la función $_GET[$inicio] y $_GET[$cantidad] pero no me daba ningún resultado. ¿Está mal hecho?
  #14 (permalink)  
Antiguo 27/02/2009, 15:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Xajax con order by y limit

Se supone que XAJAX registra (o crea?) la funcion javascript para generar la llamada, seria bueno ver el codigo fuente en el navegador para tener un poco mas donde buscar el error.
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 02/03/2009, 01:53
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

La llamada ajax desde el navegador también la puse:

Código PHP:
//... 
//código 
//... 
<li onclick="xajax_listar_comentarios(0,15)">Bandeja de entrada</li
//... 
//código 
//... 
Simplemente es una lista donde le envio los parámetros 0 como $inicio y 15 como $cantidad. No es exactamente así como lo tengo porque meto clases pero mas o menos. Además de estar declarado el uso de xajax en el HEAD, que eso no lo pongo porque no recuerdo, ya que no tengo el código a la vista.

No se si es esto a lo que te refieres, en realidad la llamada a la función listar_comentarios la hago desde el código html de esta manera, le paso esos dos parámetros, y lo recibo de la manera que he puesto anteriormente.

Muchas gracias por tu ayuda Triby.
  #16 (permalink)  
Antiguo 02/03/2009, 03:01
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

Y también registré la función en el código servidor:

Código PHP:
$xajax->register(XAJAX_FUNCTION,"listar_comentarios"); 
Todo está puesto en los códigos anteriores, creo que el proceso completo está todo puesto. El caso es que todo me funciona perfectamente en local. Lo que no entiendo es qué diferencia puede haber al correrlo desde el host.
Porque si el problema fuera de la inicialización de las variables, tampoco se me verían los 6 primeros registros.
Y si el problema fuera de tamaño o algo así, tampoco me saldrían todos los registros si no le pongo el limit.
Creo que es una mezcla de los dos, del tamaño del string que se forma cuando uso la cláusula LIMIT, pero no entiendo porqué ni como solucionarlo.
  #17 (permalink)  
Antiguo 03/03/2009, 13:05
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Xajax con order by y limit

Creo que se donde está el problema pero no se como solucionarlo :s.
Resulta que, cuando pongo un límite pequeño, o no le pongo LIMIT, me funciona bien. Es solo cuando hay una cantidad suficiente que, quizá la cláusula LIMIT tiene un poco de retardo, cuando no me funciona.

Al principio pensé que podía ser de la asincroneidad, pero fallo mio porque en servidor todo el proceso es síncrono, es solo cliente - servidor lo que es asincrono.
El problema que hay (creo, tampoco estoy seguro ya) es que, yo utilizo un host gratuito, que me inserta una línea de publicidad mediante varios divs y una tabla. Yo no se cuando me inserta eso en mi código, solo se que está pues lo veo en el código generado. Y cuando hago la llamada ajax, si tardo mucho, (tampoco debería porque ya esta visualizada la publicidad), no se porqué me incrusta todo el código de esa publicidad en la llamada. Y eso es lo que no le gusta a xajax que se queda pillado.

Si alguien sabe de lo que estoy hablando, me pueda decir que puedo hacer con eso. No se si me he explicado bien, ni siquiera yo lo tengo muy claro.

Gracias
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 04:24.