Error en mi paginación

v1rus

Estoy creando una páginación pero me da un error que realmente nose como solventarlo porque a mi juicio estaría bien. Si me podeis ayudar en que cometo el erro...

El error me da en estas dos filas:

$sergio = "SELECT * FROM blog WHERE id = '{$_GET['id']}'";
$total_registros = mysql_num_rows($sergio);

Y viene a decir lo siguiente:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/web5/33/36/51683736/htdocs/blog.php on line 71

Tirando de traductor:

Advertencia: mysql_num_rows (): el argumento suministrado no es un recurso de resultado de MySQL válido en/mnt/web5/33/36/51683736/htdocs/blog.php sobre la línea 71

Código completo por si se necesita:

<?
include('config/config.php');

$registros = 15;

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

if ( !empty($_GET['id'])) {	
						
[b]$sergio = "SELECT * FROM `blog` WHERE id = '{$_GET['id']}'";
$total_registros = mysql_num_rows($sergio);[/b]
												
$sergio = "SELECT * FROM `blog` WHERE id = ".$_GET['id']." ORDER by idblog DESC LIMIT $inicio, $registros";
$total_paginas = ceil($total_registros / $registros);
						
$res= mysql_query($sergio) or die (mysql_error());
								
	if($total_registros) {
		while ($fila = mysql_fetch_array($res)) {

?>

<div class="blog_entradas">
	<img src="imgs/flecha1peke.jpg" width="10" height="10" /> 
	<a href="entrada.php?idblog=<? echo $fila['idblog']; ?>"><? echo $fila['titulo']; ?></a>
</div>

<?
mysql_free_result($resultados);

	if($total_registros) {
									
		echo "<center>";
									
			if(($pagina - 1) > 0) {
echo "<a href='blog.php?pagina=".($pagina-1)."'>< Anterior</a> ";
							}
									
for ($i=1; $i<=$total_paginas; $i++){ 
	if ($pagina == $i) {
			echo "[b]".$pagina."[/b] "; 
						} else {
					echo "<a href='blog.php?pagina=$i'>$i</a> "; 
							}	
					}
								  
	if(($pagina + 1)<=$total_paginas) {
				echo " <a href='blog.php?pagina=".($pagina+1)."'>Siguiente ></a>";
							}
									
		echo "</center>";
}
}
}
}
mysql_close($pili);

?>

Saludos y espero que me podaís ayudar ya que he mirado varios manuales etc... y antes de intentar coger un scritp prefiero ver si este proceso puede ir. Gracias =)

BlisZ

$sergio = "SELECT * FROM blog WHERE id = '{$_GET['id']}'";
$sergio2 = mysql_query($sergio); // tienes q ejecutar el query
$total_registros = mysql_num_rows($sergio2); // y usarlo

bLaKnI

Supongo que debe ser PHP, no?
No controlo PHP (todavía :P), pero puedo ver algunas cositas que quizas te ayuden:

Escribes en el trozo completo:

$sergio = "SELECT * FROM blog WHERE id = '{$_GET['id']}'";
$total_registros = mysql_num_rows($sergio);

$sergio = "SELECT * FROM blog WHERE id = ".$_GET['id']." ORDER by idblog DESC LIMIT $inicio, $registros";

Y te pregunto, la segunda parte, te peta? La has probado comentando/elidiendo la primera sentencia que te da error?

Fijate como has escrito en una el ID y en la otra.

Esto que es? $_GET['id']
Es una funcion/llamada en PHP? Si es así, recoge ANTES el valor en una variable y pasaselo, no pongas una llamada en la query. Y en caso de que quieras poner una llamada a una funcion, cierra comillas:

WHERE id = '"+{$_GET['id']}+"'"; <-- De alguna manera, ya que no se como se encadenan strings en PHP o si hace falta hacerlo...
Si no es una llamada a una funcion (que insisto debe serlo, ya que veo que le pasas un parametro ID, por cierto, que devuelve?) y se trata de una variable, sencillamente quizas debas hacer lo de cerrar las comillas para que te coja la variable como valor y no como parte de la query...

No se si te he ayudado mucho, quizas podrias darme alguna info acerca de que es esto del GET, y así intento hecharte un cable.

Saludos!

erdanblo

#3 Se podría decir que es un intento de hacer algo en PHP, pero bueno..., el GET es para recoger valores de variables de la url:

index.php?id=1

echo $_GET[id] --- imprime ---> 1

bLaKnI

Vaya que es un request.getParameter("id");
O un session.getAttribute("id"); nope?

Pues o es lo que han dicho en #2 (que tiene buena pinta, pues es cierto que el "resultset" no contiene rows) o es lo que yo digo, puesto que por mas que el codigo este contenido en un bloque PHP, hace falta saber si predomina el codigo y posteriormente la sentencia como String, o primeramente, la String.
En caso de que primero se haga la traducción de los parametros por el GET, no deberia haber problema, ya que la query seria correcta.
Pero tengo la sensacion, de que por mas que sea PHP, al estar contenido en la query, pues no ha cerrado comillas ("...GET...", en vez de "..."+ GET +"..."), lo que sucede es que se ejecuta dicha query con una condicion WHERE id=xxGETxx. Y por eso puede fallar.
Es necesario que o se traduzca primero el codigo PHP para que sea WHERE id=X, donde X es el numero, o montarselo para que la query realmente reciba el valor de ID i no la llamada a la obtencion del valor...

