Ir para conteúdo

POWERED BY:

Arquivado

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

rodrigofariat

[Resolvido] Inserindo vários registros ao mesmo tempo

Recommended Posts

Pessoal,

 

Estou criando uma tabela de pagamentos de alunos, onde o mostro os campos nome, codigo e mensalidade que ja estao armazenados no banco, e mostro também a opção do usuário escolher o mês, o ano e o status do pagamento (sim/nao), e depois clicar em enviar.

 

Quando acesso ao arquivo mostra.php vem a seguinte tela:

 

Imagem Postada

 

Então, escolho o mes, ano e se o aluno pagou a mensalidade, depois clico em enviar.

Ao enviar somente o ultimo registro é adicionado no banco de dados, estou usando o MySQL.

 

Como posso fazer, com que o índice volte no primeiro registro, para que todos registros (ao mesmo tempo) sejam inseridos no banco, ou seja se tenho tres registros todos devem ser inseridos no banco, e não somente o ultimo registro, que é a situação atual.

 

Estou postando meus arquivos:

 

Arquivo mostrapag.php

<?php
	$conexao = mysql_connect("localhost", "root", "galo") or die ("Erro na conexao ao banco de dados.");
	$db = mysql_select_db("transportescolar") or die ("Erro ao selecionar a base de dados.");
	$sql = "SELECT * FROM cadastroclientes;";
	$resultado = mysql_query($sql);
	
	while ($linha=mysql_fetch_array($resultado))
	{   
	
	  echo "<td><input type='text' name='codigo' value='{$linha['codigo']}' /></td>";
	  echo "<td><input type='text' name='nomep' value='{$linha['nomep']}' /></td>";
	  echo "<td><input type='text' name='nomeescola' value='{$linha['nomeescola']}' /></td>";
	  echo "<td><input type='text' name='mensalidade' value='{$linha['mensalidade']}' /></td>";	
	  echo "<td>";
	
	  echo '<label for="mes"></label>';
	  echo '<SELECT NAME="mes">';
	  echo '<OPTION>Janeiro</OPTION>';
	  echo '<OPTION>Fevereiro</OPTION>';
	  echo '</SELECT>';
	  echo "<br>";
	
	 echo "<td>";
	 echo '<label for="ano"></label>';
	 echo '<SELECT NAME="ano">';
	 if ($ano == '2009')
		{
		  echo '<OPTION>2009';
		}
	   else
		 {
			$ano++;
		 }
	echo '</SELECT>';
	echo "<br>";
	echo "</td>";
	echo "<td>";
	echo '<label for="opcao"></label>';
	echo '<SELECT NAME="opcao">';
	echo '<OPTION>Nao<OPTION>';
	echo '<OPTION>Sim<OPTION>';
	echo '</SELECT>';
	echo "<br>";
	echo "</tr>";
  }

  echo "<br><br>";
  echo '<input type=submit value="Enviar"><br>';
  echo "</form>";
  echo "<br><br>";
?>

Arquivo controlepag.php

 

<?php
	  print_r($_POST);	
	  $conexao = mysql_connect("localhost", "root", "galo") or die ("Erro na conexao ao banco de dados.");
	  $db = mysql_select_db("transportescolar") or die ("Erro ao selecionar a base de dados.");
	  $sql2 = "SELECT * FROM cadastroclientes;";
	  $resultado2 = mysql_query($sql2);
	   
	   $codigoaluno =  ($_POST['codigo']);
	   $nomeescola = ($_POST['nomeescola']);
	   $nomep = ($_POST['nomep']);
	   $mes = ($_POST['mes']);
	   $ano = ($_POST['ano']);
	   $mensalidade = ($_POST['mensalidade']);
	   $opcao = ($_POST['opcao']);
	   $erro=0;

	  echo "<br>";

	  #Cadastra novo pagamento

	  if ($erro==0)
		 {
		   $conexao = mysqli_connect ("localhost", "root", "galo");
		   mysqli_select_db ($conexao, "transportescolar");

			$consulta ="INSERT INTO pagamentosalunos VALUES('$codigoaluno','$nomeescola','$nomep','$mes','$ano',
		   '$mensalidade','$opcao')";
		   $resultado = mysqli_query ($conexao,$consulta);
			mysqli_close($conexao);
			echo "<b><center><font color='red'>Dados cadastrados com sucesso</center></font></b><br><br>";
		  }
		   else
		   {
			 #echo "<b>Dados nao foram cadastrados</b>";
			 echo "<b><font color='red'>Erros foram encontrados !</b></font><br>";
			  echo "<b><font color='red'>Verifique as pendencias acima !</b></font><br><br>";
		   }
