Ir para conteúdo

Arquivado

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

Kayo21

Ajuda com Foreach e Form

Recommended Posts

Estou com um Duvida.
Teria como transformar isso em um FORM só? e Enviar tudo de uma vez?

Como seria a função de inserção no Banco?
Pois do jeito que ta cada linha da um form.
E responder esse formulário ficaria bem cansativo.

 

 

 

FORM

<table class="table table-hover table-bordered">
<tr>
<td><b>Nome</b></td>
<td><b>Presença</b></td>
<?php
$alunos = buscaAlunos ($conexao, $turma);
foreach ($alunos as $aluno) :
?>
</tr>
<tr>
<td><?= $aluno['nome']?></td>
<td><form class="form" action="cria_pt.php" method="post">
<input class="hidden" name="id_aluno" value="<?= $aluno['id']?>">
<input class="hidden" name="dia_freq" value="<?= $dia_freq ?>">
<div class="radio-inline"> 
<label><input type="radio" value="1" name="pt">Presente</label>
</div>
<div class="radio-inline">
<label><input type="radio" value="0" name="pt">Ausente</label>
</div>
<button type="submit" class="btn btn-success">Enviar</button>
</form></td> 
</tr>
<?php 
endforeach
?>
</table>

CRIA_PT.PHP

<?php include("banco_sistema.php");
$id_aluno = $_POST['id_aluno'];
$id_turma = $_POST['id_turma'];
$dia_freq = $_POST['dia_freq'];
$pt = $_POST['pt'];
if(criaFreqPt($conexao, $id_aluno, $id_turma, $dia_freq, $pt)) { 
echo "Frequencia Adicionada";
}else{ 
echo "Frequencia Nao Foi Adicionada";
}
?>

BANCO_SISTEMA.PHP

function criaFreqPt($conexao, $id_aluno, $id_turma, $dia_freq, $pt){
$query = "insert into frequencia (id_aluno, id_turma, dia_freq, pt) values ('{$id_aluno}', '{$id_turma}', '{$dia_freq}', '{$pt}')";
return mysqli_query($conexao, $query);
}

Tava pensando em um while contando o numero de linhas que foi exibido em FORM.php e repetindo a mesma quantidade na leitura.

Não sei se isso é possivel!

Desde ja muito Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pegue o exemplo do link abaixo e adicione o ID como chave do array:

http://forum.imasters.com.br/topic/462549-resolvidoretornar-array-de-inputs-com-mesmo-nome/?p=1832412

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel adaptei o meu código conforme você instruiu no post anterior, porém esta inserindo apenas uma linha no banco.

OBS: Sem a query para receber, apenas mostrando o echo ele exibi todos, com a query é como se ele recebesse abenas 1 aluno.

FORM

<table class="table table-hover table-bordered">
	<tr>
        <td><b>Nome</b></td>
        <td><b>Presença</b></td>
<?php
$alunos = buscaAlunos ($conexao, $turma);
foreach ($alunos as $aluno) :
?>
    </tr>
    <tr>
        <td><?= $aluno['nome']?></td>
        <td><form class="form" action="cria_pt.php" method="post">
           <input class="hidden" name="alunos[<?= $aluno['id']?>][nome]" value="<?= $aluno['id']?>">
           <input class="hidden" name="alunos[<?= $aluno['id']?>][id_turma]" value="<?= $turma ?>">
           <input class="hidden" name="alunos[<?= $aluno['id']?>][dia_freq]" value="<?= $dia_freq ?>">
            <div class="form"></div>
            <div class="radio-inline"> 
                <label><input type="radio" value="1" checked="checked" name="alunos[<?= $aluno['id']?>][pt]">Presente</label>
            </div>
            <div class="radio-inline">
                <label><input type="radio" value="0" name="alunos[<?= $aluno['id']?>][pt]">Ausente</label>
            </div>
            </div>
                <?php 
		      endforeach
	       ?> 
          </td>
                  
	</tr>
    <tr>

        <td><button type="submit" class="btn btn-sm btn-success">Enviar</button>
        </form></td>
    </tr>

</table>

CRIA_PT.PHP

<?php require_once ("conecta.php");
require_once ("banco_sistema.php"); 
if(!empty($_POST['alunos']) && is_array($_POST['alunos'])){
  foreach($_POST['alunos'] as $item) {
    echo 'Aluno ', $item['nome'], ' com Presença ', $item['pt'], $item['id_turma'], $item['dia_freq'] ,'<br />', PHP_EOL;
    $query = "insert into frequencia (id_aluno, pt, id_turma, dia_freq) values ( '{$item['nome']}', '{$item['pt']}', '{$item['id_turma']}', '{$item['dia_freq']}' )";
    return mysqli_query($conexao, $query);
  }
}
?>

Desde ja Obrigado pela sua imensa ajuda! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é um valor único:

<input class="hidden" name="alunos[<?= $aluno['id']?>][nome]" value="<?= $aluno['id']?>">

