Ir para conteúdo
Fórum Script Brasil
  • 0

Inserir valor NULL no mysql


MarxRJ

Pergunta

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="<?=@mysql_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 para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...