Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Julio Cavallari

Recebendo dados de inputs "infinitos"

Recommended Posts

Galera, estou fazendo um sistema de cadastro de cifra para minha igreja, já que o cifraclub tem muitas cifras completamente erradas, e preciso passar os dados para um banco de dados.

Mas estou com o seguinte problema, preciso passar múltiplas linhas para esse banco nua mesma coluna de uma tabela.

Até tentei fazer com somente 1 caixa de texto, e digitar tudo que preciso nela e mandar, mas como tenho que estilizar a cifra antes de apresentar no sistema, para facilitar eu estou adicionando o código html todo nessa coluna, e fica muito trabalhoso escrever todo código num textfield.

 

Tentei fazer da seguinte forma mas não obtive sucesso:

Uso uma função que adiciona uma linha numa tabela pra eu escrever uma linha da cifra, e fica mudando o atributo "name" do input, sempre adicionando um número na frente, que fica se auto incrementando.

function AddTableRow() {
  IncreaseCont();
  var newRow = $("<tr>");
  var cols = "";

  cols += '<td><input type="text" name="titulo'+i+'" class="form-control"></td>';
  cols += '<td><input type="text" name="cifra'+i+'" class="form-control"></td>';
  cols += '<td><input type="text" name="qtde'+i+'" class="form-control"></td>';
  cols += '<td><input type="text" name="cifraAdicional'+i+'" class="form-control"></td>';
  cols += '<td>';
  cols += "<button onclick='RemoveTableRow(this)' class='btn btn-danger' type='button'>Remover</button>";
  cols += '</td>';

  newRow.append(cols);
  $("#tableCifras").append(newRow);

  return false;
}

Essa parte ok. O problema está em pegar os dados desses inputs criados no PHP.

Tentei dessa maneira.

$i auto incremento;

$input... = 'atributo name'.$i // Para pegar o name do input a ser testado

 

Ai testo num while se essas variáveis estão setadas, mas aqui que tá o problema, o código entra num loop até dar tempo de execução máxima excedido.

$i = 1;
$inputTitulo = 'titulo'.$i;
$inputCifra = 'cifra'.$i;
$inputCifra2 = 'cifraAdicional'.$i;
$inputQtde = 'qtde'.$i;

while(isset($_GET[$inputTitulo]) && isset($_GET[$inputCifra]) && isset($_GET[$inputQtde]) && isset($_GET[$inputCifra2])){

  $titulo = $_GET[$inputTitulo];
  $cifra = $_GET[$inputCifra];
  $cifra2 = $_GET[$inputCifra2];
  $quantidade = $_GET[$inputQtde];
  $cifraCompleta .= "<label class='font-weight-bold'>$titulo&nbsp;</label>";
  $cifraCompleta .= $cifra;
  $cifraCompleta .= "<label class='font-weight-bold'>&nbsp;$quantidade&nbsp;</label>";
  $cifraCompleta .= $cifra2;
  $i++;
}

Alguém me da uma luz onde está o erro no código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente o seguinte:

$i = 1;
do {
  $inputTitulo = 'titulo'.$i;
  $inputCifra = 'cifra'.$i;
  $inputCifra2 = 'cifraAdicional'.$i;
  $inputQtde = 'qtde'.$i;

  if(isset($_GET[$inputTitulo]) && isset($_GET[$inputCifra]) && isset($_GET[$inputQtde]) && isset($_GET[$inputCifra2])){
    $titulo = $_GET[$inputTitulo];
    $cifra = $_GET[$inputCifra];
    $cifra2 = $_GET[$inputCifra2];
    $quantidade = $_GET[$inputQtde];
    $cifraCompleta .= "<label class='font-weight-bold'>$titulo&nbsp;</label>";
    $cifraCompleta .= $cifra;
    $cifraCompleta .= "<label class='font-weight-bold'>&nbsp;$quantidade&nbsp;</label>";
    $cifraCompleta .= $cifra2;
  }else{
	break;
  }
  $i++;
} while(true);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela resposta, mas já tinha resolvido de outra maneira logo depois.

 

Pesquisando na internet descobri que posso usar uma array no atributo 'name' para inserir várias informações de um mesmo tipo. Então foi isso que fiz.

<input type="text" name="titulo[]" class="form-control">
<input type="text" name="cifra[]" class="form-control">
<input type="text" name="qtde[]" class="form-control">

Ai eu pego todos os dados desse array e utilizo um for para gerar a parte dinâmina

if(isset($_POST['cifra']) 
&& isset($_POST['titulo']) 
&& isset($_POST['qtde'])){
  $rows = count($_POST['cifra']);
  $cifra = $_POST['cifra'];
  $titulo = $_POST['titulo'];
  $qtde = $_POST['qtde'];

  for ($i=0; $i < $rows ; $i++) {
    $cifraFor = replaceNotas($cifra[$i]);
    $cifraAdicionalFor = replaceNotas($cifraAdicional[$i]);

    $cifraCompleta .= '<li class="list-group-item">'; 
    $cifraCompleta .= '<label class="font-weight-bold">'.$titulo[$i].' </label>';
    $cifraCompleta .= $cifraFor;
    $cifraCompleta .= '<label class="font-weight-bold"> '.$qtde[$i].' </label>';
    $cifraCompleta .= $cifraAdicionalFor;
    $cifraCompleta .= '</li>';
  }
}

Mas mesmo assim obrigado pela ajuda, testei esse seu código e funciona do mesmo jeito que solução que achei =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que não quer calar é, você sabe o porque o código caiu no famoso abismo infinito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
×

Informação importante

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