Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal
Estou fazendo um site do zero, e precisei inserir um formulário no site, para fins de registro de produtos, por exemplo. Na verdade, é um formulário que envia para o Banco de Dados do mssql (SQL Server) as devidas informações. Tudo funciona perfeitamente, porém, eu tive uma dúvida a cerca do null e do empty;
Sempre usei **empty** para informar que o campo não foi digitado, mas, desta vez neste formulário que fiz, este campo pode estar vazio, sem qualquer problema. Porém, quando fui olhar no Banco de dados, ao invés de ficar <NULL> (que é normal no SQL Server 2000) por exemplo, ele fica sem nada... Tipo, como se fosse um campo vazio, mas, preenchido com algo que não existe. É o mesmo que colocar o vento no copo. Não tem nada ali!!!
A dúvida, é como posso fazer para que todas as variáveis que criei dentro do meu $_POST (que contém o isset), para que, se qualquer uma das variáveis forem nulas, ao invés de deixar o tal campo '*com vento*', colocar o <NULL> automático do SQL.
Alguém saberia?
Bom dia Marcos.
Mesmo que seja várias variáveis? Ou seja, são variáveis tipo:
$Item_name
$item_color
$item_valor
São umas 22 variáveis. No caso, eu teria que repetir todas para a mesma situação?
Outra solução seria deixar o DEFAULT NULL na tabela. Mesmo assim teria que tratar os possíveis espaços com a função trim. Mas creio que fica mais complicado de se fazer.
Alguns drivers já corrigem essa situação utilizando prepared statements. Prepared statements para MsSQL só estão disponíveis através da PDO.
Se você estiver utilizando odbc_ ou mssql_ e recomendável migrar ou validar toda a informação.
>
Veja se ajuda
$input = '';
$input = trim($input);//não esqueça que podem digitar um espaço
$inputForSave = empty($input) ? "NULL" : $input;
$sql ="INSERT INTO Table(column) VALUES( $inputForSave)";
var_dump($sql);
//echo $sql;
Marcos, bom dia.
Uma função como a que montei abaixo, é uma boa solução?
<?php
function protect2($string) {
$protes = htmlspecialchars(trim($string), ENT_QUOTES);
$inputForSave = empty($string) ? "NULL" : $string;
return $protes;
}
?>É válida mas considere também o post do @Gabriel Heming #5
Marcos, obrigado, eu consegui com sua ajuda. :D Ele não adicionou o <NULL> no BD como é de costume, mas, usando os maravilhosos IF e ELSE eu consegui definir algumas coisas e tudo funcionou! :D
Veja se ajuda
$input = '';
$input = trim($input);//não esqueça que podem digitar um espaço