PHP - duplicacion de while

   
Vista:

duplicacion de while

Publicado por Miguel Andres (28 intervenciones) el 07/08/2016 08:56:36
Hola el tema es el siguiente resulta que tengo el codigo de abajo pero el while que hago me lo duplica 7 veces para cada registro de la base de datos, si alguien sabe mi error se los agradeceria
error
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<table class="tabla">
<tr class="encabezado">
  <td class="encabezado"><strong>Numero de Factura</strong></td>
  <td class="encabezado"><strong>Fecha de Emision</strong></td>
  <td class="encabezado"><strong>N de Reses</strong></td>
  <td class="encabezado"><strong>N de Lechones</strong></td>
  <td class="encabezado"><strong>N de Madres</strong></td>
  <td class="encabezado"><strong>N de Trastes</strong></td>
  <td class="encabezado"><strong>Monto</strong></td>
  <td class="encabezado"><strong>Borrar</strong></td>
</tr>
 
<?php
include('../php/cn.php');
    $consulta="SELECT * FROM usuarios, facturas WHERE facturas.id_empresa = $_SESSION[id_usuario] ";
	$resultado=mysqli_query($conexion, $consulta);
    while ($registro = mysqli_fetch_array($resultado)){
echo "
 <tr>
  <td>".$registro[id]."</td>
  <td>".$registro[fecha]."</td>
  <td>".$registro[c_reses]."</td>
  <td>".$registro[c_lechones]."</td>
  <td>".$registro[c_madres]."</td>
  <td>".$registro[c_trastes]."</td>
  <td>".$registro[monto]."</td>
  <td><a href='facturas.php?id=$registro[id]&idborrar=2'>Borrar</a></td>
</tr>";
}
?>
<?php
extract($_GET);
if (@$idborrar==2){
 
	$sqlborrar="DELETE FROM facturas where facturas.id=$id";
	$resborrar = mysqli_query($conexion, $sqlborrar);
	echo '<script>alert("Registro eliminado correctamente");</script>';
	echo "<script>location.href='facturas.php'</script>";
}else if (@$idborrar==3){
	$sqlborrarTodo="DELETE * FROM facturas where id_empresa = $_SESSION[id_usuario]";
	$resultadoBT = mysqli_query($conexion, $sqlborrarTodo);
	echo '<script>alert("Se han eliminado todas las facturas exitosamente");</script>';
	echo "<script>location.href='facturas.php'</script>";
}
?>
</table>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip

duplicacion de while

Publicado por kip (560 intervenciones) el 07/08/2016 16:01:00
Hola, creo que e problema esta en que en tu query llamas los datos de dos tablas, que quizas contengan los mismos datos.


1
$consulta="SELECT * FROM usuarios, facturas WHERE facturas.id_empresa = $_SESSION[id_usuario] ";

Debes consultar los datos de solo una o tal vez hacer un JOIN si es que tus tablas estan relacionadas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

duplicacion de while

Publicado por Miguel Freytes (28 intervenciones) el 07/08/2016 20:31:54
Hice algunas modificaciones para comprobar y me sigue apareciendo duplicado,acabe de revisar y se repiten 6 veces porque hay 6 usuarios pero aun no hallo el problema aqui te dejo el codigo que modifique para comprobar. Ese mismo codigo lo uso en varias paginas solo que esta es la primera vez que uso la variable session pero igualmente si cambio la variable session por el id del usuario sigue repitiendose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<section id="facturas">
<div class="contFacturas">
<h2>Revisa tus Facturas <?php echo $_SESSION[nombre]; ?></h2>
<a class="borrarT" href='facturas.php?idborrar=3'>Borrar todas mis Facturas</a></td>
<table class="tabla">
<tr class="encabezado">
  <td class="encabezado"><strong>Numero de Factura</strong></td>
  <td class="encabezado"><strong>Fecha de Emision</strong></td>
  <td class="encabezado"><strong>N de Reses</strong></td>
  <td class="encabezado"><strong>N de Lechones</strong></td>
  <td class="encabezado"><strong>N de Madres</strong></td>
  <td class="encabezado"><strong>N de Trastes</strong></td>
  <td class="encabezado"><strong>Monto</strong></td>
  <td class="encabezado"><strong>Borrar</strong></td>
</tr>
 
<?php
include('../php/cn.php');
    $consulta="SELECT usuarios.id, facturas.id, facturas.fecha, facturas.c_reses, facturas.c_lechones, facturas.c_madres, facturas.c_trastes, facturas.monto  FROM usuarios,facturas WHERE facturas.id_empresa = $_SESSION[id_usuario] ";
	$resultado=mysqli_query($conexion, $consulta);
    while ($registro = mysqli_fetch_array($resultado)){
echo "
   <tr>
  <td>".$registro[id]."</td>
  <td>".$registro[fecha]."</td>
  <td>".$registro[c_reses]."</td>
  <td>".$registro[c_lechones]."</td>
  <td>".$registro[c_madres]."</td>
  <td>".$registro[c_trastes]."</td>
  <td>".$registro[monto]."</td>
  <td><a href='facturasP.php?id=$registro1[id]&idborrar=2'>Borrar</a></td>
</tr>";
}
?>
<?php
extract($_GET);
if (@$idborrar==2){
 
	$sqlborrar="DELETE FROM facturas where facturas.id=$id";
	$resborrar = mysqli_query($conexion, $sqlborrar);
	echo '<script>alert("Registro eliminado correctamente");</script>';
	echo "<script>location.href='facturas.php'</script>";
}else if (@$idborrar==3){
	$sqlborrarTodo="DELETE * FROM facturas where id_empresa = $_SESSION[id_usuario]";
	$resultadoBT = mysqli_query($conexion, $sqlborrarTodo);
	echo '<script>alert("Se han eliminado todas las facturas exitosamente");</script>';
	echo "<script>location.href='facturas.php'</script>";
}
?>
</table>
</div>
</section>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

