Jump to content
Richard.Ribeiro

Salvar dados dos Inputs clonados pelo OnClick

Recommended Posts

Boa tarde Pessoal e minha primeira vez aqui. e gostaria de uma ajuda.

como posso salvar no banco o input adicionado pela função ONCLICK??

Encontrei essa ajuda  aqui no fórum "(formulario[0][quantidade]) para que os inputs adicionados não fiquem com mesmo nome, porém ainda não conseguir salvar no banco, estou salvando apenas o principal.

Resumindo, preciso salvar os pedidos de todos inputs e select adicionado pelo onlick.

 

 

  <div id="box" >

  <form id="teste"  method="post">
    <?php
      if(isset($_POST['acao'])){
        $tipo_material = $_POST['material'];
        $quantidade = $_POST['quantidade'];


        // salvar no banco de dados!
            $gravar = new Painel();
            $gravar->cadastrarItem($tipo_material,$quantidade);

            }
  ?>

  <div class="pedido">


    <label>Selecione Material:</label>
    <select name="formulario[0] [material]" id="material">  

--AQUI MOSTRA OS DADOS RETORNADOS POR UM CONSULTA AO BANCO COM FOREACH--

       </select>
    <input type="text" id="quantidade" name="formulario[0][quantidade]" placeholder="Digite a Quantidade" >
    <input type="submit" name="acao" value="Cadastrar!">
    </form>

</div><!--pedido-->
  </div><!--box-->

 

 

Share this post


Link to post
Share on other sites

vc transforma em um array:

 

<input type="text" id="quantidade" name="quantidade[]" placeholder="Digite a Quantidade" >

 

e ai no server-side, vc tem que iterar nesse array:

 

$quantidade1 = $_POST['quantidade'][0];

$quantidade2 = $_POST['quantidade'][1];

 

 

entendeu?

Share this post


Link to post
Share on other sites

Willian, por gentileza, OK transformando em array, MAS uma vez que não sei quantas vezes o usuário vai duplica o input "quantidade" e "material" como faço no PHP.. por que pode ter quantidade[0] ou quantidade[10]  em um único pedido

Share this post


Link to post
Share on other sites

Pelo que entendi, você quer que o usuário possa te enviar um pedido com vários materiais e um valor para cada um deles, certo? Algo como....

 

<?php

$dados = array(
  'materiais' => array(
    1 => 'cimento',
    2 => 'tijolo',
  ),
  'quantidades' => array(
    1 => '21',
    2 => '200',
  ),
);

?>

Ou ainda... para ficar mais fácil...

 

<?php

$dados = array(
  1 => array(
    'produto' => 'cimento',
    'quantidade' => '200',
  ),
  2 => array
    'produto' => 'tijolo',
    'quantidade' => '400',
  ),
);

?>

 

Share this post


Link to post
Share on other sites

Agradeço Pessoal pelas orientações.. resolvir usando JS.

  <div class="pedido">


    <label>Selecione Material:</label>
    <select name="material[]" id="material">
      <option selected disabled>--- Selecionte o Material ---</option>
  <?php
  $categoria = Painel::selectAll('tipo_material');
  foreach ($categoria as $key => $value) {
    ?>

  <option value="<?php echo $value ['descricao'];?>">
      <?php echo $value ['descricao']; ?>

  </option>

<?php } ?>

 

    </select>
    <input type="text" id="quantidade" name="qnt_solicitada[]" placeholder="Digite a Quantidade" >

 


  </div>

</div>
    <button type="button" name="button" class="clonador">Novo Item:</button>
<input type="submit" name="acao" value="Cadastrar!">
  </form>

 

 

 

 

 

 

 


<script  src="<?php echo INCLUDE_PATH_PAINEL ?>js/jquery-3.4.1.min.js"></script>
<script>
$(document).ready(function(){

      var elm_html = $('.pedido').html();   //faz uma cópia dos elementos a serem clonados.

      $(document).on('click', '.clonador', function(e){
          e.preventDefault();
          var i = $('.pedido').length;    //pega a quantidade de clones;
          var elementos = elm_html.replace(/\[[0\]]\]/g, '['+i+++']');  //substitui o valor dos index e incrementa++
          $('#cadastro').append(elementos);  //exibe o clone.
      });

  });
</script>

 

  <?php
  die();
  ?>
</div><!--box-content-->

Share this post


Link to post
Share on other sites

Se um dia você quiser adicionar um botão de remover o material, a lógica do seu script pode falhar. Recomendo deixar o contador de fora, assim como você fez com o elm_html e incrementá-lo separadamente...

$(document).ready(function(){
  var elm_html = $('.pedido').html();   //faz uma cópia dos elementos a serem clonados.
  var counter = 0;

  $(document).on('click', '.clonador', function(e){
    e.preventDefault();
    var elementos = elm_html.replace(/\[[0\]]\]/g, '[' + counter +']');  //substitui o valor dos index
    counter++; // incrementa o contador

    $('#cadastro').append(elementos);  //exibe o clone.
  });
});

