Array
(
)

Inserir o valor NULL no mysql

PHP
Marcelo
   - 25 abr 2016

Boa tarde galera, preciso aqui de uma ajuda com meu código, já tentei muitas dicas e alternativas e não consegui. Preciso inserir o valor NULL em quatro campos no meu banco de dados quando nada for inserido no respectivo campo
No momento se eu apago uma nota ou a deixo em branco quando altero outra, ele não grava nada, deixando em branco o campo no bd. Até seria normal. Mas vou explica melhor a matemática agora.
Existem 5 campos de notas que uso para o resultado.
sendo n1, n2, n3, n4 e n5. n5 seria a nota de recuperação, que só lanço quando as notas de n1 a n4 se tem alguma abaixo da média.
O problema é que se lanço notas nos campos n1,n2,n3 e n4, ele soma as quatro e divide por quatro. Perfeito, até aí está normal. Mas se eu lançar somente as notas n1,n2 e n3 e não lançar a n4. ele soma as 3 e continua a dividir por quatro, quando na verdade deveria dividir por 3 . Isso porque no banco ele grava o valor de n4 em branco. Se tiver o valor NULL ele faz o correto
Apenas expliquei o funcionamento, e basicamente preciso é ao invés de gravar em branco, é gravar NULL somente nestes 4 compos. n1, n2, n3, e n4
Abaixo os campos. Está um pouco bagunçado e tenho de o atualizar. Mas no momento preciso dessa solução.

<?php
extract($_POST);
include "../dbconfig.php";
if ($_SESSION['professor'] == "" or $_SESSION['id_serie'] == "" or $_SESSION['id_materia'] == "") { header("Location:index.php"); }
else {
if ($_POST[Alterar] == "ok") {
mysql_query("DELETE FROM notas WHERE id_aluno=$_POST[id] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]");
while(list($campo_n1,$valor_n1) = @each($form_n1) and list($campo_n2,$valor_n2) = @each($form_n2) and list($campo_n3,$valor_n3) = @each($form_n3) and list($campo_n4,$valor_n4) = @each($form_n4) and list($campo_n5,$valor_n5) = @each($form_n5) and list($campo_nota,$valor_nota) = @each($form_nota) and list($campo_obs,$valor_obs) = @each($form_obs) and list($campo_periodo,$valor_periodo) = @each($form_periodo) and list($campo_faltas,$valor_faltas) = @each($form_faltas) and list($campo_datas_falta,$valor_datas_falta) = @each($form_datas_falta) and list($campo_carga,$valor_carga) = @each($form_carga) and list($campo_resultado,$valor_resultado) = @each($form_resultado) and list($campo_seg,$valor_seg) = @each($form_seg)) {
if ($valor_seg != NULL) {
mysql_query("INSERT INTO notas VALUES ('$_POST[id]','$_SESSION[id_serie]','$_SESSION[id_materia]','$valor_periodo','$valor_n1','$valor_n2','$valor_n3','$valor_n4','$valor_n5','$valor_nota','$valor_faltas','$valor_datas_falta','$valor_obs','$valor_carga','$valor_resultado','$valor_seg')");
}
}
}
?>

David Sylvestre
   - 26 abr 2016

Não é querendo ser chato não, mas o código não utiliza boas práticas.

Não existe um unico tratamento nos dados, é possivel fazer um estrago no banco, caso o cara esteja mal intencionado.

Para resolver seu caso será necessário sanitizar os dados e tratar como NULL os valores ao invés de string vazia.

Marcelo
   - 26 abr 2016

Ok amigo, o código está uma bagunça e tenho de reescrever ela até pela chegada do php7.

Mas tratar como NULL é que no momento não estou conseguindo. Se puder me ajudar em cima deste código.

David Sylvestre
   - 28 abr 2016

Pode-se usar a função empty[1] e atribuir o valor NULL a variável, mas o ideal é refatorar esse código, não consegui entender pra que esse "while" e usar "@" não é uma boa prática.

[1]http://php.net/manual/pt_BR/function.empty.php