Foros del Web » Programando para Internet » PHP »

Código no muestra el primer registro

Estas en el tema de Código no muestra el primer registro en el foro de PHP en Foros del Web. Hola, ¿Que tal? Tengo el siguiente código, para mostrar el detalle de una factura de compra y así poder verificar si los datos han sido ...
  #1 (permalink)  
Antiguo 11/04/2007, 22:00
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 13 años, 1 mes
Puntos: 0
Código no muestra el primer registro

Hola, ¿Que tal?

Tengo el siguiente código, para mostrar el detalle de una factura de compra y así poder verificar si los datos han sido ingresados correctamente.

El código cumple en un 99% para lo que se necesita, pero siempre me muestra y suma un dato menos, y no puedo saber porqué.

Cuando ingreso los datos de una factura, se ingresa producto por producto, osea que cada producto que figura en la factura es un registro.

Espero que me haya explicado bien, y tener alguna respuesta que me ayuda a saber que pasa.

De antemanos muchas gracias y que tengan un día saludable.

Código:
<?php

include_once('conexion.php');
$link = Conectarse();
$sql = " SELECT * FROM inv_compras INNER JOIN inv_productos, inv_documentos, inv_proveedor ON inv_compras.id_producto = inv_productos.id_producto AND inv_compras.id_documento = inv_documentos.id_documento AND inv_compras.id_proveedor = inv_proveedor.id_proveedor WHERE nro_documento = $_POST[nro_factura] ";
$result = mysql_query($sql); // Ahora tenemos en ‘$result’ todos los registros de la consulta, y los mostrarlos uno a uno

while ($row = mysql_fetch_array($result))
{
echo "<table>";
echo "<th>";
echo "<th align=right>"," PROVEEDOR:";
echo "<th align=left>","$row[proveedor]","</th>","<tr />";
echo "<th>";
echo "<th align=right>"," FECHA:";
echo "<th align=left>","$row[dd_compra]\n","$row[mm_compra]\n","$row[aa_compra]","</th>","<tr />";
echo "<th>";
echo "<th align=right>"," NRO FACTURA:";
echo "<th align=left>","$_POST[nro_factura]","</th>","<tr />";
echo "<tr />";
?><hr /><?
echo "<th align=center>","CODIGO","</th>";
echo "<th align=center>","PRODUCTO","</th>";
echo "<th align=center>","CANTIDAD","</th>";
echo "<th align=center>","VALOR UNITARIO","</th>";
echo "<th align=center>","VALOR NETO","</th>";
echo "<th align=center>","VALOR IVA","</th>";
echo "<th align=center>","VALOR TOTAL","</th>","<tr />";

while ($row = mysql_fetch_array($result))
{
$valor_neto=$row['cantidad']*$row['costo'];
$calcula_iva = round($valor_neto*.19);
$valor_total = round($valor_neto+$calcula_iva);
$valor_total_neto += $valor_neto;
$valor_total_iva += $calcula_iva;
$valor_total_total += $valor_total;


echo "<td align=right>","$row[id_producto]","</td>";
echo "<td>","$row[producto]","</td>";
echo "<td align=right>","$row[cantidad]","</td>";
echo "<td align=right>","$row[costo]","</td>";
echo "<td align=right>","$valor_neto","</td>";
echo "<td align=right>","$calcula_iva","</td>";
echo "<td align=right>","$valor_total","</td>","<tr />";
}
}
echo "<th>";
echo "<th align=right>","TOTAL NETO:";
echo "<th align=right>","$valor_total_neto","</th>","<tr />";
echo "<th>";
echo "<th align=right>","TOTAL IVA:";
echo "<th align=right>","$valor_total_iva","</th>","<tr />";
echo "<th>";
echo "<th align=right>","TOTAL FACTURA:";
echo "<th align=right>","$valor_total_total","</th>","<tr />";
echo "</table>";

