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 makinh0
      <table width="90%" border="0" align="center" cellpadding="5" cellspacing="0" style="margin-top:10px;">
      <tr>
        <td align="center" bgcolor="<?php echo $background ?>"><table width="100%" border="0" align="center" cellpadding="5" cellspacing="0" style="margin-top:10px;">
          <tr>
            <td width="48%" align="left" bgcolor="#3399FF"><strong>Produto</strong></td>
            <td width="16%" align="center" bgcolor="#3399FF"><strong>Hora</strong></td>
            <td width="19%" align="center" bgcolor="#3399FF"><strong>Mesa</strong></td>
            <td width="9%" align="left" bgcolor="#3399FF"><strong>Garçom</strong></td>
            <td width="8%" align="center" bgcolor="#3399FF"><strong>Ação</strong></td>
             <td width="8%" align="center" bgcolor="#3399FF"><strong>Observações</strong></td>
          </tr>
          <?php 
        $sql = mysql_query("SELECT * FROM tbl_carrinho INNER JOIN garcon ON tbl_carrinho.idGarcon = garcon.idGarcon WHERE destino='1' AND status = '0' ORDER BY id DESC") or die(mysql_error());
        while($ver = mysql_fetch_array($sql)){
          $background = (++$i%2) ? '#FFFFF' : '#F2F2F2';
          $feito = $ver['feito'];
        ?>
          <tr>
            <td bgcolor="<?php echo $background ?>"><?php echo $ver['nome']; ?></td>
            <td align="center" bgcolor="<?php echo $background ?>"><?php echo $ver['time']; ?></td>
            <td align="center" bgcolor="<?php echo $background ?>"><?php echo $ver['id_mesa'] ?></td>
            <td bgcolor="<?php echo $background ?>"><?php echo $ver['nomeGarcon'] ?></td>
              <td align="center" bgcolor="<?php echo $background ?>"><?php echo $ver['id_mesa'] ?></td>
            <td bgcolor="<?php echo $background ?>">
       
       
      Sistema restaurante; gente precisava fazer a tela de observacoes , tipo na tela cozinha aparece produto,hora,mesa,garcom e acao, queria por observacao para a cozinha receber como o cliente quer? alguem tem ideia?obg
    • By vinihhylian0103
      Boa noite, gostaria de saber tem alguma maneira de prevenir a inclusão de registros do mesmo valor na minha tabela. O código é o seguinte:
       
       
       
      <?php include_once('conexao.php'); $nome=$_POST['nome']; $sobrenome=$_POST['sobrenome']; $data=$_POST['data_nasc']; $rm=$_POST['rm']; $curso=$_POST['curso']; $email=$_POST['email']; $senha=$_POST['senha']; $sqlinsert = "insert into usuarios(nome, sobrenome, data_nasc, rm, curso, email, senha) values('$nome','$sobrenome','$data','$rm','$curso','$email','$senha')"; $resultado = @mysqli_query($conexao,$sqlinsert); if(!$resultado) { die('Query inválida: '. @mysqli_error($conexao)); } else { echo "<script type='text/javascript'>alert('Cadastro Concluído!');</script>"; header('Location: index.html'); } mysqli_close($conexao); ?>
          
       
    • By BetimG
      E ae pessoal tudo tranquilo?
       
      Preciso de uma ajuda pra criar um select na pagina de edição de informações, mais precisamente no CURSOS, pois tenho mais de uma opção de curso, não consigo criar o select ali, normalmente as informações ficam fora da opção, segue imagem e as linhas
       
      <form method = "POST" action="">
      <h4>Atualizar/Excluir Alunos </h4><br><br>
      <?php
      include "conexao.php";

      $op = $_GET['operacao'];
      $ra = $_GET['ra'];

      $sql= mysqli_query($conexaobd,"SELECT a.ra,a.nome,c.nome as curso,a.datanasc FROM alunos a INNER JOIN cursos c ON a.curso = c.codcurso where a.ra=$ra");
      echo "<form method=POST action=''>
              ";
                  
      while($linha = mysqli_fetch_assoc($sql))
      {
      $ra = $linha['ra'];
      $nome = $linha ['nome'];
      $curso = $linha ['curso'];
      $datanasc = $linha ['datanasc'];
                  
      if($op==1) //editar
          {
          echo"<td>RA</td><br><input type=text name=txtra value=$ra><br><br>
          <td>Nome</td><br><input type=text name=txtnome value=$nome><br><br>
          <td>Curso</td><br><input type=text name=txtcurso value=$curso readonly><br><br>
          <td>DataNasc</td><br><input type=date name=txtdatanasc value=$datanasc><br><br>
          <br>
                <input type=submit value='EDITAR'>";
          }
      else //excluir
          {
          echo "<input type=text name=txtra value=$ra readonly>
          <input type=text name=txtnome value=$nome readonly>
          <input type=text name=txtcurso value=$curso readonly>
          <input type=date name=txtdatanasc value=$datanasc readonly>
          
                <input type=submit value='EXCLUIR'>";
          }
      }
      echo "</form>";
      mysqli_close($conexaobd);
      ?>
      </center>
      <?php
      if(count($_POST)>0)
      {
      include "conexao.php";
      $ra=$_POST['txtra'];
      $nome=$_POST['txtnome'];
      $curso=$_POST['txtcurso'];
      $datanasc=$_POST['txtdatanasc'];
      if($op==1)
      $sql="UPDATE alunos SET ra=$ra,nome='$nome',datanasc='$datanasc'";
      else
          
      $sql="DELETE from alunos where ra=$ra";
      $rs=mysqli_query($conexaobd,$sql);
      if($op==1)
          echo"<script language='javascript' type='text/javascript'>alert('Dados atualizados com sucesso!');window.location.href='alunos.php';</script>";
      else
          echo"<script language='javascript' type='text/javascript'>alert('Dados deletados com sucesso!');window.location.href='alunos.php';</script>";
      mysqli_close($conexaobd);
      }
      ?>
      </form>
       

    • By ryancartola
      Olá, estou fazendo um trabalho para meu curso e me surgiu uma dúvida .
      Montei o crud e até agora tenho tudo funcionando, mas meu professor nos pediu para adicionar o campo Visualizar e visualizar assim, apenas o dado de uma pessoa. Ou seja, ao clicar em visualizar preciso ter como resultado os dados de apenas uma pessoa e não de todas como estou vendo ( vê-se nas imagens, imagem 2 que aparece ao clicar em qualquer visualizar da página index). Alguém me ajuda?
      Meu codigo de visualizar: 
       
      <HTML>
      <?php
      //including the database connection file
      //include_once("classes/Crud.php");
      include_once "Crud.php" ;
      $crud = new Crud();
       
      //fetching data in descending order (lastest entry first)
      $query = "SELECT * FROM infracao ORDER BY codigo DESC";
      $result = $crud->getData($query);
      //echo '<pre>'; print_r($result); exit;
          function get_post_action($codigo) { 
              $params = func_get_args(); 
              foreach ($params as $codigo) { 
                  if (isset($_POST[$codigo])) { 
                      return $codigo; 
                  } 
              } 
          }    
      $servername = "localhost";
      $database = "test";
      $username = "root";
      $password = "";
      // Criando conexão
      $conn = mysqli_connect($servername, $username, $password, $database);
      // Checando conexão
      if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
      }
       
      echo "<h2>Sucesso - Conectado ao banco</h2>";
       
      ?>
      <!DOCTYPE html>
      <html>
      <head>    
          <title>Página principal</title>
      </head>
       
      <body>
          <table width='80%' border=0>
       
          <tr bgcolor='#CCCCCC'>
              <td>Nome do condutor</td>
              <td>CNH do condutor</td>
              <td>Descrição da infração</td>
              <td>Pontos da infração</td>
          </tr>
          
          <?php 
          foreach ($result as $key => $res) {       
              echo "<tr>";
              echo "<td>".$res['nome_condutor']."</td>";
              echo "<td>".$res['cnh']."</td>";
              echo "<td>".$res['desc_infracao']."</td>";
              echo "<td>".$res['ponto_infracao']."</td>";  
                      
          }
          
          ?>
          
      </table>
      </body>
      </html>


    • By Fernando Rafael
      Oi bom dia, atualmente venho desenvolvendo um sistema de emissão de NFE/NFCE em PHP, já está operável (realiza as vendas, assina a XML com certificado e gera o arquivo).
       
      Mas preciso de ajuda para entender como funciona o processo de transmissão das mesmas para o governo, no site da Sefaz tem os links para qual serão transmitidas, mas não achei como é feita essa comunicação, quais as variáveis, como mandar o arquivo e etc...
       
      Já usei muitos sistemas de vendas que fazem isso, e também o Emissor de NFE do governo, tenho toda experiência operacional necessária, mas me falta essa experiência técnica. Quero muito me tornar um desenvolvedor de automação comercial.
       
      Agradeço muito a ajuda de vocês.
×

Important Information

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