Problema con PHP y HTML

Iniciado por Victor26, 9 Octubre 2019, 20:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Victor26

Buenas tardes a todos, hoy vengo a compartir y me puedan ayudar de un problema que se me esta presentando en un sistema CRUD de facturacion basico que estoy haciendo.

Utilizo php para enviar los datos y conectar con mysql, que es donde llegan en unas tablas y luego poder ser mostradas en una tabla html. Verificando mi mysql los registros llegan y no se repiten, pero cuando llegan dichos registros a mi tabla html si se repiten cada vez que ingreso un registro nuevo, quisiera saber porque pasa. Gracias

Este es el codigo del formulario donde se envian los datos:
Código (actionscript) [Seleccionar]
<form method="POST" action="datos.php">
<div class="container facturacion1">
<div class="row">
   <div class="col-12 factura">
     <h1>SISTEMA DE FACTURACION BASICO</h1><br>
   </div>
   
<div class="col-12 col-md-6 facturacion datos2">
   <label>Cedula:</label><br>
   <input type="text" name="cc" placeholder="Digite su cedula"><br>
   <label>Nombre:</label><br>
   <input type="text" name="name" placeholder="Digite su nombre"><br>
   <label>Telefono:</label><br>
   <input type="text" name="phone" placeholder="Digite su celular"><br>
   <label>Direccion:</label><br>
   <input type="text" name="direccion" placeholder="Digite su direccion"><br>
   <label>Fecha:</label><br>
   <input type="date" name="fecha" placeholder="Digite la fecha">
 </div><br><br>

   <div class="col-12 col-md-6 facturacion">
       <label>Codigo:</label><br>
       <input type="text" name="code" placeholder="Codigo del Producto"><br>
       <label>Descripcion:</label><br>
       <input type="text" name="descripcion" placeholder="Descripcion del Producto"><br>
       <label>Cantidad:</label><br>
       <input type="text" name="cantidad" placeholder="Cantidad"><br>
       <label>Valor Unitario:</label><br>
       <input type="text" name="vunitario" placeholder="Valor unitario del Producto">
   </div><br><br>
   <div class="col-12 facturacion botones1">
     <input type="submit" name="envia" value="Enviar"><a href="../../index.php"><input type="submit" name="regresar" value="Regresar"></a>
   </div>

</div>
</div>
</form>



Codigo donde recibe los datos
Código (php) [Seleccionar]
<?php 

include(
"conexion_factura.php");

$cedula       $_POST['cc'];
$nombre       $_POST['name'];
$telefono     $_POST['phone'];
$direccion    $_POST['direccion'];
$fecha        $_POST['fecha'];
$codigo       $_POST['code'];
$descripcion  $_POST['descripcion'];
$cantidad     $_POST['cantidad'];
$vUnitario    $_POST['vunitario'];

/* VALIDAR SI LOS DATOS EXISTEN */
$verificar "SELECT * FROM Clientes, Productos WHERE 
Nombre = '
$nombre', 
Cedula = '
$cedula', 
Telefono = '
$telefono'
Direccion = '
$direccion'
Fecha = '
$fecha'
Codigo = '
$codigo'
Descripcion = '
$descripcion'
Cantidad = '
$cantidad'
Vunitario = '
$vUnitario'";
if(mysqli_num_rows($verificar) > 0) {
print 'Los datos ya existen';

/* SI LOS DATOS NO EXISTEN SE INSERTA */
else {

$clientes "INSERT INTO Clientes (Cedula, Nombre, Telefono, Direccion, Fecha) VALUES ('$cedula',            '$nombre',  '$telefono', '$direccion', '$fecha')";

$productos "INSERT INTO Productos (Codigo, Descripcion, Cantidad, Vunitario) VALUES ('$codigo', '$descripcion', '$cantidad', '$vUnitario')";

$verificacion mysqli_query($conectar$clientes);

$verificacion2 mysqli_query($conectar$productos); 

if ($verificacion && $verificacion2) {
header("location: factura.php");
}
else {
header("location: index.php");
}

}

?>



Codigo de la tabla html donde llegan los datos procedentes de la tabla mysql la cual muestra doble registro

Código (php) [Seleccionar]
  <?php 
     
include("conexion_factura.php");
     
     
?>


<div class="container">
 <div class="row">
   <div class="col-12">

 <table class="table table-dark">
 <thead>
   <tr>
     <th scope="col">Cedula</th>
     <th scope="col">Nombre</th>
     <th scope="col">Telefono</th>
     <th scope="col">Direccion</th>
     <th scope="col">Fecha</th>
     <th scope="col">Codigo</th>
     <th scope="col">Descripcion</th>
     <th scope="col">Cantidad</th>
     <th scope="col">Vunitario</th>
     <th scope="col">Vtotal</th>
   </tr>
 </thead>
 <tbody>
<?php
$consulta 
"SELECT Cedula, Nombre, Telefono, Direccion, Fecha FROM Clientes";
$sql mysqli_query($conectar$consulta);
while (
$mostrar mysqli_fetch_array($sql)) {

$consulta2 "SELECT Codigo, Descripcion, Cantidad, Vunitario, Vtotal FROM Productos";
$sql2 mysqli_query($conectar$consulta2);
  while (
$mostrar2 mysqli_fetch_array($sql2)) {
?>


<tr>
 <td><?php echo $mostrar['Cedula']?></td>
 <td><?php echo $mostrar['Nombre']?></td>
 <td><?php echo $mostrar['Telefono']?></td>
 <td><?php echo $mostrar['Direccion']?></td>
 <td><?php echo $mostrar['Fecha']?></td>
 <td><?php echo $mostrar2['Codigo']?></td>
 <td><?php echo $mostrar2['Descripcion']?></td>
 <td><?php echo $mostrar2['Cantidad']?></td>
 <td><?php echo $mostrar2['Vunitario']?></td>
 <td><?php echo $mostrar2['Vtotal']?></td>
</tr>

<?php 

 
}
}
?>


 </tbody>
</table>
<button><a href="index.php">Regresar</a></button>
</div>
</div>
 </div>



Gracias, espero que me puedan colaborar :)

