How to save array in db?

1

I have 4 fields and I want to save in a db, however when putting in foreach ($ _post ['name'] the $ name) ... I do not know how to add more ..

**DB**
id | vt | nome | qtn | id_cat
1  | 23 | qua..| 58  | 4
2  | 36 | não..| 57  | 2

register

<form action="php/cad.php" method="post">
    <label>
        <input type="button" class="btn btn-default" name="add" value="Add" />
    </label>
    <label>vt:</label>

    <fieldset id="inputs_adicionais"></fieldset>

    <input type="submit" value="Cadastrar" class="btn btn-default">
</form>

<script type="text/javascript">
    $(document).ready(function(){

        var input = '<label>Nome: <input type="text" name="vt[]" /> <input type="text" name="nome[]" placeholder="Nome"> <input type="text" name="qtn[]"  placeholder="Qtn"> <input type="text" name="id_cat[]" placeholder="id cat"> <a href="#" class="remove">X</a></label>';

        $("input[name='add']").click(function( e ){
            $('#inputs_adicionais').append( input );
        });

        $('#inputs_adicionais').delegate('a','click',function( e ){
            e.preventDefault();
            $( this ).parent('label').remove();
        });

    });
</script>

register in db

<?php
    include "conexao.php";

    $vt = $_POST['vt'];
    $nome = $_POST['nome'];
    $qtn = $_POST['qtn'];
    $id_cat = $_POST['id_cat'];

    $sql = "INSERT INTO produto(vt, nome, qtn, id_cat) VALUES ('$vt', '$nome', '$qtn', '$id_cat')";
    $query = $con->query($sql);

    if($query!=null){
        print "<script>window.location='../inicio.php';</script>";
    }
?>
    
asked by anonymous 15.05.2017 / 17:25

1 answer

2

Example of how to mount an insert with multiple values instead of generating an insert for each loop repeat.

Comments of what the script does are embedded in the code.

Note that there is no validation of receiving $ _POST because this is not the focus of the question, but I suggest that you make a minimal treatment to avoid errors.

<?php
include "conexao.php";

/*
O laço de repetição prioriza o campo "nome". Se existir outro campo com um array maior, os arrays excedentes em relação aos arrays do campo "nome" serão ignorados.

Isso não é uma regra geral. É apenas um exemplo de como poderá tratar os dados.
*/ 
foreach ($_POST['nome'] as $k => $v) {
    $p = 'vt';
    // Se vt for não existir nesse índice do array, receberá valor vazio
    if (!isset($_POST[$p][$k])) {
        $_POST[$p][$k] = '';
    }
    $$p = $_POST[$p][$k];

    $p = 'qtn';
    // Se qtn for não existir nesse índice do array, receberá valor ZERO
    if (!isset($_POST[$p][$k])) {
        $_POST[$p][$k] = '0';
    }
    $$p = $_POST[$p][$k];

    $p = 'id_cat';
    // Se id_cat for não existir nesse índice do array, receberá valor vazio
    if (!isset($_POST[$p][$k])) {
        $_POST[$p][$k] = '';
    }
    $$p = $_POST[$p][$k];

    $values[] = "('$vt', '$v', '$qtn', '$id_cat')";
}

$sql = 'INSERT INTO produto(vt, nome, qtn, id_cat) VALUES  '.implode(PHP_EOL.', ', $values);

$query = $con->query($sql);
if($query!=null){
    print "<script>window.location='../inicio.php';</script>";
}
?>
    
15.05.2017 / 17:50