Variavel vazia não grava no campo int

Enviada por Romulo Alves 
Romulo Alves
Variavel vazia não grava no campo int
23 de April de 2012 às 01:54PM
Olá pessoal, tenho um site e o mesmo já está hospedado e funcionando normalmente, mas tive um problema em meu pc e tive que formata-lo, então instalei novamente meu apache, php, mysql, phpmyadmin. tudo beleza e funcionando.

O que ocorre é que importei minhas tabelas lá do servidor via phpmyadmin para meu banco de dados em meu pc.´

Mas a mesma página que está funcionando belezinha no servidor de hospedagem em meu pc está dando erro quando tento inserir uma variavel vazia na tabela cujo campo é do tipo int.

tipo: $variavel = $_POST["variavel"];

se o campo do formulario estiver vazio teria que inserir no campo o valor 0, mas da erro no mysql na hora de inserir, fiz um teste assim:

if($variavel == ""){$variavel = 0;}

Fazendo isso grava normalmente, mas meu script é enorme e será um trabalho imenso ter que fazer isso em todas as variáveis vazias.

Minha inquietação é se está funcionando no servidor de hospedagem, pq nao funciona eu meu pc?, uma vez que o mysql instalei a mesma versão do servidor e os scripts das páginas são os mesmos.
Jayme A. C. Gimenez
Re: Variavel vazia não grava no campo int
23 de April de 2012 às 02:36PM
E qual é o erro que o MySQL acusa?
Romulo Alves
Re: Variavel vazia não grava no campo int
23 de April de 2012 às 02:56PM
Olá Jayme, na verdade eu uso uma classe para conexão,consultas as tabelas e para ter as mensagens de erro, a classe é:

class TMySQL{
var $host;
var $db;
var $user;
var $pass;
var $soquete;

function connect($host,$db,$user,$pass) {
$this->host = $host;
$this->db = $db;
$this->user = $user;
$this->pass = $pass;
$this->soquete=mysql_connect($this->host,$this->user,$this->pass);
if (!$this->soquete) {
echo "Não foi possível conectar-se ao Bando de Dados MySQL";
}
else
{
if (!mysql_select_db($this->db,$this->soquete)) {
echo "Banco de dados não encontrado";
}
}
}

function query ($string) {
$myquery = mysql_query($string,$this->soquete);
if (!$myquery) {
echo "Erro na consulta da query!<br>" . $string;
}
else
{
return $myquery;
}
}
}

/******************************************************************************/
então faço assim:

$MySQL = new TMySQL();
$MySQL->connect($host, $db, $user, $pass);

$sql = "insert into tabela(variavel)
values (\"$variavel\")";

$sql_result = $MySQL_t->query_t($sql);
if (empty ($sql_result))
{
echo "<b>Não foi possivel gravar os dados!</b>";
exit();
}


/******************************************************************************/
Quanto a classe está tudo ok, pois utilizo ela em outras paginas, a mensagem de erro que está me retornando é:

Erro na consulta da query
insert into tabela(variavel) values("")Não foi possivel gravar os dados!

Mas como disse, se eu colocar assim: if($variavel == ""){$variavel=0;} grava normalmente.

Será que pode ser alguma coisa no meu Mysql?
Jayme A. C. Gimenez
Re: Variavel vazia não grava no campo int
23 de April de 2012 às 03:43PM
E na sua tabela, no bd, está tudo certo, vc acha?

Por exemplo: ela está configurada para inserir o valor padrão (no caso, zero - 0 ), se nada for inserido naquele campo?
Marcos Regis
Re: Variavel vazia não grava no campo int
23 de April de 2012 às 03:49PM
coloque isso no inicio do seu script

error_reporting(0);
Romulo Alves
Re: Variavel vazia não grava no campo int
24 de April de 2012 às 08:10AM
Sim Jayme, Padrão 0;
Romulo Alves
Re: Variavel vazia não grava no campo int
24 de April de 2012 às 08:12AM
Oi Marcos, coloquei o error_reporting(0); no inicio do script, mas não apareceu nenhum erro além do erro de inserção no mysql...
Marcos Regis
Re: Variavel vazia não grava no campo int
24 de April de 2012 às 09:56AM
Romulo, na verdade não tinha prestado atenção ao seu código e ao seu post.

O que está acontecendo com você é o QUE DEVE ACONTECER. Não há nada errado com o comportamento do MySQL e do PHP.

Corrija seu script para que trate variaveis vazias, pois isso é um clássico erro de programação em PHP.
Só porque funciona em determinados momentos não quer dizer que esteja certo ou que é aceitável usar assim.
Romulo Alves
Re: Variavel vazia não grava no campo int
24 de April de 2012 às 10:12AM
Certo, farei isso...mas já que vou fazer, qual seria a forma mais correta de se fazer isso?

Obrigado
Marcos Regis
Re: Variavel vazia não grava no campo int
24 de April de 2012 às 01:46PM
apenas inicialize a variável com algum valor padrão.

Para variaveis provenientes de requisições, como $_POST ou $_GET voce pode usar este esquema:


$variavel = isset($_REQUEST['variavel'])? tipoval($_REQUEST['variavel']): VALOR_PADRAO;


traduzindo

se houver uma valor passado via $_GET ou $_POST você confirma o tipo dela, do contrário atribui um VALOR_PADRAO.

tipoval() pode ser algo como floatval(), intval() etc que impede que caracteres que possam dar erro na instrução SQL possam ser enviados via $_REQUEST;
Jayme A. C. Gimenez
Re: Variavel vazia não grava no campo int
24 de April de 2012 às 04:32PM
Deixa eu tentar pegar uma carona aqui no tópico rsrsrsrs.

Então, Marcos, no caso da solução que você apresenta, ela trata as variáveis que, eventualmente, não estejam setadas.

Mas, no caso proposto pelo Romulo, a variável estaria setada, mas com um valor vazio, certo? (como o conjunto vazio da matemática, digamos assim). Seria o caso de deixar um campo do form em branco, por exemplo.

São coisas diferentes, certo, variável não-setada e variável vazia? Ou isso depende da configuração do PHP, e em algumas configurações, o PHP trataria as variáveis vazias como não-setadas?
Marcos Regis
Re: Variavel vazia não grava no campo int
25 de April de 2012 às 01:39PM
extato. Por isso eu indiquei o uso de tipificação da variável. Não existe nulo ou vazio para tipos numéricos ou booleanos e dessa forma não teria o valor vazio.

Realmente são dois conceitos bem diferentes, mas que a solução é simplesmente validar o conteúdo.
Isso úm hábito muito ruim dos programadores PHP de nunca validarem o conteúdo proveniente de requisições, formulários, etc.
Regra importantissima de desenvolvimento WEB - Nunca confie na fonte de dados, principalmente quando ela é o usuário.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.