duplicacion de while

Publicado por kip (560 intervenciones) el 07/08/2016 22:10:43
Bueno, no sabria que decirte, no se que datos contienen tus dos tablas, pero intenta haciendo un LIMIT o un DISTINCT:

LIMIT
1
$consulta="SELECT usuarios.id, facturas.id, facturas.fecha, facturas.c_reses, facturas.c_lechones, facturas.c_madres, facturas.c_trastes, facturas.monto  FROM usuarios,facturas WHERE facturas.id_empresa = $_SESSION[id_usuario]  LIMIT 1";


DISTINCT
1
$consulta="SELECT DISTINCT usuarios.id, facturas.id, facturas.fecha, facturas.c_reses, facturas.c_lechones, facturas.c_madres, facturas.c_trastes, facturas.monto  FROM usuarios,facturas WHERE facturas.id_empresa = $_SESSION[id_usuario] ";


Aunque aquello quizas no resuelva tu problema del todo, podrias colocar una captura de la estructura de tu tabla, tanto de usuarios como de facturas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

duplicacion de while

Publicado por Miguel Andres (28 intervenciones) el 08/08/2016 00:17:05
facturas
usuarios
id_empresa de facturas seria la id del usuario en la tabla usuarios
Aun no sirve pero me acabe de dar cuenta que solo pasa eso o cuando pongo el session o cuando escojo un solo id de usuario de todas maneras te dejo las estructuras de ambas tablas a ver si me puedes ayudar, este es el codigo que tengo en otras hojas que si funciona es exactamente igual pero sin los session si no para que muestre todo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
</section>
<main>
<section id="facturas">
<div class="contFacturas">
<table class="tabla">
<h2>Facturas de Proveedores</h2>
<tr class="encabezado">
  <td class="encabezado"><strong>Numero de Factura</strong></td>
  <td class="encabezado"><strong>RIF</strong></td>
  <td class="encabezado"><strong>Fecha de Emision</strong></td>
  <td class="encabezado"><strong>N de Reses</strong></td>
  <td class="encabezado"><strong>N de Lechones</strong></td>
  <td class="encabezado"><strong>N de Madres</strong></td>
  <td class="encabezado"><strong>N de Trastes</strong></td>
  <td class="encabezado"><strong>Monto</strong></td>
  <td class="encabezado"><strong>Borrar</strong></td>
  <td class="encabezado"><strong>Fecha de Pago</strong></td>
</tr>
<?php
//PRIVILEGIO DE FACTURAS PARA MAYORISTAS ES 0 Y EL DEL PROVEEDOR ES 1
include('../php/cn.php');
    $consulta="SELECT * FROM usuarios, facturas WHERE usuarios.id = facturas.id_empresa and facturas.privilegio = 1 ";
	$resultado=mysqli_query($conexion, $consulta);
    while ($registro = mysqli_fetch_array($resultado)){
echo "
    <tr>
  <td>".$registro[id]."</td>
  <td>".$registro[rif]."</td>
  <td>".$registro[fecha]."</td>
  <td>".$registro[c_reses]."</td>
  <td>".$registro[c_lechones]."</td>
  <td>".$registro[c_madres]."</td>
  <td>".$registro[c_trastes]."</td>
  <td>".$registro[monto]."</td>
  <td><a href='facturasP.php?id=$registro1[id]&idborrar=2'>Borrar</a></td>
  <td><a href='fecha.php?id=$registro1[0]'>Fecha</a></td>
</tr>";
}
?>
<?php
extract($_GET);
if (@$idborrar==2){
 
	$sqlborrar="DELETE FROM facturas where facturas.id=$id";
	$resborrar = mysqli_query($conexion, $sqlborrar);
	echo '<script>alert("Registro eliminado correctamente");</script>';
	echo "<script>location.href='facturasP.php'</script>";
}
 
?>
</table>
</div>
</section>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

duplicacion de while

Publicado por kip (560 intervenciones) el 08/08/2016 00:37:36
Es lo que te decia, te funciona en el ultimo codigo que colocaste porque haces la validacion de tablas usando como parametro el id_empresa e id del usuario, intenta hacer un INNER JOIN, asi:

1
$consulta="SELECT usuarios.id, facturas.id, facturas.fecha, facturas.c_reses, facturas.c_lechones, facturas.c_madres, facturas.c_trastes, facturas.monto  FROM usuarios INNER JOIN facturas ON usuarios.id = facturas.id_empresa WHERE facturas.id_empresa = $_SESSION[id_usuario] " ;

Por cierto, veo que llamas dos columnas con el mismo nombre, tanto id de factura como id de usuario, seria bueno que le agregues un alias para diferenciarlas, ya que quizás te de problemas, podrias hacerlo asi:

1
$consulta="SELECT usuarios.id as 'userid', facturas.id, facturas.fecha, facturas.c_reses, facturas.c_lechones, facturas.c_madres, facturas.c_trastes, facturas.monto  FROM usuarios INNER JOIN facturas ON usuarios.id = facturas.id_empresa WHERE facturas.id_empresa = $_SESSION[id_usuario] " ;

Nos cuentas como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar