Foros del Web » Programando para Internet » PHP »

Falta el primer registro

Estas en el tema de Falta el primer registro en el foro de PHP en Foros del Web. Aquí el alienígena de Javascript haciendo incursiones en el lado oscuro . Como no podía ser de otra forma me encuentro en un problema que ...
  #1 (permalink)  
Antiguo 18/05/2004, 09:39
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Pregunta Falta el primer registro

Aquí el alienígena de Javascript haciendo incursiones en el lado oscuro . Como no podía ser de otra forma me encuentro en un problema que mis verdes neuronas no son capaces de resolver:

Resulta que tengo una página que consulta referrers en una base de datos y los ordena por veces que han salido. Todo funciona a la perfección salvo por un pequeño detalle:

Siempre se come el primer registro. Es decir, el que debería ir el primero no lo pone, empieza por el segundo. No sé por qué es. He revisado el código y no he encontrado el fallo. ¿Me podeis ayudar?

El código es el siguiente:
Código PHP:
<html>
<head>
    <title>Estadísticas de Referencias</title>
    <style>
    .celdas{
    font:bold 10px/15px verdana;
    color:white;
    padding-left:10px;
    padding-right:10px;
    background:#0099CC;
    }
    
    td{    
    font:normal 10px/20px verdana;
    border-top:solid 1px black;
    vertical-align:middle;
    height:20px;
    }
    
    table{border:solid 1px black;}
    </style>
</head>

<body>
<?
if(!$que){$que=0;}
$opciones=array("google","msn","yahoo","lycos","altavista","Top Ten");
$variable=Array("q","q","p","q","");
?>
<form action="estad.php">
<select name="que" onchange="this.form.submit()">
<?
for($a=0;$a<count($opciones);$a++){
    echo
"<option value='".$a."' ";
    if(
$que==$a){echo"selected ";}
    echo 
">".$opciones[$a]."</option>";
    }
?>
</select>
</form>

<?

include "js/conectar.php";
if(
$que==5){$opciones[$que]="";}
$sentenciaSQL="SELECT dominio,veces  FROM proviene WHERE dominio LIKE '%".$opciones[$que]."%' ORDER BY `veces` DESC ";
$resultadoSQL=mysql_query($sentenciaSQL,$conexionBD);?>        

<div align="center">
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="75" align="center" class="celdas">Veces</td>
<td align="center" class="celdas">URL</td>
</tr>
                
<? 

$datos 
mysql_fetch_array ($resultadoSQL);
$alguno=false;
    while (
$datos mysql_fetch_array ($resultadoSQL)){
        
$alguno=true;
        
$url=parse_url($datos[0]);
        
parse_str($url['query']);

        if(
$que==5){
            
$anadido=$q.$p.$searchfor;
            
$p=null;$q=null;$searchfor=null;
            
$cosa=$url['host'];
            if(
$anadido){
                
$cosa.=" buscando \"".$anadido."\"";
                }

            }
        else{
            
$cosa=$$variable[$que];
            }
        echo 
"<tr><td align='center'>".$datos[1]."</td><td nowrap><a href=\"".$datos[0]."\" target='_blank'>".$cosa."</a></td></tr>";

        }

if(!
$alguno){
    echo 
"<tr><td align='center' colspan=2>No existen resultados</td></tr>";
    }
    
mysql_close();

?>  
</table></div>
</body>
</html>
Muchas gracias!!!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #2 (permalink)  
Antiguo 18/05/2004, 09:46
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

El problema es:
Código PHP:
$datos mysql_fetch_array ($resultadoSQL);

$alguno=false;

    while (
$datos mysql_fetch_array ($resultadoSQL)){ 
Cada vez que llamas a mysql_fetch_array() lees el registro en curso y mueves el puntero al siguiente. Asi lo que estas haciendo es leer el primer registro a $datos con el mysql_fetch_arry() de fuera del while. Y como no usas ese valor devuelto, al ejecutar la condicion del while, lees el segundo registro, que es el que empiezas a mostrar.

Asi que la solucion es quitar la linea de mysql_fetch_array() de antes del while.

Y bienvenido a los PHPeros (que somos mas guapos que los seguidores de ASP :-p ).
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 18/05/2004, 09:51
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 20 años
Puntos: 0
cuando sacas los resultados haces un primer mysql_fetch_array que te hace perder el primer registro, y luego ya haces el while con mysql_fetch_array con el resto de registros:

Código PHP:
$datos mysql_fetch_array ($resultadoSQL);
$alguno=false;
    while (
$datos mysql_fetch_array ($resultadoSQL)){
        
$alguno=true
pon, simplemente:
Código PHP:
$alguno=false;
    while (
$datos mysql_fetch_array ($resultadoSQL)){
        
$alguno=true
quitale el primer mysql_fetch_array
  #4 (permalink)  
Antiguo 18/05/2004, 09:53
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Aaaaah! Cierto es! Cómo no darme cuenta!?

Es chulísimo esto del PHP, eh?

Y para alguien que sabe más o menos el JS, con una curva de aprendizaje muy suave. Aunque aun me queda...

Pues muchas gracias!!

Te has ganado una abducción!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #5 (permalink)  
Antiguo 18/05/2004, 10:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
De nada.

Por cierto, en lugar de usar el "truco" de la variable $alguno, puedes usar mysql_num_rows() (www.php.net/mysql_num_rows) para saber el numero de registros devueltos. Y si es 0, pues ya sabes.

Y por curiosidad, ¿te funciona esto:
Código PHP:
$cosa=$$variable[$que]; 
?
Es que es ambiguo, puede ser ${$variable[$que]} o ${$variable}[$que], como se indica en http://www.php.net/manual/en/languag...s.variable.php

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 18/05/2004, 10:21
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Pues lo de $$variable[$pepe] me funciona. Es una de las chapuzas que más me gusta de lo poco que conozco de PHP.
En mi caso es la primera de las opciones. Pero en el segundo caso ya es la leche!

Miraré lo que me dices. Estuve buscando en PHP.net pero claro, buscar sin saber es más complicado que si sabes lo que buscas. Aunque es bastante intuitivo este lenguaje.

__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #7 (permalink)  
Antiguo 18/05/2004, 10:28
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Listo!

Código PHP:
if(mysql_num_rows($resultadoSQL)==0){
    echo 
"<tr><td align='center' colspan=2>No existen resultados</td></tr>";
    }
else{
 
    while (
$datos mysql_fetch_array ($resultadoSQL)){
        
$alguno=true;
        
$url=parse_url($datos[0]);
        
parse_str($url['query']);

        if(
$que==$tope){
            
$anadido=$q.$p.$searchfor;
            
$p=null;$q=null;$searchfor=null;
            
$cosa=$url['host'];
            if(
$anadido){
                
$cosa.=" buscando \"".$anadido."\"";
                }

            }
        else{
            
$cosa=$$variable[$que];
            }
        echo 
"<tr><td align='center'>".$datos[1]."</td><td nowrap><a href=\"".$datos[0]."\" target='_blank'>".$cosa."</a></td></tr>";

        }

    } 
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
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 02:10.