How to insert data using query in a for loop?

1

I'm trying to insert data into the mysql DB, and some data is repeated, and others not so who would command the number of executions would be for , but not executing the query inside the for. I already did some test of echo and the variables are ok.

 $control=mysqli_query($conn,"select ifnull(max(id_controle),0)from ficha");
 $controll=mysqli_fetch_row($control);

 $ct=$controll[0];
 $ct++;

$quantidade = count($quant);

$qu.="insert into ficha (id_controle,id_pedido,id_cliente,quantidade,id-   produto,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)";
for ($q = 0; $q < $quantidade; $q++){

$quant[$q];
$descricao[$q];
$cor[$q];
$valorm[$q];
$idcliente;
$ct;
$pedido;
$idcliente;
$acrecimo;
$entrega;
$montagem;
$tsmg;
$qu.="values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')";
$p=mysqli_query($conn,$qu);

} }

Can anyone help?

    
asked by anonymous 19.06.2016 / 22:49

1 answer

1

The problem is in string concatenation.

The variable $ qu is being used to concatenate your sql command. What happens is this:

$ qu value before loop :

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,****id-   produto****,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)

Notice what's in ****, you'll probably get an error in the sql command, check the column name.

$ qu value after the first loop iteration:

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,****id-   produto****,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')

Notice that VALUES is pasted to), you will probably get error in the first iteration itself.

In the second iteration of the loop you will be adding the value of $ qu with values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg') , resulting in:

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,id-   produto,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs)values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')

The word VALUES is repeating what is incorrect in the sql syntax, the correct one should be:

insert into ficha (id_controle,id_pedido,id_cliente,quantidade,id-   produto,cor,valormontagem,valoracrescimo,dataentrega,datamontagem,obs) values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg'), ('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')

And it happens more and more each time the loop rotates.

Instead of:

    $qu.="values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')";

   $p=mysqli_query($conn,$qu);

Try :

$p=mysqli_query($conn,$qu . " values('$ct','$pedido','$idcliente','$quant','$descricao','$cor','$valorm','$acrescimo','$entrega','$montagem','$tsmg')");

In this way you do not assign the concatenation in $ qu, note that I also put a space before values

    
20.06.2016 / 13:38