MinusFour

Esto es más un problema con las queries y la forma en la que estás trayendo la información. Posiblemente la estructura de tus tablas necesite cambios.

La primera consulta que haces para revisar si es una entrada es duplicada me parece un poco extraña. Hay un JOIN implícito en tu consulta, pero realmente no hay ninguna forma de vincular tus clientes y tus productos. Lo que significa que unos clientes A y B pueden comprar C y D respectivamente y el dataset que obtienes tendría 4 entradas:


A - C
B - C
A - D
B - D


Lo que básicamente implica que tanto A como B se les facturo C y D.

Es el mismo problema con la forma en la que despliegas la información, estás haciendo un CROSS JOIN manual (con multiples queries). Nuevamente, necesitas agregar un campo en la tabla de Productos que ligue tus clientes con sus productos.

Con eso vas a poder hacer algo como:

Código (sql) [Seleccionar]

SELECT * FROM Productos
INNER JOIN Clientes
ON Clientes.Cedula = Productos.CedulaDeCliente


Otras cosas que deberías tener en cuenta es que muy probablemente no quieras duplicados de Clientes (la query que revisa duplicados, solo revisa por la unión de cliente y producto) y mysqli_num_rows trabaja con los resultados de la consulta (lo que obtienes después de usar mysqli_query).

No se tampoco porque incluyes un hyperlink en el botón de submit

Victor26

Buenas, el problema es que no tengo relacionado la tabla Clientes con Productos.
La tabla Clientes, tiene 5 atributos (Cedula, Nombre, Direccion, Telefono y Fecha).
La tabla Productos, tiene 5 atributos (Codigo, Descripcion, Cantidad, Vunitario y Vtotal)
Las llaves primarias de ambos son Cedula y Codigo.
No he manejado JOIN porque no lo conozco y segun lo que vi en tutoriales necesitaria tener ambas tablas relacionadas para hacer eso.
En el submit tengo el boton "ENVIAR" y "Regresar" que seria a la pagina principal de mi web.
Me tocaria verificar entre ambas tablas cual seria la union entre los campos y aplicar el JOIN pero no se como seria aplicar el JOIN y que parte del codigo llegaria a reemplazar.

Gracias!

MinusFour

Cita de: Victor26 en 10 Octubre 2019, 01:09 AM
Buenas, el problema es que no tengo relacionado la tabla Clientes con Productos.
La tabla Clientes, tiene 5 atributos (Cedula, Nombre, Direccion, Telefono y Fecha).
La tabla Productos, tiene 5 atributos (Codigo, Descripcion, Cantidad, Vunitario y Vtotal)
Las llaves primarias de ambos son Cedula y Codigo.
No he manejado JOIN porque no lo conozco y segun lo que vi en tutoriales necesitaria tener ambas tablas relacionadas para hacer eso.
En el submit tengo el boton "ENVIAR" y "Regresar" que seria a la pagina principal de mi web.
Me tocaria verificar entre ambas tablas cual seria la union entre los campos y aplicar el JOIN pero no se como seria aplicar el JOIN y que parte del codigo llegaria a reemplazar.

Gracias!
Si no hay una forma de relacionar los registros de la tabla de Clientes con la tabla de Productos pues simplemente no deberías crear una consulta que trate de relacionar las dos tablas. Sin un campo para establecer una relación estricta, el JOIN es básicamente un producto cruzado entre las tablas de Clientes y Productos. Todos las entradas en tu tabla de Clientes tendrían una relación con todas las entradas en la tabla de Productos (como te lo explique en el post anterior).

Los campos que mencionas pueden ser la relación, pero vas a tener que revisarlos. Sí estás trabajando con información ya registrada y nadie ha guardado la relación entre estas dos tablas en ningún lado y es un requisito, alguien se ha equivocado gravemente. Mientras que la información exista en algún lado vas a poder adaptar la base de datos para ingresar la información (buena suerte si las escribió el doctor del pueblo a mano) pero si no...

El JOIN no es nada complicado ya te he puesto el código arriba de como se vería (lo que si necesitas revisar son los campos en los que trabaja el ON).

Puedes imprimir la tabla de clientes y la tabla de productos pero independientemente.