Ir para conteúdo

POWERED BY:

Arquivado

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

João Marcos Ferlini

Persistir em Banco de Dados

Recommended Posts

Estou criando um projeto para efetuar chamada eletrônica (um sistema web em Php).

 

Eu fiz um formulário que lista os alunos do curso que o professor pretende efetuar a chamada.

 

Neste formulário tem 3 campos: idAluno, nomeAluno e um CheckBox para marcar presença ou não do aluno.

 

Agora preciso que ao clicar no botão "Salvar", os dados sejam enviados para o banco de dados (todos os registros).

 

Como proceder?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um único formulário com os campos em arrays.

 

<input type="text" name="idAluno[]" />
<input type="checkbox" name="present[]" />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Baseando-se no exemplo do William, $_POST['idAluno'] e $_POST['present'] serão arrays (por causa do "[]" no name).

Logo, basta usar um loop para buscar os dados digitados:

 

 

$idAluno = isset( $_POST['idAluno'] ) ? $_POST['idAluno'] : array();
$present = isset( $_POST['present'] ) ? $_POST['present'] : array();
 
for ( $i = 0, $total = count( $idAluno ); $i < $total; $i++ )
{
    echo $idAluno[$i] . ' => ' $present[$i];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo:

 

Arquivo: insertFrequencia.php

<?php

include("conexao.php");	


	$id = $_POST['id'];
	$statusPresenca = $_POST['statusPresenca'];
	$curso = $_POST['curso'];
	$datacadastro = date("d/m/y");


	if ($nomeAluno==''|| $curso=='') {
		echo "<script>alert('O nome do Aluno e Curso não pode ficar em branco!');window.location='javascript:window.history.go(-1)'</script>";
	} else {

	//print mysqli_error();

	$sql = "INSERT INTO alunos (nomeAluno, email, idade, foneCelular, curso, datacadastro)
		VALUES ('$nomeAluno', '$email', '$idade', '$foneCelular', '$curso', '$datacadastro')";
		mysql_query($sql);

	print mysql_error();

		echo "<script>alert('Aluno incluído com sucesso!');window.location='cadAluno.php'</script>";

	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $sql = "INSERT INTO presence (student_id, student_name, is_present) VALUES ";

echo sizeof($_POST['student_id']);

  $values = [];
  for($i=0; $i<sizeof($_POST['student_id']); $i++) {
    $presence = isset($_POST['presence'][$i]) ? 'true' : 'false';

    $values[] = "({$_POST['student_id'][$i]}, '{$_POST['student_name'][$i]}', '{$presence}')";
  }

  echo $sql.implode(',', $values);

  //$sql .= implode(',', $values);
  //mysql_query($sql) or die (mysql_error());
}

?><!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>

<form action="" method="post">
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[0]" value="Flavia" /><br />
    id: <input type="text" name="student_id[0]" value="42">
    <input type="checkbox" name="is_present[0]" checked="checked">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[1]" value="Carla" /><br />
    id: <input type="text" name="student_id[1]" value="1">
    <input type="checkbox" name="is_present[1]" checked="checked">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[2]" value="Joaquina" /><br />
    id: <input type="text" name="student_id[2]" value="2">
    <input type="checkbox" name="is_present[2]">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[3]" value="Daiane" /><br />
    id: <input type="text" name="student_id[3]" value="3">
    <input type="checkbox" name="is_present[3]" checked="checked">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[4]" value="Julia" /><br />
    id: <input type="text" name="student_id[4]" value="4">
    <input type="checkbox" name="is_present[4]" checked="checked">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[5]" value="Samantha" /><br />
    id: <input type="text" name="student_id[5]" value="5">
    <input type="checkbox" name="is_present[5]" checked="checked">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[6]" value="Cinthia" /><br />
    id: <input type="text" name="student_id[6]" value="6">
    <input type="checkbox" name="is_present[6]" checked="checked">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[7]" value="Jessica" /><br />
    id: <input type="text" name="student_id[7]" value="7">
    <input type="checkbox" name="is_present[7]">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[8]" value="Raquel" /><br />
    id: <input type="text" name="student_id[8]" value="8">
    <input type="checkbox" name="is_present[8]" checked="checked">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[9]" value="Mia" /><br />
    id: <input type="text" name="student_id[9]" value="9">
    <input type="checkbox" name="is_present[9]">
  </fieldset>
  <fieldset>
    <input type="text" readonly="readonly" name="student_name[10]" value="Patrícia" /><br />
    id: <input type="text" name="student_id[10]" value="10">
    <input type="checkbox" name="is_present[10]">
  </fieldset>

  <input type="submit" value="Enviar">
</form>


</body>
</html>
saída:

INSERT INTO presence (student_id, student_name, is_present) VALUES (42, 'Flavia', 'true'),(1, 'Carla', 'true'),(2, 'Joaquina', 'false'),(3, 'Daiane', 'true'),(4, 'Julia', 'true'),(5, 'Samantha', 'true'),(6, 'Cinthia', 'true'),(7, 'Jessica', 'false'),(8, 'Raquel', 'true'),(9, 'Mia', 'false'),(10, 'Patrícia', 'false')

Note que numerei os arrays, para contornar o fato de que checkbox não marcado não é enviado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, agora eu adaptei no meu código, mas ainda não roda:

 

Arquivo: Formulário:

<?php 
					include("conexao.php");
					echo "Curso Selecionado: <b>" . $CursoFiltrado . "</b>.";
					?>
					<tr>
						<td align="center"><b>Cód.</b></td>
						<td align="center"><b>Nome do Aluno</b></td>
						<td align="center"><b>Ações</b></td>
					</tr>
					<?php
					$query = mysql_query("SELECT * FROM alunos WHERE curso = '$CursoFiltrado' ORDER BY `nomeAluno`");
					while ($pesquisa = mysql_fetch_assoc($query)) { ?>

					<tr>
						<td width="50" align="center"><input type="text" name="id[<?=$pesquisa['id']?>]" id="id" value="<?=$pesquisa['id']?>"></td>
						<td width="300"><?=$pesquisa['nomeAluno']?></td>
						<td width="300"><input type="checkbox" name="presenca[<?=$pesquisa['id']?>]" value="<?=$pesquisa['id']?>"> Presente</td>
					</tr>

					<?php } ?>

Arquivo: insertFrequencia.php

<?php

include("conexao.php");	


	$dataChamada = date("d/m/y");
	
	if ($_SERVER['REQUEST_METHOD'] === 'POST') {
	  $sql = "INSERT INTO frequencia (id_aluno, presenca, dataChamada) VALUES ";

	// echo sizeof($_POST['id']);

	  $values = [];
	  for($i=0; $i<sizeof($_POST['id']); $i++) {
	    $presence = $_POST['presenca'][$i] ? 'true' : 'false';

	    $values[] = "({$_POST['id'][$i]}, '{$presence}', '$dataChamada')";
	  }

	  echo $sql.implode(',', $values);
	}
	
?>

Mas ainda não está funcionando...

 

Tenho que passar o idAluno como referência para persistir no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara..

 

$i=0;
while ($pesquisa = mysql_fetch_assoc($query)) { ?>

<tr>
  <td width="50" align="center"><input type="text" name="id[<?php echo $i; ?>]" id="id" value="<?=$pesquisa['id']?>"></td>
  <td width="300"><?=$pesquisa['nomeAluno']?></td>
  <td width="300"><input type="checkbox" name="presenca[<?php echo $i; ?>]" value="true"> Presente</td>
</tr>

<?php $i++; } ?>
O ID do aluno já está em:

$_POST['id'][$i]

 

Falar "ainda não roda", não ajuda em nada.. descreva qual a dificuldade, e o que aconteceu de errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as alterações do último código que você passou, e o erro é o da imagem em anexo.

( ! ) Notice: Undefined offset: 2 in C:\wamp\www\weblist\integrador\insertChamadaProfessor.php on line 15
Call Stack
#	Time	Memory	Function	Location
1	0.0020	247760	{main}( )	..\insertChamadaProfessor.php:0

( ! ) Notice: Undefined offset: 3 in C:\wamp\www\weblist\integrador\insertChamadaProfessor.php on line 15
Call Stack
#	Time	Memory	Function	Location
1	0.0020	247760	{main}( )	..\insertChamadaProfessor.php:0

( ! ) Notice: Undefined offset: 4 in C:\wamp\www\weblist\integrador\insertChamadaProfessor.php on line 15
Call Stack
#	Time	Memory	Function	Location
1	0.0020	247760	{main}( )	..\insertChamadaProfessor.php:0

( ! ) Notice: Undefined offset: 5 in C:\wamp\www\weblist\integrador\insertChamadaProfessor.php on line 15
Call Stack
#	Time	Memory	Function	Location
1	0.0020	247760	{main}( )	..\insertChamadaProfessor.php:0
INSERT INTO frequencia (id_aluno, presenca, dataChamada) VALUES (9, 'true', '17/06/15'),(7, 'true', '17/06/15'),(6, 'false', '17/06/15'),(2, 'false', '17/06/15'),(4, 'false', '17/06/15'),(10, 'false', '17/06/15')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está o teu código agora ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arquivo: Formulário

<table border="1">
					<?php 
					include("conexao.php");
					echo "Curso Selecionado: <b>" . $CursoFiltrado . "</b>.";
					?>
					<tr>
						<td align="center"><b>Cód. Aluno</b></td>
						<td align="center"><b>Nome do Aluno</b></td>
						<td align="center"><b>Ações</b></td>
					</tr>
					<?php
					$query = mysql_query("SELECT * FROM alunos WHERE curso = '$CursoFiltrado' ORDER BY `nomeAluno`");
					$i=0;
					while ($pesquisa = mysql_fetch_assoc($query)) { ?>

					<tr>
					  <td width="50" align="center"><input type="text" name="id[<?php echo $i; ?>]" id="id" value="<?=$pesquisa['id']?>"></td>
					  <td width="300"><?=$pesquisa['nomeAluno']?></td>
					  <td width="300"><input type="checkbox" name="presence[<?php echo $i; ?>]"> Presente</td>
					</tr>

					<?php $i++; } ?>
				</table>
				<br>
				<a href="efetuarChamada.php">Voltar</a> <button id="btCadastrar">Salvar</button>
			</form>

Insert:

<?php

include("conexao.php");	


	$dataChamada = date("d/m/y");
	
	if ($_SERVER['REQUEST_METHOD'] === 'POST') {
	  $sql = "INSERT INTO frequencia (id_aluno, presenca, dataChamada) VALUES ";

	// echo sizeof($_POST['id']);

	  $values = [];
	  for($i=0; $i<sizeof($_POST['id']); $i++) {
	    $presence = $_POST['presence'][$i] ? 'true' : 'false';

	    $values[] = "({$_POST['id'][$i]}, '$presence', '$dataChamada')";
	  }

	  echo $sql.implode(',', $values);
	}

?>

Está assim!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, troque:

 

for($i=0; $i<sizeof($_POST['id']); $i++) {
por

for($i=0; $i<sizeof($_POST['presence']); $i++) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a troca, aparece outro erro: Notice: Undefined offset: 1 in C:\wamp\www\weblist\integrador\insertChamadaProfessor.php on line 14


Pronto, corrigi o erro, porém ele está mostrando:

 

INSERT INTO frequencia (id_aluno, presenca, dataChamada) VALUES (9, 'true', '17/06/2015'),(7, 'true', '17/06/2015') mas não persisti no banco de dados.


Pronto, corrigi o erro, porém ele está mostrando:

 

INSERT INTO frequencia (id_aluno, presenca, dataChamada) VALUES (9, 'true', '17/06/2015'),(7, 'true', '17/06/2015') mas ainda não persisti no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lógico.. hehe

 

Troca o echo pela query no banco.

mysql_query()... isso vc sabe fazer, certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

"Que erro" que dá ?

 

Tecnicamente o script que eu postei funciona perfeitamente em qualquer situação.

Explique o que aconteceu ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então vamos lá.

 

Quando selecione apenas: o 1º e 3º aluno, erro abaixo:

 

Notice: Undefined offset: 1 in C:\wamp\www\weblist\integrador\insertChamadaProfessor.php on line 14

A linha 14 é "$presence = $_POST['presence'][$i] ? 'true' : 'false';".

 

Com relação ao mysql_query(), sei construí-lo normal, mas ali estou um pouco confuso se é antes ou na linha onde tem o "echo" >> echo $sql.implode(',', $values);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Okay, quanto ao Notice, é tranquilo, veja:

 

$presence = $_POST['presence'][$i] ? 'true' : 'false';
troca por

$presence = isset($_POST['presence'][$i]) ? 'true' : 'false';
E sobre a query, troca:

 echo $sql.implode(',', $values);
por

 $sql .= implode(',', $values);
mysql_query($sql) or die (mysql_error());

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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