Foros del Web » Programando para Internet » PHP »

Edrror en la paginación

Estas en el tema de Edrror en la paginación en el foro de PHP en Foros del Web. Hola buenas, Necesito hacer una paginación y me he bajado un sript ya hecho pero no me funciona. No se nada de php y me ...
  #1 (permalink)  
Antiguo 30/01/2007, 04:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Edrror en la paginación

Hola buenas,

Necesito hacer una paginación y me he bajado un sript ya hecho pero no me funciona. No se nada de php y me estoy volviendo loca en saber que puede ser el error.

Alguien me puede ayudar?

Os paso el codigo, ¿ok?


Gracias anticipadas

Código HTML:
<?php

function conectar() 
{ 
	$base_de_datos = "noticias";
	$db_usuario = "root"; 
	$db_password = ""; 
   
	if (!($link = mysql_connect("localhost", $db_usuario, $db_password))) 
	{ 
		echo "Error conectando a la base de datos."; 
		exit(); 
	} 
	if (!mysql_select_db($base_de_datos, $link)) 
	{ 
		echo "Error seleccionando la base de datos."; 
		exit(); 
	} 
	return $link; 
} 

$db = conectar();


$registros = 3;

if (!$pagina) { 
    $inicio = 0; 
    $pagina = 1; 
} 
else { 
    $inicio = ($pagina - 1) * $registros; 
} 


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Noticias</title>
<style>
	body { font-family: arial; font-size:12px}
</style>
</head>

<body>
	<?
	$resultados = mysql_query("SELECT id FROM articulos WHERE visible = 1");
	$total_registros = mysql_num_rows($resultados); 
	$resultados = mysql_query("SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros");	
	$total_paginas = ceil($total_registros / $registros); 		  			

	if($total_registros) {
	
		while($articulo=mysql_fetch_array($resultados)) {
			
			echo "<b>".$articulo["titulo"]."</b><br>";
			echo "<font color='#666666'>".$articulo["descripcion"]."</font><br><br><br>";
			
		}
		
	} else {
		echo "<font color='darkgray'>(sin resultados)</font>";
	}
	
	mysql_free_result($resultados);				
	
	if($total_registros) {
		
		echo "<center>";
		
		if(($pagina - 1) > 0) {
			echo "<a href='paginacion.php?pagina=".($pagina-1)."'>< Anterior</a> ";
		}
		
		for ($i=1; $i<=$total_paginas; $i++){ 
			if ($pagina == $i) 
				echo "<b>".$pagina."</b> "; 
			else
				echo "<a href='paginacion.php?pagina=$i'>$i</a> "; 
		}
	  
		if(($pagina + 1)<=$total_paginas) {
			echo " <a href='paginacion.php?pagina=".($pagina+1)."'>Siguiente ></a>";
		}
		
		echo "</center>";
		
	}
	?>
</body>
</html>
<? mysql_close($db);?> 
  #2 (permalink)  
Antiguo 30/01/2007, 04:30
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 5 meses
Puntos: 3
Re: Edrror en la paginación

Hola goizgoiz!Podrias mostrar el error que te muestra? Asi es mas facil averiguar donde puede estar.Un saludo
  #3 (permalink)  
Antiguo 30/01/2007, 04:34
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Cita:
"; echo "".$articulo["descripcion"]."


"; } } else { echo "(sin resultados)"; } mysql_free_result($resultados); if($total_registros) { echo "
"; if(($pagina - 1) > 0) { echo "< Anterior "; } for ($i=1; $i<=$total_paginas; $i++){ if ($pagina == $i) echo "".$pagina." "; else echo "$i "; } if(($pagina + 1)<=$total_paginas) { echo " Siguiente >"; } echo "
"; } ?>
esto es lo que aparece. No sale en forma de error ni nada por el estilo. Es que se ven trozos del código.

Que puede ser?
  #4 (permalink)  
Antiguo 30/01/2007, 06:42
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 5 meses
Puntos: 3
Re: Edrror en la paginación