?>

Att,

 

Rodrigo Faria

Compartilhar este post


Link para o post
Compartilhar em outros sites

então para você poder fazer isso você deve coloca "[]" no name dos input e no php você recupera o post como ARRAY assim você pode percorrer e fazzer varios inserts..

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Otata,

 

Não entendi sua solução.

Como vou colocar [] nos inputs ?

 

exemplo : echo "<td><input type='text' name='codigo' value='{$linha['codigo']}' /></td>";

 

Att,

 

Rodrigo Faria

 

então para você poder fazer isso você deve coloca "[]" no name dos input e no php você recupera o post como ARRAY assim você pode percorrer e fazzer varios inserts..

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

echo '<td><input type="text" name="codigo[]" value="'.$linha['codigo'].'" /></td>';
ai você terá um array: $_POST['codigo']

com posições..

 

$_POST['codigo'][0]

$_POST['codigo'][1]..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi,

 

Tentei colocar os colchetes, realmente ele percorreu toda lista de registros,

mas quando vai inserir no banco mostra seguinte resultado :

 

codigoaluno nomescola nomep mes ano opcao mensalidade

0 Array Array Maio 2009 Nao 0

 

Vou postar meus dois arquivos:

 

mostrapagamentos.php

while ($linha=mysql_fetch_array($resultado))
	{
	 
	echo "<tr bgcolor='".$cor."'>";
	echo "<td><input type='text' name='codigo[]' value='{$linha['codigo']}' /></td>";
	echo "<td><input type='text' name='nomep[]' value='{$linha['nomep']}' /></td>";  
	echo "<td><input type='text' name='nomeescola[]' value='{$linha['nomeescola']}' /></td>";
	echo "<td><input type='text' name='mensalidade[]' value='{$linha['mensalidade']}' /></td>";
	echo "<td>";

	echo '<label for="mensal"></label>';
	echo '<SELECT NAME="mes">';
		
	if ($mes == '01')
	 {
	  echo '<OPTION>Janeiro';
	 }
	if ($mes == '02')
	 {
	   echo '<OPTION>Fevereiro';
	 }
	if ($mes == '03')
	 {
	   echo '<OPTION>Março';
	 };
	   
	if ($mes == '04')
	 {
	   echo '<OPTION>Abril';
	 };
	   
	if ($mes == '05')
	 {
	   echo '<OPTION>Maio';
	 };
	   
	echo '</SELECT>';
echo "<br>";
	echo "</td>";

	echo "<td>";
	echo '<label for="ano"></label>';
	echo '<SELECT NAME="ano">';
	  if ($ano == '2009')
		{
		  echo '<OPTION>2009';
		}
	   else
		 { 
			$ano++;
		 }
	echo '</SELECT>';
	echo "<br>";
	echo "</td>";

	echo "<td>";
	echo '<label for="opcao"></label>';
	echo '<SELECT NAME="opcao">';
	echo '<OPTION>Nao';
	echo '<OPTION>Sim';
	echo '</SELECT>';  
	echo "<br>";
	echo "</tr>";

  }

O segundo arquivo chamado: controlepagamentos.php

 

$conexao = mysql_connect("localhost", "root", "galo") or die ("Erro na conexao ao banco de dados.");
		$db = mysql_select_db("transportescolar") or die ("Erro ao selecionar a base de dados.");
		$sql2 = "SELECT * FROM cadastroclientes;";
		$resultado2 = mysql_query($sql2);

		$codigoaluno =  ($_POST['codigo']);
		$nomescola = ($_POST['nomeescola']);
		$nomep = ($_POST['nomep']);
		$mes = ($_POST['mes']);
		$ano = ($_POST['ano']);
		$mensalidade = ($_POST['mensalidade']);
		$opcao = ($_POST['opcao']);
		$erro=0;

	  echo "<br>";

	  #Cadastra novo pagamento
	  if ($erro==0)
		 {
		   $conexao = mysqli_connect ("localhost", "root", "galo");
		   mysqli_select_db ($conexao, "transportescolar");
		   $consulta ="INSERT INTO pagamentosalunos VALUES('$codigoaluno','$nomescola','$nomep','$mes','$ano','$opcao'
		   ,'$mensalidade')";
		   $resultado = mysqli_query ($conexao,$consulta);
		   mysqli_close($conexao);
		   echo "<b><center><font color='red'>Dados cadastrados com sucesso</center></font></b><br><br>";
		  }
		   else
		   {   
			 #echo "<b>Dados nao forma cadastrados</b>";
			 echo "<b><font color='red'>Erros foram encontrados !</b></font><br>";
			 echo "<b><font color='red'>Verifique as pendencias acima !</b></font><br><br>";
			 
		   }

