Problema insert de datos en PHP

Iniciado por Victor26, 8 Febrero 2020, 19:41 PM

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

Victor26

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:

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
Código (php) [Seleccionar]
<?php
session_start
();
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]."'),";
}

echo json_encode(array('cadena' => $cadena));
$cadena_final substr($cadena0,-1);
$cadena_final.=";";
$sql mysqli_query($conectar$cadena_final);
if ($sql) {
header("location:index.php");
}else {
echo 'Error';
}
$mysqli mysqli_close($conectar);

?>


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:
Código (html4strict) [Seleccionar]
<section class="cuerpo">
<form method="POST" action="validarfactu.php" class="factura">
<div class="container">
<div class="row">
<div class="col-12 col-sm-6">
<br><label for="nf">Numero de Factura</label>
    <br><input type="number" id="nf" name="numfact[]">
    <br><label for="code">Cliente</label>
    <br><select name="user[]">
    <option>Seleccione el cliente</option>
    <?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 }?>
    </select>
    <br><label for="iva">IVA</label>
    <br><input type="number" id="iva" name="iva[]">
    <br><label for="fc">Fecha de Creacion</label>
    <br><input type="date" id="fc" name="fc[]">
    <br><label for="fe">Fecha de Entrega</label>
    <br><input type="date" id="fe" name="fe[]">
</div>

<div class="col-12 col-sm-6 repetido">
    <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[]">
</div>
  <button type="submit" class="btn btn-primary submit">Submit</button>
</div>
</div>
</form>
<center><input type="submit" id="agregar" value="+"></center>
</section


el Jquery
Código (javascript) [Seleccionar]
// 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

WHK

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.