Como faço para colocar mais uma campo nessa tabela

18 respostas Resolvido
pdophpmysql
H

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

R

O que você tentou? Qual erro deu?

H

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

R

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
}
H
<?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**

R

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

H

somente a variavel ?

H

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>";
}
R
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>";
}
H

foi …

se eu quiser adiconar mais por exemplo “data_entrega”

R

Só fazer algo parecido.

Dentro do for:

$data = $data_entrega[$i];

E usar $data nas queries.

H

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>";
}
R

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)

H

oque voce quer dizer com tamanho ?

R

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

E você tá trabalhando com arrays aí.

H
<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…

R

Não tá duplicando?

H

não

R

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