php

Tyran

Power Member
Boas, tenho um form de onde envio dados para uma página em php, mas um dos dados vem sempre com o valor 1!!! Este facto prende-se ao fazer:

Código:
if ($pass=$_POST['pass'] && $user=$_POST['user'] && $cod=$_POST['cod']) 
{
...
}

Se fizer em vez disso:

Código:
if ($_POST['pass'] && $_POST['user'] && $_POST['cod']) {

    $user = $_POST['user'];
    $pass = $_POST['pass'];
    $cod = $_POST['cod'];
}

Assim parece estar a funcionar!
Sabem-me explicar o porquê??

Estou a pensar para o login se manter guardar em sessão o user e a pass, é boa ideia? se calhar será melhor guardar a pass em md5.

Obrigado e cumpzz ;)
 
Para que queres a password? E tens a password "livre"????

O código correcto é:
PHP:
if (isset($_POST['pass']) && isset($_POST['user']) && isset($_POST['cod'])) {
    $user = $_POST['user'];
    $pass = $_POST['pass'];
    $cod = $_POST['cod'];
}
 
No primeiro exemplo que aí colocaste estás a fazer atribuições dentro da cláusula if, logo, a expressão irá ser verdadeira.
Seguindo o que o AliFromCairo disse, não te esqueças que
= é uma atribuição
== é uma comparação de valor ("2" é igual a 1+1)
=== é uma comparação de valor e tipo (apesar de o valor numérico de "2" ser igual ao de 1+1, "2" é string e 1+1 é integer).
PHP:
$a = "2";
$b = "1";
if($a = $b + $b) // $a passou a ter o valor contido em $b+$b. Isto é, $a = "1" + "1" = 2. A expressão retorna true, e entra sempre no if, qualquer que seja o valor de $b.
                 // não há nenhuma comparação no caso anterior.
if($a == $b + $b) // compara $a com $b + $b. Como $a = "2" e $b+$b = 2, a comparação retorna true porque o valor numérico, independentemente do facto de $a ser string e $b + $b ser integer, é igual.
if($a === $b + $b) // compara $a com $b + $b, juntamente com os tipos de cada parte. $a é "2" e $b+$b é 2. Apesar do valor numérico ser igual, os tipos são diferentes, pelo que este if retorna false.

Explicação breve para algo que dá muito jeito (especialmente em casos como o strpos, em que uma comparação por ===FALSE faz toda a diferença contra um ==FALSE).

Corrijam-me se estiver enganado em algum ponto. Falei de cabeça e posso ter tido algum "acidente" nos tipos.
 
Última edição:
Como o aliFromCairo disse, é por causa da atribuição que está a aparecer o 1.
De resto, não guardes dados sensiveis na sessao. Verifica no inicio se é valida (utilizador e password correctas) e cria a sessao.
O ideal seria ate arranjares um sistema já feito tipo a API do smf pois ha sempre alguma coisa que se esquece...
 
Seguindo o que o AliFromCairo disse, não te esqueças que
= é uma atribuição
== é uma comparação de valor ("2" é igual a 1+1)
=== é uma comparação de valor e tipo (apesar de o valor numérico de "2" ser igual ao de 1+1, "2" é string e 1+1 é integer).
PHP:
$a = "2";
$b = "1";
if($a = $b + $b) // $a passou a ter o valor contido em $b+$b. Isto é, $a = "1" + "1" = 2. A expressão retorna true, e entra sempre no if, qualquer que seja o valor de $b.
                 // não há nenhuma comparação no caso anterior.
if($a == $b + $b) // compara $a com $b + $b. Como $a = "2" e $b+$b = 2, a comparação retorna true porque o valor numérico, independentemente do facto de $a ser string e $b + $b ser integer, é igual.
if($a === $b + $b) // compara $a com $b + $b, juntamente com os tipos de cada parte. $a é "2" e $b+$b é 2. Apesar do valor numérico ser igual, os tipos são diferentes, pelo que este if retorna false.
Explicação breve para algo que dá muito jeito (especialmente em casos como o strpos, em que uma comparação por ===FALSE faz toda a diferença contra um ==FALSE).

Corrijam-me se estiver enganado em algum ponto. Falei de cabeça e posso ter tido algum "acidente" nos tipos.

se não me engano, se $b for igual a zero (o inteiro, não o caracter) o if retorna falso, porque o que se passa é que é feita a atribuição, e o que é avaliado é o valor final da variavel que o recebeu.
daí coisas como
PHP:
while ( $row = mysql_fetch_array($query) )
...

quando a query chega ao fim, a função retorna zero (ou outro valor qualquer que seja avaliado como falso) e vai ser avaliado apenas o $row
 
hmm, ok! Mas e as cookies não são perigosas? Lembro-me de um site na net de fazer dessas coisas (lol, não é aquele dos níveis até 20 ou não sei quê) em que uma missão era criar uma cookie.

Obrigado e cumprimentos
 
Cookies são ficheiros de texto minúsculos que são feitos unicamente para armazenar informações.
Em si, eles não são perigosos. O problema reside nas informações que eles registam e em como estas são utilizadas.

Tradução: tanto é possível um site (como os de publicidade) registar as tuas preferências e os sites que visitas para te mostrar os chamados "targeted ads" como é possível registarem informações pessoais tuas e usarem-nas para outros fins.

Mas se é para te manteres logged in num sistema, tens de ter os cookies activados.
 
Back
Topo