Jump to content
Fórum Script Brasil
  • 0

Inserir valor NULL no mysql


MarxRJ
 Share

Question

Boa tarde pessoal, estou tendo uma certa dificuldade. Preciso em 4 tabelas do meu banco ter os valores NULL quando nestes não forem inseridos nenhum dado.

É um cadastro de notas, e se tiver valores em branco as somas não são feitas corretamente como preciso. Então caso eu não lance uma nota e deixe vazio, ele iria inserir o valor NULL no campo, e tem que ser sem as aspas.

 

Aqui como está os campos no bd

  `n1` varchar(10) default null,
  `n2` varchar(10) default null,
  `n3` varchar(10) default null,
  `n4` varchar(10) default null,

 

Abaixo aonde trago as informações do banco e faço as alterações.

<input name="form_n4[]" type="text" value="<[email protected]_result(mysql_query("SELECT n4 FROM notas WHERE id_aluno=$_GET[id] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n4)?>" size="6" maxlength="4" onKeydown="FormataMoeda(this,10,event)" onkeypress='return SomenteNumero(event)'>

 <input type="hidden" name="form_periodo[]" value="<?=$col_periodo[id_periodo]?>">

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Coloquei o código todo, apenas para visualização, já que o que interessa é somente a última parte.

Os valores NULL eu teria de inserir nos campos n1, n2, n3 e n4

 

<? $form_n1 = $_POST[form_n1];
unset($_POST[form_n1]);
$form_n2 = $_POST[form_n2];
unset($_POST[form_n2]);
$form_n3 = $_POST[form_n3];
unset($_POST[form_n3]);
$form_n4 = $_POST[form_n4];
unset($_POST[form_n4]);
$form_n5 = $_POST[form_n5];
unset($_POST[form_n5]);
$form_nota = $_POST[form_nota];
unset($_POST[form_nota]);
$form_obs = $_POST[form_obs];
unset($_POST[form_obs]);
$form_periodo = $_POST[form_periodo];
unset($_POST[form_periodo]);
$form_faltas = $_POST[form_faltas];
unset($_POST[form_faltas]);
$form_datas_falta = $_POST[form_datas_falta];
unset($_POST[form_datas_falta]);
$form_carga = $_POST[form_carga];
unset($_POST[form_carga]);
$form_resultado = $_POST[form_resultado];
unset($_POST[form_resultado]);
$form_seg = $_POST[form_seg];
unset($_POST[form_seg]);
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')");
            }

Na verdade quando eu fosse alterar esses campos, os outros mantivessem o NULL, ou quando eu apagasse um campo, este também recebesse o NULL ao em vez de vazio

Link to comment
Share on other sites

  • 0

Olá!

Segundo o manual de boas práticas do http://br.phptherightway.com/ veja a PSR-1, php deve ser iniciado com <?php
 

Se as variáves form_n? não forem constantes, estão faltando aspas simples!

<? $form_n1 = $_POST[form_n1];
unset($_POST[form_n1]);
$form_n2 = $_POST[form_n2];

<?php $form_n1 = $_POST['form_n1'];
unset($_POST['form_n1']);
$form_n2 = $_POST['form_n2'];

Mas você pode trocar tudo isso:

$form_n1 = $_POST[form_n1];
unset($_POST[form_n1]);
$form_n2 = $_POST[form_n2];
unset($_POST[form_n2]);
$form_n3 = $_POST[form_n3];
unset($_POST[form_n3]);
$form_n4 = $_POST[form_n4];
unset($_POST[form_n4]);
$form_n5 = $_POST[form_n5];
unset($_POST[form_n5]);
$form_nota = $_POST[form_nota];
unset($_POST[form_nota]);
$form_obs = $_POST[form_obs];
unset($_POST[form_obs]);
$form_periodo = $_POST[form_periodo];
unset($_POST[form_periodo]);
$form_faltas = $_POST[form_faltas];
unset($_POST[form_faltas]);
$form_datas_falta = $_POST[form_datas_falta];
unset($_POST[form_datas_falta]);
$form_carga = $_POST[form_carga];
unset($_POST[form_carga]);
$form_resultado = $_POST[form_resultado];
unset($_POST[form_resultado]);
$form_seg = $_POST[form_seg];
unset($_POST[form_seg]);

