Como faço para colocar mais uma campo nessa tabela

18 respostas Resolvido
pdophpmysql
Harley_Rodrigues

Como faço para colocar mais uma campo igual o mvp_entrega, tentei aqui mas apresento erro

<?php

include_once '../cadastro/conexao.php';

$id_metas = filter_input(INPUT_POST, 'id_metas', FILTER_SANITIZE_STRING);
$mvp_entrega = $_POST["mvp_entrega"];

$cont_insert = false;

foreach ($mvp_entrega as $mvp_entrega) {
    $result_aula = "INSERT INTO entregas (id_metas, mvp_entrega) VALUES (:id_metas, :mvp_entrega)";

    $insert_aula = $conn->prepare($result_aula);
    $insert_aula->bindParam(':id_metas', $id_metas);
    $insert_aula->bindParam(':mvp_entrega', $mvp_entrega);
    if ($insert_aula->execute()) {
        $cont_insert = true;
    } else {
        $cont_insert = false;
    }
}
if ($cont_insert) {
    echo "<p style='color:green;'>Cadastrado com Sucesso</p>";
} else {
    echo "<p style='color:red;'>Erro ao cadastrar</p>";
}

<center>
            <form class="form" id="add-aula" method="POST">
                <div class="section">
                    <div class="control-group">
                        <div class="input-group">
                            <span style="min-width: 85px; font-weight: bold; border: 1px solid #ccc; border-radius: 4px;" class="input-group-addon">Meta: <?php if(isset($row_msg_cont['nome_meta'])){ echo $row_msg_cont['nome_meta']; } ?></span>
                        </div>
                        <input class="form-control" type="hidden" readonly name="id_metas" value="<?php if(isset($row_msg_cont['id_metas'])){ echo $row_msg_cont['id_metas']; } ?>">
                        <div class="input-group">
                            <span style="min-width: 170px; font-weight: bold;" class="input-group-addon">MVP</span>
                            <span style="min-width: 200px; font-weight: bold;" class="input-group-addon">Entrega</span>
                            <span style="min-width: 160px; font-weight: bold;" class="input-group-addon">Data</span>
                            <span style="min-width: 100px; font-weight: bold;" class="input-group-addon">Status</span>
                            <span style="min-width: 100px; font-weight: bold;" value="aa" class="input-group-addon">Peso (%)</span>
                        </div>
                        <div style="display: block; display: flow-root;" class="input-group" id="formularios">
                            <input style="max-width: 170px; height: 63px; text-align: center;" class="form-control" type="text" name="mvp_entrega[]" placeholder="Produto viável mínimo">
                            <input style="max-width: 200px; height: 63px; text-align: center;" class="form-control" type="text" name="nome_entrega[]" placeholder="Descreva a Entrega">
                            <input style="max-width: 160px; height: 63px; text-align: center;" class="form-control" type="date" name="data_entrega[]" onkeypress="$(this).mask('000')">
                            <select style="max-width: 100px; height: 63px; text-align: center;" class="form-control" name="status_entrega[]">
                                <option value="" selected>--</option>
                                <option value="Entregue">Entregue</option>
                                <option value="A Entregar">A Entregar</option>
                                <option value="Em Atraso">Em Atraso</option>
                            </select>
                            <input style="max-width: 65px; height: 63px; text-align: center;" class="form-control" type="text" name="peso_entrega[]" id="peso_entrega" placeholder="Peso" onkeypress="$(this).mask('000')">
                            <span style=" height: 63px; width: 34px; color: #fff;border-radius: 4px; border-top-left-radius: 0px;border-bottom-left-radius: 0px;" class="input-group-addon btn-success" type="button" id="add-campo">+</span>
                            <input  name="resultado_pesos" id="resultado_pesos" value="" type="text">
                            <span id="msg" name="msg"></span>
                        </div>
                    </div>
                    <div class="control-group">
                        <span class="btn btn-primary btn-block" type="button" name="CadAulas" id="CadAulas" value="Cadastrar">Cadastrar</span>
                    </div>
                </div>
            </form>
        </div>
    </center>

