Ir para conteúdo
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-->

 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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',
  ),
);

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros 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-->

Compartilhar este post


Link para o post
Compartilhar em outros 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. ;-) 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.