Ir al contenido


Foto

While procesa solo primer registro


  • Por favor identifícate para responder
7 respuestas en este tema

#1 serito

serito

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 28 febrero 2013 - 04:18

Hola Gente:
En una tabla tengo varios registros, por cada uno de ellos hay que actualizar el stock y copiar el registro a otra tabla. Fuera del while, vacia la tabla leída "factemp". Procesa solo el primer registro, perfecto, pero sale del bucle antes de procesar los demás registros.

<?php
require_once("conexion.php");
//print_r($_POST);
?>
<!--En una tabla tengo varios registros, por cada uno de ellos hay que actualizar el stock y copiar el registro a otra tabla. Fuera del while, vacia la tabla leída "factemp"-->


<!--esto es para recoger la lectura de los registros que devuelve $_post-->
<?php
$sql="select * from factemp order by id_item asc";
$res=mysql_query($sql,$con);

while ($reg=mysql_fetch_array($res))
{

echo $reg["id"];

echo $reg["familia"];

echo $reg["cant"];

echo $reg["producto"];

echo $reg["publico"];

echo $reg["vendi"];

echo $reg["proveedor"];

?>


<!--actualiza cada registro descontando la cant vendida-->
<?php
{
$ven=$reg["cant"]-$reg["vendi"];

$sql="update det_fact
set
cant=$ven
WHERE id_item='".$reg['id']."'";

$res=mysql_query($sql,$con);
}
?>

<!--copia los registros a la tabla facturados-->

<?php
{
$sql="insert into facturados
values
(null,null,'".$reg["familia"]."','".$reg["vendi"]."','".$reg["producto"]."','".$reg["publico"]."','".$reg["proveedor"]."')";
$res=mysql_query($sql,$con);
}
?>

<?php
}
?>

<!--vacia la tabla factemp-->
<?php

$sql="truncate factemp";
$res=mysql_query($sql,$con);
echo "<script type=''>
window.location='index.php';
</script>";

?>


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2013 - 06:38

Hola Serito, no entiendo tu codigo, primero, abres la etiqueta <?php luego abres el while y no lo cierras pero sí cierras la etiqueta php ?> luego abres otra etiqueta PHP <?php dentro de ella abres y cierras codigo con {} sin niguna condición y así sucesivamente, ¿es un copy paste en un sólo sitio?.

Saludos.
  • 0

#3 serito

serito

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 01 marzo 2013 - 07:04

Hola enecumene, gracias por tu respuesta rápida. En realidad, dentro del while, por cada registro tiene que realizar 2 procesos:
1.- Primero es descargar del stock la cantidad vendida
2.- Después copia el registro a otra tabla que va acumulando los items vendidos.
Cada proceso está encerrado con <?php y ?>  para verlo mas claro solamente, pero tambien encerrado entre {}  asi lo vi en un ejemplo que encontré pues probé varias cosas.
La llave de cierre está luego.
Por último, despues de la llave, se vacía la tabla factemp
Procesa perfecto el primer registro, pero si tengo varios, sale del bucle sin procesarlos.

  • 0

#4 serito

serito

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 01 marzo 2013 - 07:13

Asi lo hice primero, pero igual no funciona...

<?php
require_once("conexion.php");
//print_r($_POST);

<!--En una tabla tengo varios registros, por cada uno de ellos hay que actualizar el stock y copiar el registro a otra tabla. Fuera del while, vacia la tabla leída "factemp"-->


<!--esto es para recoger la lectura de los registros que devuelve $_post-->

$sql="select * from factemp order by id_item asc";
$res=mysql_query($sql,$con);

while ($reg=mysql_fetch_array($res))
{

echo $reg["id"];

echo $reg["familia"];

echo $reg["cant"];

echo $reg["producto"];

echo $reg["publico"];

echo $reg["vendi"];

echo $reg["proveedor"];




//<!--actualiza cada registro descontando la cant vendida-->


$ven=$reg["cant"]-$reg["vendi"];

$sql="update det_fact
set
cant=$ven
WHERE id_item='".$reg['id']."'";

$res=mysql_query($sql,$con);


//<!--copia los registros a la tabla facturados-->


$sql="insert into facturados
values
(null,null,'".$reg["familia"]."','".$reg["vendi"]."','".$reg["producto"]."','".$reg["publico"]."','".$reg["proveedor"]."')";
$res=mysql_query($sql,$con);



}


//<!--vacia la tabla factemp-->


$sql="truncate factemp";
$res=mysql_query($sql,$con);
echo "<script type=''>
window.location='index.php';
</script>";

?>



alguna idea??
Gracias
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2013 - 07:42

Prueba de la siguiente manera:

<?php

require_once("conexion.php");

//Variable donde cargaremos todos los campos
$campos['ventas'] = array();

$sql = "select * from factemp order by id_item asc";
$res = mysql_query($sql,$con);

//cargamos todos los datos en el array
while ($reg = mysql_fetch_array($res))
{
$campos['ventas'][] = array(
'id' => $reg['id'],
'familia' => $reg['familia'],
'cantidad' => $reg['cant'],
'producto' => $reg['producto'],
'publico' => $reg['publico'],
'vendido' => $reg['vendi'],
'proveedor' => $reg['proveedor'],
'venta' => $reg['cant'] - $reg['vendi'],
);
}

//cerramos la coneccion dado que ya no lo necesitamos
//porque los datos ya estan en memoria en el array
mysql_close($res);

//ahora actualizamos e insertamos los datos
//Esto se puede hacer de otra forma usando MVC
//que es separar cada cosa en su lugar a modo de funciones.
foreach($campos['ventas'] as $det)
{
echo $det['id'] . "<br />" .
$det['familia'] . "<br />" .
$det['cantidad'] . "<br />" .
$det['producto'] . "<br />" .
$det['publico'] . "<br />" .
$det['vendido'] . "<br />" .
$det['proveedor'] . "<br />" .
$det['venta'] . "<br />";

$update_sql = "update det_fact set cant = " . $det['venta'] . " WHERE id_item = " . $det['id'];
$update_res = mysql_query($update_sql,$con);
printf ("Actualizados: %d\n", mysql_affected_rows());
mysql_close($update_res);

$insert_sql = "insert into facturados values
  (null,null,'".$det['familia']."','".det['vendido']."','".$det['producto']."','".$det['publico']."','".$det['proveedor']."')";
$insert_res = mysql_query($insert_sql,$con);
printf ("Insertados: %d\n", mysql_affected_rows());
mysql_close($insert_res);
}

?>


Cualquier cosa me avisas, saludos.
  • 0

#6 serito

serito

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 01 marzo 2013 - 08:15

Gracias amigazo!! Ahora si funcionó...todavía no entiendo porqué no funcionaba de la otra forma.. Leyes de Murphy??

Jjaja de nuevo Muchas Gracias!!
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2013 - 08:35

Qué bueno amigo!, no te olvides de incluir la limpieza de la tabla al final ;), te sugiero que te "empapes"* bastante sobre los array, una que otra veces te sacarán de algún apuro ;).

* Empaparse = estudiar, investigar :D

Saludos.
  • 0

#8 serito

serito

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 01 marzo 2013 - 02:16

Ok nuevamente gracias... soy autodidacta, asi que todos los días estoy aprendiendo algo. Hago valer tu consejo
  • 0




IP.Board spam blocked by CleanTalk.