Revisa las comillas, creo que puede estar el error hay, por ejemplo tu tienes:
echo "<b>".$pagina."</b> ";
Mejor seria asi:
echo '<b>".$pagina."</b>';

Otras que has puesto:
echo "<font color='#666666'>".$articulo["descripcion"]."</font><br><br><br>";

Sria mejor asi:
echo '<font color="#666666">".$articulo['descripcion']."</font><br><br><br>';
Revisa las comillas y haber que pasa, ya diras como te ha ido.
Un saludo
  #5 (permalink)  
Antiguo 30/01/2007, 08:40
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Este es el error que me aparece ahora.

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\ejemplo_paginacion\paginacion.php on line 56

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\wamp\www\ejemplo_paginacion\paginacion.php on line 67

".$pagina." $i $i Siguiente >


Por lo menos me sale error.

Código PHP:
<?php

function conectar() 

    
$base_de_datos 'noticias';
    
$db_usuario 'root'
    
$db_password ''
   
    if (!(
$link mysql_connect('localhost'$db_usuario$db_password))) 
    { 
        echo 
'Error conectando a la base de datos.'
        exit(); 
    } 
    if (!
mysql_select_db($base_de_datos$link)) 
    { 
        echo 
'Error seleccionando la base de datos.'
        exit(); 
    } 
    return 
$link


$db conectar();


$registros 3;

