Ir para conteúdo

POWERED BY:

Arquivado

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

sfonseca45

[Resolvido] Multiplos Inserts - não grava no BD

Recommended Posts

Não estou conseguindo gravar no BD os registro que envio - ele grava apaenas 1 registro e com os os campos com o numeral 0, fiz várias alterações mas ou dá erro ou não grava nada.

 

<?php

global $conn;
$conn = connect();

$matricula = $_POST['matricula'];
$nota = $_POST['nota'];
$disciplina = $_POST['disciplina'];
$periodo = $_POST['periodo'];
$tipo = $_POST['tiponota'];
$peso= $_POST['peso'];

while (current($matricula)){
/* $matr = current($matricula);
$n1 = current($nota); */
$sql ="INSERT INTO notas (matriculaID, nota, disciplinaID, periodoID, tiponotaID, peso) VALUES ('".$matricula."', '".$nota."','".$disciplina."','".$periodo."','". $tipo."','".$peso."')";
mysql_query($sql, $conn) or die(mysql_error());
next($matricula);
next($nota);
}

function connect()
{
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("advento");
return $conn;
}

header:("Location: atualiza.html");

?> 

Todos os campos são numericos.

 

Alguma idéia de onde estou errando?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

você já verificou se os posts estão vindo corretamente?

 

O post vai pegar apenas uma matricula...como você quer que pegue mais? ou ele muda o post a cada matricula...não dá pra entender...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peguei este script na net e estou adaptando ...

 

Pagina que envia os dados

 

<?php require_once('../Connections/conexao.php'); ?> 
<?php 
if (!function_exists("GetSQLValueString")) { 
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")  
{ 
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; 
 
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 
 
  switch ($theType) { 
    case "text": 
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
      break;     
    case "long": 
    case "int": 
      $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
      break; 
    case "double": 
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; 
      break; 
    case "date": 
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
      break; 
    case "defined": 
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
      break; 
  } 
  return $theValue; 
} 
} 
 
$colname_consulta = "-1"; 
if (isset($_GET['serieID'])) { 
  $colname_consulta = (get_magic_quotes_gpc()) ? $_GET['serieID'] : addslashes($_GET['serieID']); 
}  
mysql_select_db($database_conexao, $conexao); 
$query_consulta = sprintf("SELECT matricula.matriculaID, alunos.aluno FROM matricula, alunos WHERE matricula.serieID = %s AND matricula.alunoID = alunos.alunoID ORDER BY alunos.aluno", GetSQLValueString($colname_consulta, "int")); 
$consulta = mysql_query($query_consulta, $conexao) or die(mysql_error()); 
$row_consulta = mysql_fetch_assoc($consulta); 
$totalRows_consulta = mysql_num_rows($consulta); 
?> 
 
<form name='teste' method='post' action='teste2.php'> 
  <?php 
$x = 0; 
while ($row = mysql_fetch_array($consulta)){ 
$matricula = $row['matriculaID']; 
$aluno = $row['aluno']; 
$nota = "Digite a nota"; 
?> 
  <table> 
  <tr> 
   <td> <input type=text name="matricula[$x]" value="<?php echo $matricula; ?>"></td> 
   <td> <input type="text" name="aluno[$x]" value="<?php echo $aluno; ?>"></td> 
   <td> <input type="text" name="nota[$x]" value="<?php echo $nota ?>"></td></tr> 
    <?php 
         $x++; 
}?> 
    <tr><td><input type=submit></td></tr> 
  </table> 
</form> 
 
<?php  
mysql_free_result($consulta); 
?>

Esta é a pagina que recebe os dados e deve gravar no BD

 

<?php 
 
global $conn; 
$conn = connect(); 
 
$matricula = $_POST['matricula']; 
$nota = $_POST['nota']; 
$disciplina = $_POST['disciplina']; 
$periodo = $_POST['periodo']; 
$tipo = $_POST['tiponota']; 
$peso= $_POST['peso']; 
 