<script>
    $(document).ready(function () {
        var cont = 1;
//https://api.jquery.com/click/
$('#add-campo').click(function () {
    cont++;
//https://api.jquery.com/append/
$('#formulario').append('<div style="margin-top: 16px;" id="campo' + cont + '" class="input-group"><span style="width: 140px;" class="input-group-addon">Descreva a Meta:</span><input style="height: 34px; width: 278px" type="text" class="form-control" id="inlineCheckbox1" name="nome_meta[]" placeholder="Descreva a Meta"><span style="color: #fff; height: 34px; min-width: 34px" class="btn-apagar input-group-addon btn btn-danger" type="button" id="' + cont + '">-</span></div>');
});

$('form').on('click', '.btn-apagar', function () {;
    var button_id = $(this).attr("id");
    $('#campo' + button_id + '').remove();
});

$("#CadAulas").click(function () {
//Receber os dados do formulário
var dados = $("#add-aula").serialize();
$.post("insert.php", dados, function (retorna) {
    $("#msg").slideDown('slow').html(retorna);

//Limpar os campos
//$('#add-aula')[0].reset();

colocarMsg();
//Apresentar a mensagem leve
retirarMsg();
});
});

//Retirar a mensagem após 1700 milissegundos
function retirarMsg() {
    setTimeout(function () {
        $("#msg").slideUp('slow', function () {});
    }, 2700);
}
});
</script>

18 Respostas

RoinujNosde

O que você tentou? Qual erro deu?

Harley_Rodrigues

usando esse insert

<?php

include_once '../cadastro/conexao.php';

$id_metas = filter_input(INPUT_POST, 'id_metas', FILTER_SANITIZE_STRING);
$mvp_entrega = $_POST["mvp_entrega"];
$nome_entrega = $_POST["nome_entrega"];
$cont_insert = false;

foreach ($mvp_entrega as $mvp_entrega){
$result_aula = "INSERT INTO entregas (id_metas, mvp_entrega, nome_entrega) VALUES (:id_metas, :mvp_entrega, :nome_entrega)";

$insert_aula = $conn->prepare($result_aula);
$insert_aula->bindParam(':id_metas', $id_metas);
$insert_aula->bindParam(':mvp_entrega', $mvp_entrega);
$insert_aula->bindParam(':nome_entrega', $nome_entrega);
if ($insert_aula->execute()) {
    $cont_insert = true;
} else {
    $cont_insert = false;
}
}
if ($cont_insert) {
echo "<p style='color:green;'>Cadastrado com Sucesso</p>";
} else {
echo "<p style='color:red;'>Erro ao cadastrar</p>";
}

deu esse erro

Warning : Array to string conversion in C:\xampp\htdocs\planejamento\admin\monitora\insert.php on line 16

Cadastrado com Sucesso

RoinujNosde

Hm, parece que “nome_entrega” é um array também. Poderia iterar pelos dois arrays.

Tenta assim:

for ($i = 0; $i < count($mvp_entrega) && $i < count($nome_entrega); $i++) {
   $entrega = $mvp_entrega[$i];
   $nome = $nome_entrega[$i];
   
   $result_aula = "INSERT INTO entregas (id_metas, mvp_entrega, nome_entrega) VALUES (:id_metas, :entrega, :nome)";
  //resto
}
Harley_Rodrigues
<?php

include_once '../cadastro/conexao.php';

$id_metas = filter_input(INPUT_POST, 'id_metas', FILTER_SANITIZE_STRING);
$mvp_entrega = $_POST["mvp_entrega"];
$nome_entrega = $_POST["nome_entrega"];
$cont_insert = false;

for ($i = 0; $i < count($mvp_entrega) && $i < count($nome_entrega); $i++) {
   $entrega = $mvp_entrega[$i];
   $nome = $nome_entrega[$i];
   
   $result_aula = "INSERT INTO entregas (id_metas, mvp_entrega, nome_entrega) VALUES (:id_metas, :entrega, :nome)";

    $insert_aula = $conn->prepare($result_aula);
    $insert_aula->bindParam(':id_metas', $id_metas);
    $insert_aula->bindParam(':mvp_entrega', $mvp_entrega);
    $insert_aula->bindParam(':nome_entrega', $nome_entrega);
    if ($insert_aula->execute()) {
        $cont_insert = true;
    } else {
        $cont_insert = false;
    }
}
if ($cont_insert) {
    echo "<p style='color:green;'>Cadastrado com Sucesso</p>";
} else {
    echo "<p style='color:red;'>Erro ao cadastrar</p>";
}

apresentou esse erro:

Warning : Array to string conversion in C:\xampp\htdocs\planejamento\admin\monitora\insert.php on line 18