por isso:

extract($_POST);

As extensões mysql_ estão obsoletas há muitos anos!!!

o php.net recomenda fortemente que não as use mais, veja:

mysql_.jpg

Link to comment
Share on other sites

  • 0

Obrigado pelas dicas wash, Vou fazer essa mudança.

 

Quanto a inserir o NULL no bd você tem uma dica?

 

Obrigado

Fiz a mudança e correto, realmente deu uma enxugada.

Ficou assim:

<?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')");
            }
        }
    }
?>

 

Vou ter de dar uma estudada para alterar  mysql_query

E se possível se puder me ajudar como o NULL neste meu código. Tentei várias alternativas, mas nada grava o NULL quando não preencho um valor.

Link to comment
Share on other sites

  • 0

Olá!

Não entendi esse while enorme, mas tente assim:

<?php

foreach ($_POST as $key => $value) {
    $value = trim($value); // limpa os espaços em branco antes e depois dos valores
    $$key = emtpy($value) ? 'NULL' : "'".$value."'"; // já coloca aspas simples, caso o valor não seja vazio
}

include '../dbconfig.php';
if ($_SESSION['professor'] == '' || $_SESSION['id_serie'] == '' || $_SESSION['id_materia'] == '') {
    header('Location: ./');
}
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)
            && list($campo_n2, $valor_n2) = @each($form_n2)
            && list($campo_n3, $valor_n3) = @each($form_n3)
            && list($campo_n4, $valor_n4) = @each($form_n4) 
            && list($campo_n5, $valor_n5) = @each($form_n5) 
            && list($campo_nota, $valor_nota) = @each($form_nota) 
            && list($campo_obs, $valor_obs) = @each($form_obs) 
            && list($campo_periodo, $valor_periodo) = @each($form_periodo) 
            && list($campo_faltas, $valor_faltas) = @each($form_faltas) 
            && list($campo_datas_falta, $valor_datas_falta) = @each($form_datas_falta) 
            && list($campo_carga, $valor_carga) = @each($form_carga) 
            && list($campo_resultado, $valor_resultado) = @each($form_resultado) 
            && list($campo_seg, $valor_seg) = @each($form_seg)) {
        if ($valor_seg != NULL) {
          // no momento de montar a query, não repita as aspas simples para os valores tratados do $_POST
            $query = "INSERT INTO notas VALUES (
            $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)";
            mysql_query($query);
        } 
    }
}

Não tive como testar aqui, mas de repente você consegue seguir o raciocínio

Link to comment
Share on other sites

  • 0

Quando salvo ele retorna erros nessas linhas

 <?php

    foreach ($_POST as $key => $value) {
    $value = trim($value); // limpa os espaços em branco antes e depois dos valores   (LINHA 4)
    $$key = emtpy($value) ? 'NULL' : "'".$value."'"; // já coloca aspas simples, caso o valor não seja vazio   (LINHA 5)
}
 

Warning: trim() expects parameter 1 to be string, array given in /home/pasta/public_html/teste/periodo1.php on line 4

Fatal error: Call to undefined function emtpy() in /home/pasta/public_html/teste/periodo1.php on line 5

 

Outro detalhe, pelo que entendi se funcionar ele vai gravar o NULL em todos os campos deixados sem preencher, e no caso eu só preciso que apenas os campos n1, n2, n3, e n4 recebam o valor NULL, caso contrário vai dar erro

Link to comment
Share on other sites

  • 0

Ah mooooooooooosssççççooooooooooo!!! então os valores são arrays!!!

E somente alguns é que devem ser NULL!!!

Então tente o seguinte:

Percorra apenas o array com os valores que deverão ser iguais a NULL
Verifique os que estão vazios e os coloque iguais a 'NULL'
Os que não estiverem vazios, coloque entre apas simples assim: "'".$value."'"

E na hora de montar a query, use-os diretamente, sem adição de aspas simples.

Ou se prefefir, me envie um arquivo .zip com esse trecho, pra eu executar aqui e verificar uma maneira de montar essa query com determinados valores sendo vazios serem substituídos por NULL

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...