if (!
$pagina) { 
    
$inicio 0
    
$pagina 1

else { 
    
$inicio = ($pagina 1) * $registros



?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Noticias</title>
<style>
    body { font-family: arial; font-size:12px}
</style>
</head>

<body>
    <?php
    $resultados 
mysql_query('SELECT id FROM articulos WHERE visible = 1');
    
$total_registros mysql_num_rows($resultados); 
    
$resultados mysql_query('SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros');    
    
$total_paginas ceil($total_registros $registros);                       

    if(
$total_registros) {
    
        [
COLOR="red"]while($articulos=mysql_fetch_array($resultados)) {[/COLOR]
            
            echo 
'<b>'.$articulos["titulo"].'</b><br>';
            echo 
'<font color="#666666">'.$articulos["descripcion"].'</font><br><br><br>';
            
        }
        
    } else {
        echo 
'<font color="darkgray">(sin resultados)</font>';
    }
    
    [
COLOR="Red"]mysql_free_result($resultados);    [/COLOR]            
    
    if(
$total_registros) {
        
        echo 
"<center>";
        
        if((
$pagina 1) > 0) {
            echo 
'<a href="paginacion.php?pagina='.($pagina-1).'">< Anterior</a> ';
        }
        
        for (
$i=1$i<=$total_paginas$i++){ 
            if (
$pagina == $i
                echo 
'<b>".$pagina."</b> '
            else
                echo 
'<a href="paginacion.php?pagina=$i">$i</a> '
        }
      
        if((
$pagina 1)<=$total_paginas) {
            echo 
'<a href="paginacion.php?pagina='.($pagina+1).'">Siguiente ></a>';
        }
        
        echo 
'</center>';
        
    }
?>
</body>
</html>
<? mysql_close($db);?>
Pongo en rojo las lineas donde da error
gracias
  #6 (permalink)  
Antiguo 30/01/2007, 08:42
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Bueno lo de que van en rojo olvidarlo puesto que no se ve así. Solo se ve que por delante tiene la etiqueta color.

Olvirda eso
  #7 (permalink)  
Antiguo 30/01/2007, 08:54
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años
Puntos: 1
Re: Edrror en la paginación

tu error debe estar en la segunda sentencia SQL, si le pones comillas simples PHP no te procesa las variables te las toma como cadena, debes ponerle comillas dobles para que te las procese:

'SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros'

esto te daría como resultado:

SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros

con comillas dobles te quedaría algo así:

SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT 0,3

solamente tienes que cambiar esas comillas simples por comillas dobles:

buena suerte

Código PHP:
    $resultados mysql_query("SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros"); 
  #8 (permalink)  
Antiguo 30/01/2007, 08:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

ok, ahora me salen los registros que tengo en la BD pero no me pasan a la siguiente página.

A parte los vinculos me sale escritos así:

".$pagina." $i $i Siguiente >

¿sigo teniendo algo mal, verdad?
  #9 (permalink)  
Antiguo 30/01/2007, 09:14
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 5 meses
Puntos: 3
Re: Edrror en la paginación

hola de nuevo, en esta linia:
echo '<a href="paginacion.php?pagina=$i">$i</a> ';
pon asi:
echo '<a href="paginacion.php?pagina=$i">".$i."</a> ';
Ya diras el resultado
Un saludo
  #10 (permalink)  
Antiguo 30/01/2007, 09:40
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Código PHP:
<?php

function conectar() 

    
$base_de_datos 'noticias';
    
$db_usuario 'root'
    
$db_password ''
   
    if (!(
$link mysql_connect('localhost'$db_usuario$db_password))) 
    { 
        echo 
'Error conectando a la base de datos.'
        exit(); 
    } 
    if (!
mysql_select_db($base_de_datos$link)) 
    { 
        echo 
'Error seleccionando la base de datos.'
        exit(); 
    } 
    return 
$link


$db conectar();


$registros 3;

if (!
$pagina) { 
    
$inicio 0
    
$pagina 1

else { 
    
$inicio = ($pagina 1) * ($registros+1); 

    
$resultados mysql_query('SELECT id FROM articulos WHERE visible = 1');
    
$total_registros mysql_num_rows($resultados); 
    
$resultados mysql_query("SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros");    
    
$total_paginas ceil($total_registros $registros);                       

    if(
$total_registros) {
    
        while(
$articulos=mysql_fetch_array($resultados)) {
            
            echo 
'<b>'.$articulos["titulo"].'</b><br>';
            echo 
'<font color="#666666">'.$articulos["descripcion"].'</font><br><br><br>';
            
        }
        
    } else {
        echo 
'<font color="darkgray">(sin resultados)</font>';
    }
    
    
mysql_free_result($resultados);                
    
    if(
$total_registros) {
        
        echo 
"<center>";
        
        if((
$pagina 1) > 0) {
            echo 
'<a href="paginacion.php?pagina='.($pagina-1).'">< Anterior</a> ';
        }
        
        for (
$i=1$i<=$total_paginas$i++){ 
            if (
$pagina == $i
                echo 
'<b>'.$pagina.'</b> '
            else
                echo 
'<a href="paginacion.php?pagina=".$i."">'.$i.'</a> '
        }
      
        if((
$pagina 1)<=$total_paginas) {
            echo 
'<a href="paginacion.php?pagina='.($pagina+1).'">Siguiente ></a>';
        }
        
        echo 
'</center>';
        
    }
 
mysql_close($db);?>

Bien conseguido pero los vinculos porque no me llevan a los 3 siguientes registros?
Ni para adelante ni para atrás.

Gracias
  #11 (permalink)  
Antiguo 30/01/2007, 15:30
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años
Puntos: 1
Re: Edrror en la paginación

se debe a que tienes register_globals en OFF que a partir de PHP 4.xx viene por defecto, pueder ver aquí http://es.php.net/manual/es/security.globals.php, deberías agregar un par de líneas mas a tu script

Código PHP:
<?php 

function conectar()  
{  
    
$base_de_datos 'noticias'
    
$db_usuario 'root';  
    
$db_password '';  
    
    if (!(
$link mysql_connect('localhost'$db_usuario$db_password)))  
    {  
        echo 
'Error conectando a la base de datos.';  
        exit();  
    }  
    if (!
mysql_select_db($base_de_datos$link))  
    {  
        echo 
'Error seleccionando la base de datos.';  
        exit();  
    }  
    return 
$link;  
}  

$db conectar(); 


$registros 3


if !isset(
$_GET['pagina'])){  //si $_GET['pagina'] no está definido
    
$inicio 0;  
    
$pagina 1;  
}  
else {  
    
$inicio = ($_GET['pagina'] - 1) * ($registros+1);  //aqui va el otro cambio
}  
    
$resultados mysql_query('SELECT id FROM articulos WHERE visible = 1'); 
    
$total_registros mysql_num_rows($resultados);  
    
$resultados mysql_query("SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros");     
    
$total_paginas ceil($total_registros $registros);                        

    if(
$total_registros) { 
     
        while(
$articulos=mysql_fetch_array($resultados)) { 
             
            echo 
'<b>'.$articulos["titulo"].'</b><br>'
            echo 
'<font color="#666666">'.$articulos["descripcion"].'</font><br><br><br>'
             
        } 
         
    } else { 
        echo 
'<font color="darkgray">(sin resultados)</font>'
    } 
     
    
mysql_free_result($resultados);                 
     
    if(
$total_registros) { 
         
        echo 
"<center>"
         
        if((
$pagina 1) > 0) { 
            echo 
'<a href="paginacion.php?pagina='.($pagina-1).'">< Anterior</a> '
        } 
         
        for (
$i=1$i<=$total_paginas$i++){  
            if (
$pagina == $i)  
                echo 
'<b>'.$pagina.'</b> ';  
            else 
                echo 
'<a href="paginacion.php?pagina=".$i."">'.$i.'</a> ';  
        } 
       
        if((
$pagina 1)<=$total_paginas) { 
            echo 
'<a href="paginacion.php?pagina='.($pagina+1).'">Siguiente ></a>'
        } 
         
        echo 
'</center>'
         
    } 
 
mysql_close($db);?>
  #12 (permalink)  
Antiguo 31/01/2007, 01:31
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Me sigue dando problemas.
Cuando le pincho en siguiente responde bien pero no me sale lo de anterior y los numeros no funcionan.
  #13 (permalink)  
Antiguo 31/01/2007, 01:56
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Vuelvo a dejar el codigo porsiaca...

Código PHP:
<?php

function conectar()   
{   
    
$base_de_datos 'noticias';  
    
$db_usuario 'root';   
    
$db_password '';   
     
    if (!(
$link mysql_connect('localhost'$db_usuario$db_password)))   
    {   
        echo 
'Error conectando a la base de datos.';   
        exit();   
    }   
    if (!
mysql_select_db($base_de_datos$link))   
    {   
        echo 
'Error seleccionando la base de datos.';   
        exit();   
    }   
    return 
$link;   
}   

$db conectar();  


$registros 3;  


if (!isset(
$_GET['pagina'])){  
    
$inicio 0;   
    
$pagina 1;   
}   
else {   
    
$inicio = ($_GET['pagina'] - 1) * ($registros+1); }   
    
$resultados mysql_query('SELECT id FROM articulos WHERE visible = 1');  
    
$total_registros mysql_num_rows($resultados);   
    
$resultados mysql_query("SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros");      
    
$total_paginas ceil($total_registros $registros);                         

    if(
$total_registros) {  
      
        while(
$articulos=mysql_fetch_array($resultados)) {  // Es aquí donde me da el primer error
              
            
echo '<b>'.$articulos["titulo"].'</b><br>';  
            echo 
'<font color="#666666">'.$articulos["descripcion"].'</font><br><br><br>';  
              
        }  
          
    } else {  
        echo 
'<font color="darkgray">(sin resultados)</font>';  
    }  
      
    
mysql_free_result($resultados);  // aquí es el 2 error                
      
    
if($total_registros) {  
          
        echo 
"<center>";  
          
        if((
$pagina 1) > 0) {  
            echo 
'<a href="paginacion.php?pagina='.($pagina-1).'">< Anterior</a> ';  
        }  
          
        for (
$i=1$i<=$total_paginas$i++){   
            if (
$pagina == $i)   
                echo 
'<b>'.$pagina.'</b> ';   
            else  
                echo 
'<a href="paginacion.php?pagina=".$i."">'.$i.'</a> ';   
        }
        
        if((
$pagina 1)<=$total_paginas) {  
            echo 
'<a href="paginacion.php?pagina='.($pagina+1).'">Siguiente ></a>';
        }
          
        echo 
'</center>';  
          
    }
 
mysql_close($db);?>
Un saludo.
  #14 (permalink)  
Antiguo 31/01/2007, 02:34
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: Edrror en la paginación

Fijate en esta linea:
Código PHP:
echo '<a href="paginacion.php?pagina=".$i."">'.$i.'</a> '
deberia ser asi:
Código PHP:
echo '<a href="paginacion.php?pagina='.$i.'">'.$i.'</a> '
Recuerda que al comenzar con comilla simple (') ese sera tu control para cortar la cadena.
  #15 (permalink)  
Antiguo 31/01/2007, 09:54
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Buenas al final he optado con quitar el Anterior y el Siguiente y dejar simplemente los numeros.

Me pasan bien hasta la página 3 a partir de esta me salen hojas en blanco.

¿Qie puede ser?

Os prometo que cuando resuelba esto no os doy la lata más. PROMETIDO. jeje.

Código PHP:
<?php

function conectar()   
{   
    
$base_de_datos 'noticias';  
    
$db_usuario 'root';   
    
$db_password '';   
     
    if (!(
$link mysql_connect('localhost'$db_usuario$db_password)))   
    {   
        echo 
'Error conectando a la base de datos.';   
        exit();   
    }   
    if (!
mysql_select_db($base_de_datos$link))   
    {   
        echo 
'Error seleccionando la base de datos.';   
        exit();   
    }   
    return 
$link;
}   

$db conectar();  


$registros 2;  


if (!isset(
$_GET['pagina'])){ 
    
$inicio 0;   
    
$pagina 1;   
}   
else {   
    
$inicio = ($_GET['pagina'] - 1) * ($registros+1);  
}   
    
$resultados mysql_query('SELECT id FROM articulos WHERE visible = 1');  
    
$total_registros mysql_num_rows($resultados);   
    
$resultados mysql_query("SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros");      
    
$total_paginas ceil($total_registros $registros);                         

    if(
$total_registros) {  
      
        while(
$articulos=mysql_fetch_array($resultados)) {  
              
            echo 
'<b>'.$articulos["titulo"].'</b><br>';  
            echo 
'<font color="#666666">'.$articulos["descripcion"].'</font><br><br><br>';  
              
        }  
          
    } else {  
        echo 
'<font color="darkgray">(sin resultados)</font>';  
    }  
      
    
mysql_free_result($resultados);                  
      
    if(
$total_registros) {  
          
        echo 
"<center>";  
          
      
          
        for (
$i=1$i<=$total_paginas$i++){   
            if (
$_GET['pagina'] == $i)   
                echo 
'<b>'.$i.'</b> ';   
            else  
                echo 
'<a href="paginacion.php?pagina='.$i.'">'.$i.'</a> ';   
        }
        
     
          
        echo 
'</center>';  
          
    }
 
mysql_close($db);?>

Gracias
  #16 (permalink)  
Antiguo 31/01/2007, 20:03
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 5 meses
Puntos: 3
Re: Edrror en la paginación

Hola de nuevo, una pregunta, porque haces esto?
$total_paginas = ceil($total_registros / $registros);
Creo que seria:
$total_paginas = $total_registros;
Ya diras como ha ido.
Un saludo
  #17 (permalink)  
Antiguo 01/02/2007, 02:50
 
Fecha de Ingreso: noviembre-2005
Mensajes: 128
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Edrror en la paginación

Buenos gracias a todos por la ayuda. Me ha servido de mucho.

Esta bien saber que en un foro así a la gente novata como yo le proporcionais ayuda casi inmediata y teneis paciencia con nosotros.

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 20:42.