Ah, e o removedor... é claro...

 

<div class="pedido">
  { ... }
  <button type="button" class="removedor">remover</button>
</div>

<script>
  $(document).on('click', '.removedor', function (event) {
    event.preventDefault();
    $(this).parents('.pedido').remove(); // navega até o pai com a classe pedido e remove ele inteiro
  });
</script>

Quando ao fato de chegar a informação no seu servidor com possibilidade de números faltando na chave, abstraia... você pode utilizar o foreach($_POST['material'] as $key => $value) do php para saber o que está chegando, onde o $key é a chave que você vai utilizar para saber o $_POST['quantidade'][$key] que você precisa. ;-) 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By emmanuelsiqueira30
      Estou tentando inserir os valores de uma matrícula e gerar já as parcelas das mensalidades.
      Agradeço toda ajuda possível.
       
      cadMatriculaModel.php
      <?php include("../Controller/conexao.php"); include("../Controller/util.php"); header('Content-Type: text/html; charset=utf-8'); $id_aluno = $_POST['id_aluno']; $id_curso = $_POST['id_curso']; $data_matricula = date("Y-m-d"); $codunico_matricula = bin2hex(random_bytes(8)); $tipo_pag_matricula = $_POST['tipo_pag_matricula']; $dia_venc_matricula = $_POST['dia_venc_matricula']; $n_parc_matricula = $_POST['n_parc_matricula']; $sql_valor_curso = "SELECT * FROM curso WHERE id_curso = $id_curso"; $result_valor_curso = mysqli_query($con,$sql_valor_curso); $row_valor_curso = mysqli_fetch_assoc($result_valor_curso); $valor_curso = $row_valor_curso['valor_curso']; $dt_curso_ini = $row_valor_curso['data_inicio_curso']; $dt_curso_fim = $row_valor_curso['data_fim_curso']; $dif = strtotime($dt_curso_fim) - strtotime($dt_curso_ini); $periodo_curso_meses = floor($dif / (60 * 60 * 24 * 30)); $valor_parc = intval($valor_curso) / $periodo_curso_meses; $sqlmatricula = "INSERT INTO matricula (id_aluno,id_curso,data_matricula,codunico_matricula,tipo_pag_matricula,dia_venc_matricula,n_parc_matricula) VALUES ('$id_aluno','$id_curso','$data_matricula','$codunico_matricula','$tipo_pag_matricula','$dia_venc_matricula','$n_parc_matricula')"; $resultmatricula = mysqli_query($con,$sqlmatricula); $ultimamatricula = mysqli_insert_id($con); if($resultmatricula == true){ //echo "<script>alert('Matrícula realizada com sucesso.');</script>"; $x = 1; while($x >= $n_parc_matricula){ //for ($x = 0; $x == $n_parc_matricula; $x++) { /* $dia = date("d"); $mes = date("m"); $ano = date("Y"); $dt_venc_pr = date("Y/m/d",strtotime("+".$x." month",mktime(0, 0, 0,$dia,$mes,$ano))); echo $dt_venc_pr; */ $sqlpr = "INSERT INTO parcelareceber (id_matricula,id_aluno,id_curso,valor_parc_pr,dt_pag_pr) VALUES ('$ultimamatricula','$id_aluno','$id_curso','$valor_parc','$data_matricula')"; $resultpr = mysqli_query($con,$sqlpr); echo $sqlpr; if($resultpr == true){ echo "<script>alert('Parcelas geradas com sucesso.');</script>"; }else { echo "<script>alert('Erro na inserção das parcelas.');</script>"; echo $resultpr; } } echo $x; echo $n_parc_matricula; }else{ } cadMatriculaView.php
      <!DOCTYPE html> <html> <title>Matrícula do aluno</title> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> </head> <body> <?php include 'menuView.php'; ?></br></br> <?php ini_set( 'default_charset', 'UTF-8' ); ini_set( 'mbstring.http_output', 'UTF-8' ); ini_set( 'mbstring.internal_encoding', 'UTF-8' ); header("Content-Type: text/html; charset=UTF-8",true); ?> <font face="verdana" size="4"> <form action="../Model/cadMatriculaModel.php" method="POST"> <fieldset> <legend>CONSULTA DE ALUNO</legend> <label for="proprietario_id_prop">Digite o CPF do aluno: </label> <input type="text" class="form-control" name="textbox" id="textbox" placeholder="Digite CPF do aluno"></br> ALUNO: <select class="form-control" name="id_aluno" id="select" style="width: 400px"> <?php include ("../Controller/conexao.php"); $query = "SELECT * FROM aluno"; $consulta = mysqli_query($con,$query); while ($dados = mysqli_fetch_assoc($consulta)) { ?> <option value="<?php echo $dados['idaluno']; ?>"><?php echo $dados['cpfaluno'] . " - " . $dados['nomealuno']; ?></option> <?php } ?> </select></br> </fieldset> <fieldset> <legend>ESCOLHA DO CURSO</legend> CURSO: <select class="form-control" name="id_curso" id="select"> <?php include ("../Controller/conexao.php"); $query = "SELECT * FROM curso"; $consulta = mysqli_query($con,$query); while ($dados = mysqli_fetch_assoc($consulta)) { ?> <option value="<?php echo $dados['id_curso']; ?>"><?php echo $dados['nome_curso'] . " - " . $dados['turno_curso']; ?></option> <?php } ?> </select></br> </fieldset> TIPO DE PAGAMENTO: <select name="tipo_pag_matricula"> <option value="1">A PRAZO</option> </select></br> DIA DO VENCIMENTO: <input type="text" name="dia_venc_matricula" maxlength="2"> NÚMERO DE PARCELAS: <input type="text" name="n_parc_matricula" maxlength="2"><br> <span style="color: red; font-size: 8pt">* Campos obrigatórios.</span></br> <button type="submit" name="btninserir">INSERIR MATRÍCULA</button> </form> </font> <script> jQuery.fn.filterByText = function(textbox, selectSingleMatch) { return this.each(function() { var select = this; var options = []; $(select).find('option').each(function() { options.push({value: $(this).val(), text: $(this).text()}); }); $(select).data('options', options); $(textbox).bind('change keyup', function() { var options = $(select).empty().data('options'); var search = $(this).val().trim(); var regex = new RegExp(search,"gi"); $.each(options, function(i) { var option = options[i]; if(option.text.match(regex) !== null) { $(select).append( $('<option>').text(option.text).val(option.value) ); } }); if (selectSingleMatch === true && $(select).children().length === 1) { $(select).children().get(0).selected = true; } }); }); }; $(function() { $('#select').filterByText($('#textbox'), false); $("select option").click(function(){ alert(1); }); }); </script> </body> </html> E também est[a dando esse erro Notice: Undefined index: dia_venc_matricula in C:\xampp\htdocs\curso\Model\cadMatriculaModel.php on line 15 mas já verifiquei a variávewl e está correta.
    • By luigiferrari
      Boa Tarde, sou iniciante no php, mas acho q isso seria coisa simples de se fazer. Porem não estou conseguindo...
      Se puderem me ajudar. 
      Agradeço desde já!


    • By winter2018
      Boa tarde galera 
       
      Preciso por favor de uma ajuda.
      Estou a criar um sistema de cadastro de currículos em php.
       
      Preciso que ao escolher  as línguas que o usuário falar, essas informações sejam armazenadas num array para depois serem inseridas  no  mysql junto com outros campos, como  nome,  idade, etc.
       
       
      Sei programar em php mas não  tenho ideia de como fazer isso.
       
      Por favor me ajudem 
       
       
      Winter 2018
    • By SECONDSS
      boa noite, preciso entregar algumas questões até daqui a pouco,meu tempo está corrido e gostaria da ajuda de vocês para resolver essa questão. obrigado desde já!

      QUESTÃO 16 -

      Desenvolva um programa utilizando PHP e exibir os resultados desse programa que tenha todas as classes suficientes para que:
      Represente o nome completo de uma pessoa, composto de três strings (nome próprio, nome do meio e nome da família). 
      ATENÇÃO - 
      Escreva nessa classe o método rubrica que retorna somente as iniciais do nome completo em caracteres minúsculos, Escreva nessa classe o método assinatura que retorna as iniciais dos nomes próprio e do meio (com pontos) Escreva nessa classe um método que retorne o nome de família completo. Por exemplo, se o nome da pessoa representado por essa classe for “Jack Mill Dam”, o método rubrica deve retornar ”jmd” e o método assinatura deve retornar ”J.M. Dam”. Para facilitar, considere armazenar os três nomes em strings separadas.
    • By duarte.php
      Boa noite, pessoal, estou fazendo meu tcc (nível técnico kkk) e preciso de ajuda com uma conexão com o banco.
       
      Fiz um formulário para consultar empréstimos em uma biblioteca através do rm (id) e exibir os dados que estão cadastrados neste rm. 
      Estou com dificuldades para que os dados sejam puxados e exibidos na página. 
       
      Esta é a parte que pede o RM no html
      <h4 class="title">Insira o seu RM: </h4> <input type="text" name="rm" class="form-control" required/>  
      Este é o código php
      <?php $rm = $_POST['rm']; include("conecta.php"); $busca = mysql_query("SELECT * FROM tb_locador WHERE rm='$rm'"); $dado = mysql_fetch_array($busca); $nome = $dado['nome']; $ano = $dado['ano']; $curso = $dado['curso']; $tel = $dado['tel']; echo "RM: " . $rm . "<br>"; echo "Nome do locador: ".$nome. "<br>"; echo "Curso do locador: ".$curso. "<br>"; echo "Ano de início do curso: ".$ano. "<br>"; echo "Telefone do locador: ".$tel. "<br>"; ?> Até então, o único dado exibido é o RM, como faço para exibir o nome, curso, ano e telefone? 
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.