Warning : Array to string conversion in C:\xampp\htdocs\planejamento\admin\monitora\insert.php on line 19

**Fatal error** : Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\planejamento\admin\monitora\insert.php:20 Stack trace: #0 C:\xampp\htdocs\planejamento\admin\monitora\insert.php(20): PDOStatement->execute() #1 {main} thrown in **C:\xampp\htdocs\planejamento\admin\monitora\insert.php** on line **20**

RoinujNosde

Troca $mvp_entrega por $entrega e $nome_entrega por $nome

Harley_Rodrigues

somente a variavel ?

Harley_Rodrigues

Warning : Undefined array key “mvp” in C:\xampp\htdocs\planejamento\admin\monitora\insert.php on line 6

Warning : Undefined array key “nome” in C:\xampp\htdocs\planejamento\admin\monitora\insert.php on line 7

Fatal error : Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, null given in C:\xampp\htdocs\planejamento\admin\monitora\insert.php:10 Stack trace: #0 {main} thrown in C:\xampp\htdocs\planejamento\admin\monitora\insert.php on line 10

<?php

include_once '../cadastro/conexao.php';

$id_metas = filter_input(INPUT_POST, 'id_metas', FILTER_SANITIZE_STRING);
$mvp = $_POST["mvp"];
$nome = $_POST["nome"];
$cont_insert = false;

for ($i = 0; $i < count($mvp) && $i < count($nome); $i++) {
   $entrega = $mvp[$i];
   $nome = $nome[$i];
   
   $result_aula = "INSERT INTO entregas (id_metas, mvp, nome) VALUES (:id_metas, :mvp, :nome)";

    $insert_aula = $conn->prepare($result_aula);
    $insert_aula->bindParam(':id_metas', $id_metas);
    $insert_aula->bindParam(':mvp', $mvp);
    $insert_aula->bindParam(':nome', $nome);
    if ($insert_aula->execute()) {
        $cont_insert = true;
    } else {
        $cont_insert = false;
    }
}
if ($cont_insert) {
    echo "<p style='color:green;'>Cadastrado com Sucesso</p>";
} else {
    echo "<p style='color:red;'>Erro ao cadastrar</p>";
}
RoinujNosde
Solucao aceita
<?php

include_once '../cadastro/conexao.php';

$id_metas = filter_input(INPUT_POST, 'id_metas', FILTER_SANITIZE_STRING);
$mvp_entrega = $_POST["mvp_entrega"];
$nome_entrega = $_POST["nome_entrega"];
$cont_insert = false;

for ($i = 0; $i < count($mvp_entrega) && $i < count($nome_entrega); $i++) {
   $entrega = $mvp_entrega[$i];
   $nome = $nome_entrega[$i];
   
   $result_aula = "INSERT INTO entregas (id_metas, mvp_entrega, nome_entrega) VALUES (:id_metas, :entrega, :nome)";

    $insert_aula = $conn->prepare($result_aula);
    $insert_aula->bindParam(':id_metas', $id_metas);
    $insert_aula->bindParam(':entrega', $entrega);
    $insert_aula->bindParam(':nome', $nome);
    if ($insert_aula->execute()) {
        $cont_insert = true;
    } else {
        $cont_insert = false;
    }
}
if ($cont_insert) {
    echo "<p style='color:green;'>Cadastrado com Sucesso</p>";
} else {
    echo "<p style='color:red;'>Erro ao cadastrar</p>";
}
Harley_Rodrigues

foi …

se eu quiser adiconar mais por exemplo “data_entrega”

RoinujNosde

Só fazer algo parecido.

Dentro do for:

$data = $data_entrega[$i];

E usar $data nas queries.

Harley_Rodrigues

seria assim ?

<?php

include_once '../cadastro/conexao.php';

$id_metas = filter_input(INPUT_POST, 'id_metas', FILTER_SANITIZE_STRING);
$mvp_entrega = $_POST["mvp_entrega"];
$nome_entrega = $_POST["nome_entrega"];
$data_entrega = $_POST["data_entrega"];

$cont_insert = false;