while (current($matricula)){ 
/* $matr = current($matricula); 
$n1 = current($nota); */ 
$sql ="INSERT INTO notas (matriculaID, nota, disciplinaID, periodoID, tiponotaID, peso) VALUES ('".$matricula."', '".$nota."','".$disciplina."','".$periodo."','". $tipo."','".$peso."')"; 
mysql_query($sql, $conn) or die(mysql_error()); 
next($matricula); 
next($nota); 
} 
 
function connect() 
{ 
$conn = mysql_connect("localhost", "root", ""); 
mysql_select_db("advento"); 
return $conn; 
} 
 
header:("Location: atualiza.html"); 
 
?> 

Pelo que eu vi e estou apredendo criou-se uma array com a dimensão do numero de matriculas da serie

e envia-se via POST para a pagina seguinte efetuar o cadastro.

Mas algumas alterações que eu fiz ele me diz que não existe ARRAY na pagina de gravação.

Assim do jeito que está não dá erro, mas grava apenas um registro e com valores 0.

Será que conseguir explicar?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não pode pegar o post da matricula dessa maneira, visto que ela é um vetor...

 

seria algo mais ou menos assim:

 

$matricula[1]=$_POST['matricula[1]'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK eu tentei isso mas não deu certo, ele diz que a array não existe.

 

Pq eu não sei a quantidade alunos - e são eles que dimensionão o tamanho do ARRAY.

 

Eu deveria fazer a consulta novamente na página de inserção no BD para saber quantos registros são ou isto seria errado?

 

Ou tem como recuperar o numero de itens na array?

 

Obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok deu um ECHO numa página para verificar se esta enviando os dados corretamente porem sai na tela isso:

 

Array

Array

Array

 

Não está enviando então ... ou não estou sabendo recuperar ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia

 

Antes de mais nada muito obrigado pela sua ajuda ... estou apredendo e por isto muitas duvidas ... nunca trabalhei com arrays ...

 

Dei o echo na página que recebe os dados para cadastro ... dei um echo em todos os campos e o print sai somente array ... pelo que eu li em outros lugares o erro deve estar nesta pagina, na recuperação das arrays

 

tentei matricula[], matricula[0] e matricula[1] e ele diz que a array não existe não hora de gravar...

 

Li algo sobre implode/explode ... seria isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

explode seria caso você gravasse cada matricula separada por virgula ou algo parecido...o que eu acharia uma solução mais viável. Seria mais ou menos assim:

 

<form name='teste' method='post' action='teste2.php'>
<?php
$x = 0;
while ($row = mysql_fetch_array($consulta)){
if ((!$matricula)&&(!aluno)&&(!nota))
{
$matricula=$row['matriculaID'];
$aluno = $row['aluno'];
 $nota = "Digite a nota";
}
else
{
$matricula = $matricula.",".$row['matriculaID'];
$aluno = $aluno.",".$row['aluno'];
 $nota = $nota.","."Digite a nota"; // Esse atributo nota nunca passará nenhum outro valor, exceto "Digite a nota"
}

?>   
<table>   
<tr>    
<td> 
<input type=text name="matricula" value="<?php echo $matricula; ?>"></td>    
<td> <input type="text" name="aluno" value="<?php echo $aluno; ?>"></td>    
<td> <input type="text" name="nota" value="<?php echo $nota ?>"></td></tr>     
<?php          
$x++; 
}
?>     
<tr><td><input type=submit> 
<!-- Dê um name e coloque aspas nesse input acima, ficando por exemplo: <input type="submit" name="btnEnvia" /> -->
</td></tr>   
</table> </form> 

Daí no arquivo teste2.php, você muda as seguintes linhas:

 

$matricula = $_POST['matricula'];
$matricula_array=explode(",",$matricula);
$nota = $_POST['nota'];
$nota_array=explode(",",$nota);
// As variáveis abaixo não contém no form da primeira pagina, como você quer que as passe??
$disciplina = $_POST['disciplina'];
$periodo = $_POST['periodo'];
$tipo = $_POST['tiponota'];
$peso= $_POST['peso'];


 while (current($matricula_array)){ 

$sql ="INSERT INTO notas (matriculaID, nota, disciplinaID, periodoID, tiponotaID, peso) VALUES ('".current($matricula_array)."', '".current(nota_array)."','".$disciplina."','".$periodo."','". $tipo."','".$peso."')"; 
mysql_query($sql, $conn) or die(mysql_error()); 
next($matricula_array); 
next($nota_array); 
} 

PS: Nunca utilizei a função "current", mas pelo o que eu sei de array, você não poderia inserir nos dados só colocando o nome da variável, e sim o nome dela e sua posição...como current pega a posição "atual", creio que colocando ele para inserir a matricula e nota no BD vai dar certo.

 

Aliás, como você quer fazer um controle de notas sem armazenar na tabela aonde contém as notas o aluno que as tirou??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok vou fazer a mudança ...

 

Quanto aos itens que faltam no form eu já coloquei ...

 

O controle de notas será feito pela matricula do aluno e não pelo aluno, pois a idéia é de no ano que vem o aluno se matricular novamente ...

 

Obrigado, vou alterar e ver o resultado ...

 

Não deu certo ... na pagina que me mostra os alunos da serie ficou assim

 

Matricula Aluno Nota

8 José

8,9 José, João

8,9,10 José, João, Maria

 

Sei que isto é por causa da clausula ELSE ...

 

E na pagina que deveria gravar os dados da o seguinte erro:

 

Notice: Array to string conversion in C:\projetos\escola\professor\notas_add.php on line 7 e só grava 1 registro com valores 0

 

Continuo pesquisando na web ... e obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso os itens sejam também que nem a matricula, o explode e as condições do if na pagina teste2.php devem ser feitas também para esse elemento, assim como o tratamento com vírgula e tal na 1º pag... ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro deu-se por causa do current.

O dos valores 0. use um count para percorrer toda a array, eu acho melhor.

 

"Aluno" tem que ter o mesmo tratamento de matrícula(fazendo explode coisa e tal). e se exibe os dados de matricula_array[campo]...

 

tenta colocar assim para exibir:

 

$aluno_array=explode(",",$aluno);
$x=count($aluno_array);
echo "Matricula - Aluno";
for ($i=0;$i<$x;$i++)
{
echo $matricula_array[$i]." - ".$aluno_array[$i];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui .... não sei se é a melhor maneira mas funcionou

 

Fiz da seguinte maneira:

 

<?php

$matricula = $_POST['matricula'];
$nota = $_POST['nota'];
$disciplina = $_POST['disciplina'];
$periodo = $_POST['periodo'];
$tipo = $_POST['tiponota'];
$peso= $_POST['peso'];

$conexao = mysqli_connect ("localhost", "root", ""); 
mysqli_select_db ($conexao, "advento"); 
 
for ($i =0 ; $i < sizeof($matricula) ; $i++) { 
 for ($i =0 ; $i < sizeof($nota) ; $i++){ 
 for ($i =0 ; $i < sizeof($disciplina) ; $i++){ 
     for ($i =0 ; $i < sizeof($periodo) ; $i++){ 
      for ($i =0 ; $i < sizeof($tipo) ; $i++){ 
       for ($i =0 ; $i < sizeof($peso) ; $i++){ 
         
     
$consulta ="INSERT INTO  notas (matriculaID, nota, disciplinaID, periodoID, tiponotaID, peso) VALUES('$matricula[$i]','$nota[$i]','$disciplina[$i]','$periodo[$i]','$tipo[$i]','$peso[$i]');"; 
        $resultado = mysqli_query ($conexao,$consulta);  
		}
		}
		}
		}
		}
		}
                                                                                             
mysqli_close($conexao); 


header:("Location: atualiza.html");

?> 

Está gravando certinho no BD ...

 

Amigão muito obrigado pela ajuda ... este script me será util também para gerar as cobranças ....

 

Abs

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.