Buenas a todos, les pido el favor para una colaboracion para un tema que estoy haciendo y no se como solucionarlo.
ESTE ES EL INDEX:
(https://i.ibb.co/Sr6YR1d/Captura-de-pantalla-de-2020-02-08-12-47-17.png)
Resulta que estoy realizando un formulario donde digito informacion acerca del usuario que voy a ingresar, el numero de factura, iva, fecha de creacion de la factura y fecha de entrega. Esa informacion no necesito repetirla, porque es unica.
Pero la informacion que tengo a la izquierda es el codigo y cantidad del producto que deseo anotar, Ahora.. Abajo tengo un boton llamado "+", el cual se encarga de cojer esos dos inputs del lado de la izquierda y repetirlos, para poder digitar otros codigos de productos, y todo eso me da normal...
El problema que veo es que al momento de yo mandar los datos a travez del boton "Submit", el los manda pero no se como hacer para que en el sistema del INSERT se pueda digitar las variables que ya estan asociadas (Numero de factura, Usuario, Iva, Fecha de Creacion y Entrega), con las que estoy repitiendo (Codigo y Cantidad).
PD: Ya encontre como mandar un grupo de array por php a mysql que seria asi
<?php
include("../conexion_mysql.php");
$numfact = $_POST['numfact'];
$codigo = $_POST['codigo'];
$cantid = $_POST['cantidad'];
$usuari = $_POST['user'];
$iva = $_POST['iva'];
$fc = $_POST['fc'];
$fe = $_POST['fe'];
$vtotal = 0;
$cadena = "INSERT INTO factura (num_factura, codigo, usuario, cantidad, iva, fechacrea, fechaentre, vtotal) VALUES ";
for ($i=0; $i < count($codigo); $i++) { $cadena.= "(".$numfact[$i]."', '".$codigo[$i]."', '".$usuari[$i]."', '".$cantid[$i].",".$iva[$i]."', '".$fc[$i]."', '".$fe[$i]."', '".$vtotal[$i]."'),";
}
$cadena_final = substr($cadena, 0,-1); $cadena_final.=";";
if ($sql) {
}else {
echo 'Error';
}
?>
Pero ovbiamente al momento de mandar me sale un error que este.
<br />
<b>Notice</b>: Trying to access array offset on value of type int in <b>/opt/lampp/htdocs/MiPagina/php/Facturacion/validarfactu.php</b> on line <b>15</b><br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>/opt/lampp/htdocs/MiPagina/php/Facturacion/validarfactu.php</b> on line <b>15</b><br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>/opt/lampp/htdocs/MiPagina/php/Facturacion/validarfactu.php</b> on line <b>15</b><br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>/opt/lampp/htdocs/MiPagina/php/Facturacion/validarfactu.php</b> on line <b>15</b><br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>/opt/lampp/htdocs/MiPagina/php/Facturacion/validarfactu.php</b> on line <b>15</b><br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>/opt/lampp/htdocs/MiPagina/php/Facturacion/validarfactu.php</b> on line <b>15</b><br />
<br />
<b>Notice</b>: Trying to access array offset on value of type int in <b>/opt/lampp/htdocs/MiPagina/php/Facturacion/validarfactu.php</b> on line <b>15</b><br />
{"cadena":"INSERT INTO factura (num_factura, codigo, usuario, cantidad, iva, fechacrea, fechaentre, vtotal) VALUES ('01', '1234', 'usuario', '5,5', '2020-02-08', '2020-02-20', ''),('', '1235', '', '6,', '', '', ''),"}
Utilizo Jquery por el metodo JSON para mandar los datos de html a php
el HTML es este:
<section class="cuerpo">
<form method="POST" action="validarfactu.php" class="factura"> <div class="col-12 col-sm-6"> <br><input type="number" id="nf" name="numfact[]"> <?php
$sql = "SELECT usuario FROM usuario";
$consulta = mysqli_query($conectar, $sql);
while ($mover = mysqli_fetch_array($consulta)){
?>
<option value="<?php echo $mover['usuario']; ?>">
<?php echo $mover['usuario']; ?></option> <?php }?>
<br><input type="number" id="iva" name="iva[]"> <br><input type="date" id="fc" name="fc[]"> <br><input type="date" id="fe" name="fe[]">
<div class="col-12 col-sm-6 repetido"> <br><input id="code" type="number" name="codigo[]"> <br><input type="number" id="cantidad" name="cantidad[]"> <button type="submit" class="btn btn-primary submit">Submit
</button> </section
el Jquery
// CLONAR Y ELIMINAR INPUT
$(document).ready(function(e){
// VARIABLES
var html = '<center><div><label for="code">Codigo</label><br><input id="code" type="number" name="codigo[]"><br><label for="cantidad">Cantidad</label><br><input type="number" id="cantidad" name="cantidad[]"><br> <hr><button id="exit">X</button></div></center>';
// CLONAR
$("#agregar").click(function(){
$(".repetido").append(html);
});
// ELIMINAR
$(".repetido").on('click','#exit',function(){
$(this).parent('div').remove();
});
});
// PETICION TIPO AJAX
jQuery(document).on('submit','.factura',function(event){
event.preventDefault();
jQuery.ajax({
url: 'validarfactu.php',
type: 'POST',
dataType: 'json',
data: $(this).serialize(),
})
.done(function(respuesta){
console.log(respuesta);
if(!respuesta.error) {
alert("Los datos se ingresaron correctamente");
}else {
alert("Los datos NO se ingresaron correctamente");
}
})
.fail(function(resp){
console.log(resp.responseText);
})
.always(function(){
console.log("complete");
})
});
Alguna persona que me pueda colaborar?, por favor gracias :D
El problema erstá acá:
for ($i=0; $i < count($codigo); $i++) {
$cadena.= "(".$numfact[$i]."', '".$codigo[$i]."', '".$usuari[$i]."', '".$cantid[$i].",".$iva[$i]."', '".$fc[$i]."', '".$fe[$i]."', '".$vtotal[$i]."'),";
}
Estás haciendo un for con una cantidad de vueltas igual a la longitud de $codigo, pero no todos los campos ingresados tienen la misma longitud, por lo cual cuando php intenta acceder al itemd e un array a traves del valor de $i este arroja un error porque el array no tiene esa cantidad de datos. Lo que no se sabe es cual de todos los datos exactamente no tiene la misma cantidad de registros, pero por otro lado tampoco tienes un control que indique que todos los arrays deben tener la misma cantidad de datos.
Haz algo, haz un print_r() a todos los datos antes de procesarlos y cuentalos. Tambien puedes probar con count($codigo)-1 ya que debes contar el valor 0 del array.
Saludos.