Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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]'];
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
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 ....
em qual pag você deu o echo?
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?
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??
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
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... ^^
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];
}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
Opa, tranquilo ^^
como eu não sabia se tava certo o que tu fazia antes...não fiz nada parecido com isso, que bom que deu certo :D
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...