obs : o arquivo mostrapagamentos faz o POST usando o contrlepagamentos.php

 

O que mais pode ser feito ?

 

Att,

 

Rodrigo Faria

 

echo '<td><input type="text" name="codigo[]" value="'.$linha['codigo'].'" /></td>';
ai você terá um array: $_POST['codigo']

com posições..

 

$_POST['codigo'][0]

$_POST['codigo'][1]..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim. Na primeira linha da segunda página, você coloca este código

echo '<pre>';
print_r($_POST);
echo '</pre>';

Ele vai exibir todos os dados que vieram do POST. Daí você vai entender direito como vem os dados com [].

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei o comando enviado pelo nosso colega Matias Rezene, quando tento postar todos os registros,

as linhas abaixo apareceram, esse é um trecho quando a interpretação é feita.

 

rray ( [codigo] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 [25] => 26 [26] => 27 [27] => 28 [28] => 29 [29] => 30 [30] => 31 [31] => 32 [32] => 33 [33] => 34 [34] => 35 [35] => 36 [36] => 37 [37] => 38 [38] => 39 [39] => 40 [40] => 41 [41] => 42 [42] => 43 [43] => 44 [44] => 45 [45] => 46 [46] => 47 [47] => 48 [48] => 49 [49] => 50 [50] => 51 [51] => 52 [52] => 53 [53] => 54 [54] => 55 [55] => 56 [56] => 57 [57] => 58 [58] => 59 [59] => 60 [60] => 61 [61] => 62 [62] => 63 [63] => 64 [64] => 65 ) [nomep] => Array ( [0] => Alexandre [1] => Ciro [2] => Diego [3] => Erika [4] => Giulia [5] => Isis [6] => Joao Pedro [7] => Tadeu [8] => Mateus [9] => Pedro [10] => Rafael [11] => Vinicius [12] => Thulio [13] => Vitor [14] => Bruno [15] => Carolina [16] => Giovana [17] => Carolina [18] => Guilherme [19] => Natalia C [20] => Roberto

 

Quando escreve no banco, o registro fica da seguinte forma:

 

codigoaluno nomescola nomep mes ano opcao mensalidade

0 Array Array Maio 2009 Nao 0

 

Lembrando que o codigo fonte é o mesmo que que postei na mensagem anterior.

 

Alguma sugestao ?

 

 

Att,

 

Faria

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, acho que faltou colocar o echo '<pre>'. Se estivesse, só ia aparecer um pouco mais estruturado.

 

De qualquer forma, o que se vê é que o código está vindo como um array e o nomep também.

 

Pra gravar você vai ter que colocar em um laço. Se puder usar o código exatamente como eu coloquei e postar aqui vai ficar um pouco mais fácil.

 

echo '<pre>';
print_r($_POST);
echo '</pre>';

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Agora fiz da forma certa que o Matias pediu, o resultado do POST :

 

Array

(

[codigo] => Array

(

[0] => 1

[1] => 2

[2] => 3

[3] => 4

[4] => 5

[5] => 6

[6] => 7

[7] => 8

[8] => 9

[9] => 10

[10] => 11

[11] => 12

[12] => 13

[13] => 14

[14] => 15

[15] => 16

[16] => 17

[17] => 18

[18] => 19

[19] => 20

[20] => 21

[21] => 22

[22] => 23

[23] => 24

[24] => 25

[25] => 26

[26] => 27

[27] => 28

[28] => 29

[29] => 30

[30] => 31

[31] => 32

[32] => 33

[33] => 34

[34] => 35

[35] => 36

[36] => 37

[37] => 38

[38] => 39

[39] => 40

[40] => 41

[41] => 42

[42] => 43

[43] => 44

[44] => 45

[45] => 46

[46] => 47

[47] => 48

[48] => 49

[49] => 50

[50] => 51

[51] => 52

[52] => 53

[53] => 54

[54] => 55

[55] => 56

[56] => 57

[57] => 58

[58] => 59

[59] => 60

[60] => 61

[61] => 62

[62] => 63

[63] => 64

[64] => 65

)

 

[nomep] => Array

(

[0] => Alexandre

[1] => Ciro

[2] => Diego

[3] => Erika

[4] => Giulia

[5] => Isis

[6] => Joao Pedro

[7] => Tadeu

[8] => Mateus

[9] => Pedro

[10] => Rafael

[11] => Vinicius

[12] => Thulio

[13] => Vitor

[14] => Bruno

[15] => Carolina

[16] => Giovana

[17] => Carolina

[18] => Guilherme

[19] => Natalia

[20] => Roberto

[21] => Giovana

[22] => Pedro

[23] => Gil

[24] => Pedro

[25] => Maria

[26] => Clara

[27] => Joao Gabriel Toytota

[28] => Joao Gabriel

[29] => D?bora

[30] => Giovana

[31] => Giulia

[32] => Isadora

[33] => Lais

[34] => Romulo

[35] => Jo?o Lucas

[36] => Jo?o Pedro Souza

[37] => Joao Fonseca

[38] => Laura

[39] => Lucas

[40] => Nathalia

[41] => Renata

[42] => Arthur Calvacante

[43] => Pedro

[44] => Pedro Dias

[45] => Scarlet

[46] => Gabriel

[47] => Gabriela

[48] => Gabriela de Souza

[49] => Arthur

[50] => Clarice

[51] => Filipe

[52] => Luiza

[53] => Carolina Serafim

[54] => Tereza

[55] => Lara

[56] => Thiago

[57] => Arthur Prado

[58] => Lu?sa Prado

[59] => Daniel

[60] => Fernanda

[61] => Sarah de

[62] => Vinicius

[63] => Vit?ria

[64] => Igor

)

 

[nomeescola] => Array

(

[0] => Pitagoras

[1] => Pitagoras

[2] => Pitagoras

[3] => Pitagoras

[4] => Pitagoras

[5] => Pitagoras

[6] => Pitagoras

[7] => Col?gio Sao Paulo

[8] => Pitagoras

[9] => Pitagoras

[10] => Pitagoras

[11] => Pitagoras

[12] => Pitagoras

[13] => Pitagoras

[14] => Pitagoras

[15] => Pitagoras

[16] => Pitagoras

[17] => Pitagoras

[18] => Col?gio Sao Paulo

[19] => Col?gio Sao Paulo

[20] => Col?gio Sao Paulo

[21] => Col?gio Sao Paulo

[22] => Santo Tomaz de Aquino

[23] => Santo Tomaz de Aquino

[24] => Santo Tomaz de Aquino

[25] => CEAPE

[26] => Centro Educativo Efigenia Vidigal

[27] => Santo Tomaz de Aquino

[28] => Santo Tomaz de Aquino

[29] => Santo Tomaz de Aquino

[30] => Col?gio Sao Paulo

[31] => Col?gio Sao Paulo

[32] => Col?gio Sao Paulo

[33] => Col?gio Sao Paulo

[34] => Col?gio Sao Paulo

[35] => Col?gio Sao Paulo

[36] => Col?gio Sao Paulo

[37] => Col?gio Sao Paulo

[38] => Col?gio Sao Paulo

[39] => Col?gio Sao Paulo

[40] => Col?gio Sao Paulo

[41] => Col?gio Sao Paulo

[42] => Col?gio Sao Paulo

[43] => Col?gio Sao Paulo

[44] => Col?gio Sao Paulo

[45] => Col?gio Sao Paulo

[46] => Col?gio Sao Paulo

[47] => Col?gio Sao Paulo

[48] => Col?gio Sao Paulo

[49] => Col?gio Sao Paulo

[50] => Pitagoras

[51] => Pitagoras

[52] => Pitagoras

[53] => Col?gio Sao Paulo

[54] => Col?gio Sao Paulo

[55] => Col?gio Sao Paulo

[56] => Centro Educativo Efigenia Vidigal

[57] => Pitagoras

[58] => Pitagoras

[59] => Pitagoras

[60] => Santo Tomaz de Aquino

[61] => Col?gio Sao Paulo

[62] => Pitagoras

[63] => Col?gio Sao Paulo

[64] => Col?gio Sao Paulo

)

 

[mensalidade] => Array

(

[0] => 145

[1] => 135

[2] => 165

[3] => 135

[4] => 150

[5] => 145

[6] => 170

[7] => 130

[8] => 130

[9] => 130

[10] => 150

[11] => 125

[12] => 150

[13] => 130

[14] => 165

[15] => 125

[16] => 125

[17] => 150

[18] => 110

[19] => 165

[20] => 125

[21] => 110

[22] => 150

[23] => 165

[24] => 165

[25] => 120

[26] => 95

[27] => 115

[28] => 150

[29] => 150

[30] => 130

[31] => 130

[32] => 125

[33] => 115

[34] => 115

[35] => 115

[36] => 80

[37] => 145

[38] => 115

[39] => 140

[40] => 150

[41] => 115

[42] => 140

[43] => 135

[44] => 165

[45] => 130

[46] => 165

[47] => 140

[48] => 140

[49] => 135

[50] => 85

[51] => 150

[52] => 150

[53] => 150

[54] => 125

[55] => 90

[56] => 95

[57] => 80

[58] => 80

[59] => 130

[60] => 85

[61] => 90

[62] => 150

[63] => 125

[64] => 125

)

 

[mes] => Maio

[ano] => 2009

[opcao] => Nao

)

 

Depois de dar o POST os campos ficaram da mesma forma da mensagem anterior.

 

codigoaluno nomescola nomep mes ano opcao mensalidade

0 Array Array Maio 2009 Nao 0

 

Ou seja os dados que vem do banco não estao sendo inseridos.

Ja os campos mes, ano e opção sao do proprio html, ou seja seu conteudo nao esta no banco,

tanto que os mesmos aparecem de forma correta.

 

Att,

 

Faria

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou te dar uma luz... Daí você adapta teu código...

O primeiro valor que veio do POST você pega assim

 

echo $_POST['codigo'][0]; // vai retornar 1
echo $_POST['nomep'][0]; // Alexandre
echo $_POST['nomescola'][0]; // Pitagoras
echo $_POST['mensalidade'][0]; // 145
echo $_POST['mes']; //maio
echo $_POST['ano']; //2009
echo $_POST['opcao']; // nao

Então, a não ser que alguém tenha outra idéia, você vai ter que colocar um laço. Tipo assim

$count = count($_POST['codigo']);
for ($x = 0; $x > $count; $x++){
	 $codigo = $_POST['codigo'][$x];// repete pra todos que tenha mais de um valor no array.
	 $qry = mysql_query('INSERT INTO ...');
}

Compreendeu?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Pessoal,

 

Depois de deixar esse chamado esquecido, consegui resolver o script para inserir vários registros no BD.

Passando diversos arrays para um outro arquivo, neste fiz várias repetições de "for" para colocar todos os dados

recuperados do banco em uma outra tabela.

 

Considero como "Resolvido".

 

<?php
$codigo = $_POST['codigo']; //array
$nomep = $_POST['nomep']; //array
$nomeescola = $_POST['nomeescola']; //array
$mensalidade = $_POST['mensalidade']; //array
$mes = $_POST['mes']; //array
$ano = $_POST['ano']; //array
$opcao = $_POST['opcao']; //array

$conexao = mysqli_connect ("localhost", "root", "");
mysqli_select_db ($conexao, "bd");

for ($i =0 ; $i < sizeof($codigo) ; $i++) {
 for ($i =0 ; $i < sizeof($nomep) ; $i++){
 for ($i =0 ; $i < sizeof($nomeescola) ; $i++){
     for ($i =0 ; $i < sizeof($mensalidade) ; $i++){
      for ($i =0 ; $i < sizeof($mes) ; $i++){
       for ($i =0 ; $i < sizeof($ano) ; $i++){
        for ($i =0 ; $i < sizeof($opcao) ; $i++){
    
$consulta ="INSERT INTO  pagamentosalunos VALUES('$codigo[$i]','$nomeescola[$i]','$nomep[$i]','$mensalidade[$i]','$mes[$i]','$ano[$i]','$opcao[$i]');";
        $resultado = mysqli_query ($conexao,$consulta); 
													}
	   											}
	  										}
										}
mysqli_close($conexao);
 ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passei por um problema similar e resolvi ele da mesma maneira que o Matias Rezende disse.

 

No que envia o formulário eu fiz uns :

<select name='newreadyparecer[]' style='background-color:#E0E7E9; border: 1px solid #28849B; font-family:verdana; font-size:9pt'> 
<option value='1'>Pronto</option>
<option value='0'>Aberto</option>
</select>

ou

<textarea name=newppda[] rows=5 cols=30 style=width:80%></textarea>

E onde eu cadastrava no banco usei um FOR

 

$count = count($_POST['registro']);
for ($x = 0; $x < $count; $x++)
{
$postregistro = $_POST['registro'][$x];
$postparecer = $_POST['newparecer'][$x];
$postfaltas = $_POST['newfaltas'][$x];
$postppda = $_POST['newppda'][$x];
$postreadyppda = $_POST['newreadyppda'][$x];
$postreadyparecer = $_POST['newreadyparecer'][$x];


$sql->Consulta("UPDATE $tabela_notas SET faltas='$postfaltas',parecer='$postparecer',ppda='$postppda',readyppda='$postreadyppda',readyparecer='$postreadyparecer' WHERE id='$postregistro'");
}

:yes: Valeu Matias Rezende!

 

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.