Soluciones:

a) probar a ejecutar la sentencia sql para rellenar el resultset.
b) Si sigue sin funcionar, encuentra la manera de no colocar la variable DENTRO de la sentencia sql, sino el valor!

En java o cualqueir codigo que maneje strings, seria necesario hacer algo así:

String sql_sent = "SELECT * FROM Personas WHERE nombre=" + this.getName() o name, o this.name o lo que sea, la variable vaya... + "; o resto de sentencia...".

Si pusiera

String sql_sent = "SELECT * FROM Personas WHERE nombre=this.getName();", tendria un problema, pues intentaria buscar las personas que se llamaran 'this.getName()'.

No se si será el problema en PHP... :S

Saludos! xD

v1rus

#2 gracias por tu ayuda probaré si no intentaré de otra manera que me han dicho para paginar (lo malo que tengo que cambiar muchas cosas y el código es más extenso)

#2 lo de ".$GET['id']." y '{$GET['id']}' en definitiva es lo mismo. Y para lo que es te contesta bien #3

#3 Intento xD! bueno eso según tu que eres un profesor que trabajas para Windows y eso es un intento no? amss ahora entiendo que porque sea un trozo sencillo es un intento xD! gracias por tu comentario de todas maneras ;)

#4 o) seguire a mi modo que lo veo más sencillo y probare lo de #2 jejeje, igualmente gracias

BlisZ

no he leido todo el post pero puede que todo lo que he dicho en #2 no sea suficiente, tal vez haya mas fallos, pero estoy bastante seguro de que sin mysql_query no puedes usar funciones tipo mysql_num_rows

v1rus

Ya me funciona a la perfección, un par de cambios y ya va perfectamente. Pongo aquí el código completo por si algún día alguien necesitaría de esta consulta.

<?
include('config/config.php');

						$registros = 25; /* El número de resultados que queremos por página
						
						$pagina = $_GET["pagina"];

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

						if ( !empty($_GET['id'])) {	
						
						$sergio = "SELECT * FROM `blog` WHERE id = '{$_GET['id']}'";
						$eres = mysql_query($sergio) or die (mysql_error());
						$total_registros = mysql_num_rows($eres);
												
						$sergi = "SELECT * FROM `blog` WHERE id = ".$_GET['id']." ORDER by idblog DESC LIMIT $inicio, $registros";
						$total_paginas = ceil($total_registros / $registros);
						
						$res= mysql_query($sergi) or die (mysql_error());
							
								
						if($total_registros) {
							while ($fila = mysql_fetch_array($res)) {
					
				  	
						echo ' AQUI PONEMOS EL CONTENIDO A  PAGINAR ';
						
						}
							} else {
	echo "(sin resultados)";
}
							mysql_free_result($res);				

								if($total_registros) {
									
									echo "<center>";
									
									if(($pagina - 1) > 0) {
										echo "<a href='blog.php?pagina=".($pagina-1)."'>< Anterior</a> ";
									}
									
									for ($i=1; $i<=$total_paginas; $i++){ 
										if ($pagina == $i) {
											echo "[b]".$pagina."[/b] "; 
										} else {
											echo "<a href='blog.php?pagina=$i'>$i</a> "; 
										}	
									}
								  
									if(($pagina + 1)<=$total_paginas) {
										echo " <a href='blog.php?pagina=".($pagina+1)."'>Siguiente ></a>";
									}
									
									echo "</center>";
							
							}
							}
						mysql_close($pili);
					?>
erdanblo

Esto

$sergio = "SELECT * FROM `blog` WHERE id = '{$_GET['id']}'";
$eres = mysql_query($sergio) or die (mysql_error());

Te lo puedes ahorrar en:

$eres = mysql_query('SELECT * FROM `blog` WHERE id = '.$_GET['id']}.') or die (mysql_error());
bLaKnI

Yo sigo sin entender como es que en un caso haces lo que te dije y en otro no:

a)
sergio = "SELECT * FROM blog WHERE id = '{$_GET['id']}'";
$eres = mysql_query($sergio) or die (mysql_error());
$total_registros = mysql_num_rows($eres);

b)
$sergi = "SELECT * FROM blog WHERE id = ".$_GET['id']." ORDER by idblog DESC LIMIT $inicio, $registros";

en a), '{$_GET['id']}' esta dentro de la cadena (osea, dentro de " ... ")
mientras que en b), esta fuera. Es decir, cierras comillas hasta el = ", luego lo del GETid y reabres comillas para el resto de la sentencia.
La diferencia la marca el .XXXX. o el {XXXX}?
Es que sino no entiendo que te va y que no...

v1rus

jejeje las dos estan bien jejeje son dos formas de escribir lo mismo y ambas estan reconocidas por el navegador, la que más te guste, yo uso ambas y en este script puse 1 de cada jejeje pero na si quieres

'{$GET['']}' = ".$GET['']." [ma o meno]

PD: el 2º código que pegue va a la perfección =)

Usuarios habituales

  • v1rus
  • bLaKnI
  • erdanblo
  • BlisZ