How to write checkbox and Product Id in MySQL

1

I'm trying to write some checkbox plus ID of the product in my database MySQL but I'm not getting it, what I have so far is this:

The form:

<input class="chk" type="checkbox" name="cores[]" value="<?php echo $row_RsCores['id_cor_textura']; ?>" />
<input name="IdProduto" type="hidden" value="<?php echo $id_produto; ?>">

The script that should perform the recording:

// RESGATE DAS VARIÁVEIS
$IdProduto = $_POST['IdProduto'];
$itens = $_REQUEST['cores'];

if (!empty($itens)) {                
    $qtd = count($itens);
    for ($i = 0; $i < $qtd; $i++) {
        // echo $itens[$i];//imprime o item corrente

        mysql_select_db($database_conexao, $conexao);
        $query = "INSERT INTO produto_textura  
            (id_produto,
            id_cor_textura
            ) 
            VALUES 
            ('$IdProduto',
            '$itens[$i]')";
     }

   $queryExec = mysql_query($query, $conexao) or die( "Erro ao inserir checks no banco de dados.");
}

The error that occurs is this:

"Erro ao inserir checks no banco de dados."

My MySQL looks like this:

    
asked by anonymous 28.12.2015 / 11:58

2 answers

1

The last record is inserted because the value of $query is re-evaluated every time the for, that is, the mysql_query() must be inside the for to insert N records.

Look at the problem:

for ($i = 0; $i < $qtd; $i++) {
        $query = "INSERT INTO produto_textura  
            (id_produto,
            id_cor_textura
            ) 
            VALUES 
            ('$IdProduto',
            '$itens[$i]')";
} // <--- fim do for

//apenas o último valor dentro de $query será inserido.
$queryExec = mysql_query($query, $conexao) or die( "Erro ao inserir checks no banco de dados.");

Some simplifications can be made, such as assembling a template from an insert with N values so only one query is sent to the bank. Remove the mysql_select_db() from within the for.

mysql_select_db ($ database_connection, $ connection);

$IdProduto = $_POST['IdProduto'];
$itens = $_REQUEST['cores'];

if (!empty($itens)) {
    $query = "INSERT INTO produto_textura (id_produto, id_cor_textura) VALUES ";                
    foreach($itens as $item){
        $query .= sprintf("('%s','%s'),", $IdProduto, $item);
    }
    $query = trim(',', $query);
    $queryExec = mysql_query($query, $conexao) or die(mysql_error());
}
    
28.12.2015 / 13:34
1

The columns id_produto and id_cor_textura are of type int and you are trying to enter values of type string . Also, you are trying to insert "$IdProduto" instead of the value of the IdProduto variable.

Change the query to enter the values with the correct types and correct references:

$query = "INSERT INTO produto_textura  
            (id_produto,
            id_cor_textura
            ) 
            VALUES 
            ($IdProduto,
            $itens[$i])";

If it does not work, change the query result to show the query execution error:

$queryExec = mysql_query($query, $conexao) or die( "Erro ao inserir registro no  banco de dados: ".mysql_error());
    
28.12.2015 / 13:24