isso é um array:

<input class="hidden" name="alunos[<?= $aluno['id']?>][nome][]" value="<?= $aluno['id']?>">

Altere seus inputs para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora deu erro! :(

Ele já não esta convertendo pra array?

 

Notice: Array to string conversion in C:\wamp64\www\escola\cria_pt.php on line 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora é o contrário, você está tentando converter um array para uma string.

 

Isso é do lado do PHP. Como você está recebendo os valores?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o Form e o Arquivo que Recebe.

 

FORM

<table class="table table-hover table-bordered">
	<tr>
        <td><b>Nome</b></td>
        <td><b>Presença</b></td>
<?php
$alunos = buscaAlunos ($conexao, $turma);
foreach ($alunos as $aluno) :
?>
    </tr>
    <tr>
        <td><?= $aluno['nome']?></td>
        <td><form class="form" action="cria_pt.php" method="post">
           <input class="hidden" name="alunos[<?= $aluno['id']?>][nome][]" value="<?= $aluno['id']?>">
           <input class="hidden" name="alunos[<?= $aluno['id']?>][id_turma][]" value="<?= $turma ?>">
           <input class="hidden" name="alunos[<?= $aluno['id']?>][dia_freq][]" value="<?= $dia_freq ?>">
            <div class="form"></div>
            <div class="radio-inline"> 
                <label><input type="radio" value="1" checked="checked" name="alunos[<?= $aluno['id']?>][pt][]">Presente</label>
            </div>
            <div class="radio-inline">
                <label><input type="radio" value="0" name="alunos[<?= $aluno['id']?>][pt][]">Ausente</label>
            </div>
            </div>
                <?php 
		      endforeach
	       ?> 
          </td>           
	</tr>
    <tr>
        <td><button type="submit" class="btn btn-sm btn-success">Enviar Frequencia</button>
        </form></td>
    </tr>
</table>

CRIA_PT.PHP (RECEBE)

<?php require_once ("conecta.php");
require_once ("banco_sistema.php"); 
if(!empty($_POST['alunos']) && is_array($_POST['alunos'])){
  foreach($_POST['alunos'] as $item) {
    $query = "insert into frequencia (id_aluno, pt, id_turma, dia_freq) values ( '{$item['nome']}', '{$item['pt']}', '{$item['id_turma']}', '{$item['dia_freq']}' )";
    return mysqli_query($conexao, $query);
  }
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como postado no exemplo do link, você estará recebendo um array. Logo, trate-o como tal:

foreach($_POST['alunos'] as $id => $aluno) {
   echo $aluno['nome'];
   echo $_POST['alunos'][$id]['id_turma'];
}

Agora, avaliando melhor, não há necessidade do último colchetes.

<input class="hidden" name="alunos[<?= $aluno['id']?>][nome]" value="<?= $aluno['id']?>">
           

Da forma acima, deve funcionar de acordo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta correta essa query?

Só esta gravando a primeira linha

Quando exibo por ECHO fica certo exibe tudo.

foreach($_POST['alunos'] as $id => $aluno) {
$query = "insert into frequencia (id_aluno, pt, id_turma, dia_freq) values ('{$aluno['nome']}', '{$_POST['alunos'][$id]['pt']}', '{$_POST['alunos'][$id]['id_turma']}', '{$_POST['alunos'][$id]['dia_freq']}' )";
return mysqli_query($conexao, $query);
}

Imprimindo echo fica perfeito

foreach($_POST['alunos'] as $id => $aluno) {
   echo 'nome', $aluno['nome'], '<br />';
    echo 'pt', $_POST['alunos'][$id]['pt'] ,'<br />';
   echo 'turma', $_POST['alunos'][$id]['id_turma'] ,'<br />';
   echo 'dia_freq', $_POST['alunos'][$id]['dia_freq'] ,'<br />';
    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foreach é sintatic sugar de for/while, é a "mesma coisa facilitada".

 

Uma situação, chaves de vetor dentro de strings devem ser sem apóstrofos, ou seja:

'$_POST[chave]"

Adicione um var_dump da superglobal $_POST, e cole o resultado aqui:

var_dump($_POST);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue ai comforme solicitado.

Muito Obrigado mais uma vez pela ajuda Gustavo

Recebe

<?php require_once ("conecta.php");
require_once ("banco_sistema.php"); 
foreach($_POST['alunos'] as $id => $aluno) {
   echo 'nome', $aluno['nome'], '<br />';
    echo 'pt', $_POST['alunos'][$id]['pt'] ,'<br />';
   echo 'turma', $_POST['alunos'][$id]['id_turma'] ,'<br />';
   echo 'dia_freq', $_POST['alunos'][$id]['dia_freq'] ,'<br />';
  var_dump($_POST);  
}
?>

Resultado VAR DUMP

nome1
pt1
turma1
dia_freq2016-02-03
C:\wamp64\www\escola\cria_pt.php:8:
array (size=1)
  'alunos' => 
    array (size=6)
      1 => 
        array (size=4)
          'nome' => string '1' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      4 => 
        array (size=4)
          'nome' => string '4' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      5 => 
        array (size=4)
          'nome' => string '5' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      6 => 
        array (size=4)
          'nome' => string '6' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      8 => 
        array (size=4)
          'nome' => string '8' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      9 => 
        array (size=4)
          'nome' => string '9' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
nome4
pt0
turma1
dia_freq2016-02-03
C:\wamp64\www\escola\cria_pt.php:8:
array (size=1)
  'alunos' => 
    array (size=6)
      1 => 
        array (size=4)
          'nome' => string '1' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      4 => 
        array (size=4)
          'nome' => string '4' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      5 => 
        array (size=4)
          'nome' => string '5' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      6 => 
        array (size=4)
          'nome' => string '6' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      8 => 
        array (size=4)
          'nome' => string '8' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      9 => 
        array (size=4)
          'nome' => string '9' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
nome5
pt0
turma1
dia_freq2016-02-03
C:\wamp64\www\escola\cria_pt.php:8:
array (size=1)
  'alunos' => 
    array (size=6)
      1 => 
        array (size=4)
          'nome' => string '1' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      4 => 
        array (size=4)
          'nome' => string '4' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      5 => 
        array (size=4)
          'nome' => string '5' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      6 => 
        array (size=4)
          'nome' => string '6' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      8 => 
        array (size=4)
          'nome' => string '8' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      9 => 
        array (size=4)
          'nome' => string '9' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
nome6
pt1
turma1
dia_freq2016-02-03
C:\wamp64\www\escola\cria_pt.php:8:
array (size=1)
  'alunos' => 
    array (size=6)
      1 => 
        array (size=4)
          'nome' => string '1' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      4 => 
        array (size=4)
          'nome' => string '4' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      5 => 
        array (size=4)
          'nome' => string '5' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      6 => 
        array (size=4)
          'nome' => string '6' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      8 => 
        array (size=4)
          'nome' => string '8' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      9 => 
        array (size=4)
          'nome' => string '9' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
nome8
pt0
turma1
dia_freq2016-02-03
C:\wamp64\www\escola\cria_pt.php:8:
array (size=1)
  'alunos' => 
    array (size=6)
      1 => 
        array (size=4)
          'nome' => string '1' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      4 => 
        array (size=4)
          'nome' => string '4' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      5 => 
        array (size=4)
          'nome' => string '5' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      6 => 
        array (size=4)
          'nome' => string '6' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      8 => 
        array (size=4)
          'nome' => string '8' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      9 => 
        array (size=4)
          'nome' => string '9' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
nome9
pt1
turma1
dia_freq2016-02-03
C:\wamp64\www\escola\cria_pt.php:8:
array (size=1)
  'alunos' => 
    array (size=6)
      1 => 
        array (size=4)
          'nome' => string '1' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      4 => 
        array (size=4)
          'nome' => string '4' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      5 => 
        array (size=4)
          'nome' => string '5' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      6 => 
        array (size=4)
          'nome' => string '6' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)
      8 => 
        array (size=4)
          'nome' => string '8' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '0' (length=1)
      9 => 
        array (size=4)
          'nome' => string '9' (length=1)
          'id_turma' => string '1' (length=1)
          'dia_freq' => string '2016-02-03' (length=10)
          'pt' => string '1' (length=1)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dados estão indo corretamente, se há algum problema na inserção, é no insert.

 

PS.: Meu irmão é Gustavo '-'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem alguma ideia de onde está o erro?

 

Desculpe Gabriel, confundi os nomes, estava falando com um amigo meu que se chama Gustavo

 

Ja tentei de varias forma e nao da certo.

Da Seguinte forma ele inseri apenas a primeira linha.

foreach($_POST['alunos'] as $id => $aluno) {
$query = "insert into frequencia (id_aluno, pt, id_turma, dia_freq) values ('{$aluno['nome']}', '{$_POST['alunos'][$id]['pt']}', '{$_POST['alunos'][$id]['id_turma']}', '{$_POST['alunos'][$id]['dia_freq']}' )";
return mysqli_query($conexao, $query);
var_dump($_POST);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu problema está no return. O return interrompe o script e retorna o resultado.

 

Outra situação é sobre os apóstrofos das chaves, já mencionado no post #11

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel muito Obrigado!

Deu Certo :D

 

Ficou assim a Solução!

foreach($_POST['alunos'] as $id => $aluno) {
$query = "insert into frequencia (id_aluno, pt, id_turma, dia_freq) values ('{$aluno['nome']}', '{$_POST['alunos'][$id]['pt']}', '{$_POST['alunos'][$id]['id_turma']}', '{$_POST['alunos'][$id]['dia_freq']}' )";
mysqli_query($conexao, $query);
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • 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.
×

Informação importante

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