for ($i = 0; $i < count($mvp_entrega) && $i < count($nome_entrega) && $i < count($data_entrega); $i++) {
   $entrega = $mvp_entrega[$i];
   $nome = $nome_entrega[$i];
   $data = $data_entrega[$i];
   
   $result_aula = "INSERT INTO entregas (id_metas, mvp_entrega, nome_entrega, data_entrega) VALUES (:id_metas, :entrega, :nome :data)";

    $insert_aula = $conn->prepare($result_aula);
    $insert_aula->bindParam(':id_metas', $id_metas);
    $insert_aula->bindParam(':entrega', $entrega);
    $insert_aula->bindParam(':nome', $nome);
    $insert_aula->bindParam(':data', $data);
    if ($insert_aula->execute()) {
        $cont_insert = true;
    } else {
        $cont_insert = false;
    }
}
if ($cont_insert) {
    echo "<p style='color:green;'>Cadastrado com Sucesso</p>";
} else {
    echo "<p style='color:red;'>Erro ao cadastrar</p>";
}
RoinujNosde

Tá faltando uma vírgula aqui.
De resto parece que tá certo.

Todos os arrays tem o mesmo tamanho?
Se sim, pode reduzir isso para $i < count($mvp_entrega)

Harley_Rodrigues

oque voce quer dizer com tamanho ?

RoinujNosde

Digamos que tem o array [“Maçã”, “Banana”, “Melancia”].
A contagem de items/o tamanho é 3.

E você tá trabalhando com arrays aí.

Harley_Rodrigues
<form class="form" id="add-aula" method="POST">
                <div class="section">
                    <div class="control-group">
                        <div class="input-group">
                            <span style="min-width: 85px; font-weight: bold; border: 1px solid #ccc; border-radius: 4px;" class="input-group-addon">Meta: <?php if(isset($row_msg_cont['nome_meta'])){ echo $row_msg_cont['nome_meta']; } ?></span>
                        </div>
                        <input class="form-control" type="hidden" readonly name="id_metas" value="<?php if(isset($row_msg_cont['id_metas'])){ echo $row_msg_cont['id_metas']; } ?>">
                        <div class="input-group">
                            <span style="min-width: 170px; font-weight: bold;" class="input-group-addon">MVP</span>
                            <span style="min-width: 200px; font-weight: bold;" class="input-group-addon">Entrega</span>
                            <span style="min-width: 160px; font-weight: bold;" class="input-group-addon">Data</span>
                            <span style="min-width: 100px; font-weight: bold;" class="input-group-addon">Status</span>
                            <span style="min-width: 100px; font-weight: bold;" value="aa" class="input-group-addon">Peso (%)</span>
                        </div>
                        <div style="display: block; display: flow-root;" class="input-group" id="formularios">
                            <input style="max-width: 170px; height: 63px; text-align: center;" class="form-control" type="text" name="mvp_entrega[]" placeholder="Produto viável mínimo">
                            <input style="max-width: 200px; height: 63px; text-align: center;" class="form-control" type="text" name="nome_entrega[]" placeholder="Descreva a Entrega">
                            <input style="max-width: 160px; height: 63px; text-align: center;" class="form-control" type="date" name="data_entrega[]" onkeypress="$(this).mask('000')">
                            <select style="max-width: 100px; height: 63px; text-align: center;" class="form-control" name="status_entrega[]">
                                <option value="" selected>--</option>
                                <option value="Entregue">Entregue</option>
                                <option value="A Entregar">A Entregar</option>
                                <option value="Em Atraso">Em Atraso</option>
                            </select>
                            <input style="max-width: 65px; height: 63px; text-align: center;" class="form-control" type="text" name="peso_entrega[]" id="peso_entrega" placeholder="Peso" onkeypress="$(this).mask('000')">
                            <span style=" height: 63px; width: 34px; color: #fff;border-radius: 4px; border-top-left-radius: 0px;border-bottom-left-radius: 0px;" class="input-group-addon btn-success" type="button" id="add-campo">+</span>
                        </div>
                        <span id="msg" name="msg"></span>
                    </div>
                    <div class="control-group">
                        <span class="btn btn-primary btn-block" type="button" name="CadAulas" id="CadAulas" value="Cadastrar">Cadastrar</span>
                    </div>
                </div>
            </form>

olha ai como está meu form, estou adicionando aqui, nao deu problema…

RoinujNosde

Não tá duplicando?

Harley_Rodrigues

não

RoinujNosde

Então respondendo a minha pergunta, os arrays são do mesmo tamanho.
Pode fazer aquela forma reduzida no for se quiser.

Criado 14 de maio de 2021
Ultima resposta 14 de mai. de 2021
Respostas 18
Participantes 2