mysql_close();
?>
  #2 (permalink)  
Antiguo 12/04/2007, 06:39
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 13 años, 2 meses
Puntos: 9
Re: Código no muestra el primer registro

Cita:
El código cumple en un 99% para lo que se necesita, pero siempre me muestra y suma un dato menos, y no puedo saber porqué.
Hola, si no sabes que datos es, te sugiero que hagas un echo"" de cada una de las variables, para que puedas hacerle un seguimiento al codigo, a lo mejor los valores estan bien, y el calculo puede que no este muy bien, pero por lo menos ya sabras que la falla por ahi no es. Tambien puedes incluir debajo del query un mysql_affected_rows() para saber cuantos resultados te esta devolviendo la consulta. Suerte, Saludos
__________________
->Aprender es un proceso que incluye el error..
  #3 (permalink)  
Antiguo 12/04/2007, 09:54
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 13 años, 1 mes
Puntos: 0
Re: Código no muestra el primer registro

Hola.

Sospecho que cuando haces el primer fetch_array el puntero de la consulta se posiciona en el primer registro(en el primer ciclo del while), luego, cuando -dentro de ese mismo while haces un segundo fetch el puntero salta al segundo registro.

Entonces estas leyendo el primer registro de venta, y depues calculando el detalle de la venta siguiente.

En el modo orientado a objetos se hace un data_seek(0) para cambiar el elemento actual del puntero... en esta caso va al primer registro.

No se... puede ser eso... a mi me ha pasado y lo resuelvo así.

Un saludo
  #4 (permalink)  
Antiguo 12/04/2007, 10:03
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 13 años, 2 meses
Puntos: 9
Re: Código no muestra el primer registro

Viendo la observacion de gvargas, es ese justamente el problema, al hacer el segundo mysql_fetch_array() salteas el primer registro. Saludos
__________________
->Aprender es un proceso que incluye el error..
  #5 (permalink)  
Antiguo 12/04/2007, 11:59
Avatar de BrujoNic
Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.903
Antigüedad: 18 años
Puntos: 632
Re: Código no muestra el primer registro

Trasladado de BD a PHP.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #6 (permalink)  
Antiguo 12/04/2007, 13:30
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 13 años, 1 mes
Puntos: 0
Re: Código no muestra el primer registro

Me puede alguien esplicar como uso la funcion data_seek,

La puse despues del primer WHILE, antes del segundo SELECT, y me da el siguiente error "Call to undefined function: data_seek()"
  #7 (permalink)  
Antiguo 12/04/2007, 15:48
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 13 años, 1 mes
Puntos: 0
Re: Código no muestra el primer registro

Código PHP:
mysql_data_seek($resultnum_fila
En tu caso podrías llevar un contador en el primer ciclo que tienes..

quedando...
Código PHP:
mysql_data_seek($result$cont -1);

//el otro ciclo


// fin del otro ciclo

++$cont
Un saludo
  #8 (permalink)  
Antiguo 12/04/2007, 16:24
Avatar de Shevkorn  
Fecha de Ingreso: enero-2005
Ubicación: Trujillo
Mensajes: 34
Antigüedad: 14 años, 10 meses
Puntos: 1
Re: Código no muestra el primer registro

Para q los 2 whiles?
cuando barres el primero se utiliza el primer registro...
luego con el segundo while coge el segundo registro porque esta utilizando el mismo PUNTERO para los dos whiles..
La pregunta es... para q tienes el primer while? y para q el segundo?

Saludos.
__________________
Taek said: ¿Aùn los pecadores podremos llegar al cielo?
  #9 (permalink)  
Antiguo 12/04/2007, 21:27
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 13 años, 1 mes
Puntos: 0
Re: Código no muestra el primer registro

Gracias a todos por las respuestas, quedo solucionado el problema, con la funcion data_seek(), de la siguiente forma:
mysql_data_seek($result, 0);
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 18:33.