Jump to content
t0ze

[Resolvido] Comparação de '0' com NULL

Recommended Posts

t0ze

Boa tarde pessoal,

Estou aqui meio às aranhas, com uma situação um tanto ou quanto peculiar.

Tenho na minha tabela no MYSQL o campo 'Existe' é do tipo char(1) e o meu objectivo para este campo é guardar valores com 0 e 1 sendo que 0 corresponde a Não, e 1 a sim (anteriormente tinha este campo como tinyint). De referir ainda que este campo tem como default value NULL.

Pois bem, no formulário de edição deste registo, tenho as duas radio box

<input type="radio" name="existe" value="1" <?php echo ($process->process['existe'] == '1') ? 'checked' : '' ;?> >Sim
<input type="radio" name="existe" value="0" <?php echo ($process->process['existe'] == '0') ? 'checked' : '' ;?> >Não

E eu não consigo de maneira nenhuma (inclusive mudei o tipo do campo na base de dados) fazer com que, caso o campo na base de dados seja NULL, nenhuma das opções fica activa.

Se o campo é texto, porque é que ele está a interpretar o '0' como NULL ? Já inclusive testei a comparação com === (que segundo li, verifica o tipo do campo e o valor, se n estiver enganado)

Alguém me pode dar uma ajuda ?

Obrigado,

Cumps

Edited by t0ze

Share this post


Link to post
Share on other sites
capricorn

tens de usar o operador === em vez de ==, só assim o 0 é diferente de null

imprime a variavel $process->process['existe'] para ter a certeza que não é 0

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
t0ze

@yoda o NULL é para no caso de na base de dados aquele campo não estar preenchido (default value é NULL) as checkbox sim e não não estão seleccionadas. Aceito sugestões que possam fazer sentido :) Obg.

@capricorn "martelei" o valor na base de dados, '0', NULL, fiz var_dump à variavel. e o resultado do var_dump para o caso de $process->process['existe'] = 0 e $process->process['existe'] = NULL é exactamente o mesmo: string(0) "". Também fiz a comparação com === e continua a dizer que 0 é igual a NULL

Share this post


Link to post
Share on other sites
HappyHippyHippo

Também fiz a comparação com === e continua a dizer que 0 é igual a NULL

estás a dizer que no teu PHP, se fizeres o segunite código tens a mensagem apresentada ?

if (0 === NULL) {
 echo "os valores sao iguais";
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
monteiroxxi

Em PHP, com a utilização do operador '==' é normal que a comparação entre 0, NULL , "" (string vazia) ou false o resultado da mesma seja verdadeira pois o "PHP" considera que todos os valores acima apresentados são semelhantes.

Edited by monteiroxxi

Share this post


Link to post
Share on other sites
HappyHippyHippo

Em PHP, com a utilização do operador '===' (idêntico) é normal que a comparação entre 0, NULL , "" (string vazia) ou false o resultado da mesma seja verdadeira pois o "PHP" considera que todos os valores acima apresentados são semelhantes.

http://www.php.net/manual/en/language.operators.comparison.php

$a === $b Identical TRUE if $a is equal to $b, and they are of the same type.

for favor corrige-te e não confundas o criador do tópico

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
t0ze

estás a dizer que no teu PHP, se fizeres o segunite código tens a mensagem apresentada ?

if (0 === NULL) {
 echo "os valores sao iguais";
}

E não são iguais ? tendo em conta isto:

Em PHP, com a utilização do operador '===' (idêntico) é normal que a comparação entre 0, NULL , "" (string vazia) ou false o resultado da mesma seja verdadeira pois o "PHP" considera que todos os valores acima apresentados são semelhantes.

Segui a sugestão do @yoda. Leva só Sim e Não e é esse o valor que guardo na base de dados, sim e não. Assim não tenho que comparar zeros com NULL.

Cumprimentos.

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
pikax
E não são iguais ?

Nao, o 0 e' um inteiro e o NULL e' null, os tipos sao diferentes!


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
t0ze

Nao, o 0 e' um inteiro e o NULL e' null, os tipos sao diferentes!

Foi exactamente por achar isso, é que usei no campo "Existe" na base de dados os valores 0 e 1 tendo em conta que NULL é isso mesmo NULL != 0 portanto quando no if dos radio buttons Sim para se o valor no campo "Existe" === 0, Não para se o valor no campo "Existe" === 0 e nenhum selecionado se o valor "Existe" === NULL

Porem e como diz ali em cima na citação:

Em PHP, com a utilização do operador '===' (idêntico) é normal que a comparação entre 0, NULL , "" (string vazia) ou false o resultado da mesma seja verdadeira pois o "PHP" considera que todos os valores acima apresentados são semelhantes.

Que é exactamente o que acontece. 0 === NULL verdadeiro.

Ou estou a baralhar-me todo ? :(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.