Jump to content


Photo

Duas Dúvidas


  • Faça o login para participar
6 replies to this topic

#1 Ancale

Ancale

    Novato no fórum

  • Usuários
  • 16 posts
  • Sexo:Não informado

Posted 22/07/2004, 12:17

Olá pessoal. :D

A minha primeira dúvida é sobre um código de login, que ao meu ver está corretissímo, mas não dá o resultado esperado:

<?php
function Login($nick, $password_pass)
{
         $password = md5($password_pass);
         $connect = mysql_connect("localhost", "user", "senha");
         mysql_select_db("tabela", $connect);
         $query = "SELECT * FROM users WHERE user_password= $password AND username = $nick";
         $sql = mysql_query($query);
         $contagem = mysql_num_rows($sql); //linha 12

               if($contagem == 1)
               {
                     echo "Logado";
               }

               else {
               echo "Não Logado";
               }
               
               


}

Login("usuário", "senha");              //linha de teste!


?>

Por meio de um formulário ele pega o username e o password digitado pelo usuário (com o password usa-se md5, já que a senha está codificada no bd) e verifica no bd se isso está correto. Com mysql_num_rows ele verifica as linhas modificadas. Se houver uma, aparece na tela um "Logado" (no código original eu setava uns cookies, mas tirei porque nessa parte está tudo ok), se não, um "Não Logado". Porém, usando o Apache, só dá "Não Logado", independente do user e/ou a senha existirem ou não. Eu já tentei de tudo e não entendo o que possa estar errado. Alguém saberia resolver esse problema?

PS: É interresante notar que usando um compilador PHP ele dá o seguinte erro:

"Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Arquivos de Programas\Easy PHP1-7\home\login_Temp.php in line 12"

Mais interresante: eu fiz um or die() com mysql_error e vejam o que apareceu:

"ErroColuna 'd9ddb6de1f448cd7ed484a9c09569106' desconhecida em 'where clause'"

Eu NUNCA vi esse erro. Alguém sabe me explicar? O d9ddb... é a senha do user decodificada com md5().

==

A minha segunda dúvida é sobre sessions. Eu NÃO consigo usá-las de jeito nenhum!

Vejam o código retirado da documentação do php:

<?php
if (!session_is_registered('count')) {
    session_register('count');
    $count = 1;
}
else {
    $count++;
}
?>

Hello visitor, you have seen this page <?php echo $count; ?> times.<p>;

To continue, <A HREF="nextpage.php?<?php echo SID?>">click here</A>

Agora vejam a penca de erros: <_<

Warning:  session_register(): open(C:\PHP\sessiondata\sess_04aecd754fa7faf28f25f15f748671d4, O_RDWR) failed: No such file or directory (2) in C:\Arquivos de Programas\Easy PHP1-7\home\session_Temp.php on line 3

Warning:  session_register(): Cannot send session cookie - headers already sent by (output started at C:\Arquivos de Programas\Easy PHP1-7\home\session_Temp.php:3) in C:\Arquivos de Programas\Easy PHP1-7\home\session_Temp.php on line 3

Warning:  session_register(): Cannot send session cache limiter - headers already sent (output started at C:\Arquivos de Programas\Easy PHP1-7\home\session_Temp.php:3) in C:\Arquivos de Programas\Easy PHP1-7\home\session_Temp.php on line 3

Warning:  Unknown(): open(C:\PHP\sessiondata\sess_04aecd754fa7faf28f25f15f748671d4, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning:  Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (C:\PHP\sessiondata) in Unknown on line 0


Eu verifiquei no php.in e o session.save_path está na pasta "C:\Arquivos de programas\EasyPHP1-7\home\Sessions", que eu mesmo criei. Diabos, qual é o problema para os sessions não funcionarem?

PS: Eu não sei se é necessário (acredito que sim, pois sessions trabalham com cookies), mas por via das dúvidas, executo o código com o apache ligado. ;)

#2 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 22/07/2004, 13:13

1 - verifica se a SENHA está gravada no DB criptografada !

2 - para usar a session e assim :
// GRAVAR
session_start();
$_SESSION['login'] = $login;

// para recuperar

session_start();
$login = $_SESSION['login'];

se tiver alguma duvida posta aê

até + !!!
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#3 AveNoturna

AveNoturna

    Normal

  • Usuários
  • 111 posts
  • Sexo:Não informado
  • Localidade:Brasília - DF

Posted 22/07/2004, 13:25

Ancale,
cara me explica o que vc quer com isso?!

}

Login("usuário", "senha");              //linha de teste!


?>


Seria para exibir o Nome de user e senha? Se for vc acha que não esqueceu de nada não?! tenta colocar assim:

$query = "SELECT * FROM users WHERE user_password= $password AND username = $nick";
        $sql = mysql_query($query);
        while($row = mysql_fetch_array($sql)) {

                $id = $row["id"];
$user= $row["user"];
$senha= $row["senha"];
                $contagem = mysql_num_rows($sql); //linha 12

              if($contagem == 1)
              {
                    echo "Logado";
              }

              else {
              echo "Não Logado";
              }
             
             


}

Login("$user", "$senha");              //linha de teste!



esse erro aqui:


"Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Arquivos de Programas\Easy PHP1-7\home\login_Temp.php in line 12"

Mais interresante: eu fiz um or die() com mysql_error e vejam o que apareceu:

"ErroColuna 'd9ddb6de1f448cd7ed484a9c09569106' desconhecida em 'where clause'"



é pq o script não consegue achar essa coluna dentro da tabela....vc deve ter feito algo errado na hora de usar o md5 ou na hora de imprimir isso na tela.....pq ele mostra a senha do user antes da cripto... desconfio que seja isso...



Sobre sessions dá uma olhada aqui ->Clica aqui


bom espero ter ajudado!
Vida Longa e Próspera...
E que a força esteja com Vocês!

#4 Ancale

Ancale

    Novato no fórum

  • Usuários
  • 16 posts
  • Sexo:Não informado

Posted 22/07/2004, 14:08

2 - para usar a session e assim :
// GRAVAR
session_start();


É, eu percebi que tava faltando o session_start. Mas os erros continuam...

Ancale,
cara me explica o que vc quer com isso?!

}

Login("usuário", "senha");              //linha de teste!


?>


É que eu só exibi uma parte do código. No dito há um formulário, e o action dele é a função Login(). Eu não coloquei aqui o formulário, só executei a função. Não há diferença. A função, como eu já mostrei, serve para validar o login (ou não).


esse erro aqui:


"Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Arquivos de Programas\Easy PHP1-7\home\login_Temp.php in line 12"

Mais interresante: eu fiz um or die() com mysql_error e vejam o que apareceu:

"ErroColuna 'd9ddb6de1f448cd7ed484a9c09569106' desconhecida em 'where clause'"


é pq o script não consegue achar essa coluna dentro da tabela....vc deve ter feito algo errado na hora de usar o md5 ou na hora de imprimir isso na tela.....pq ele mostra a senha do user antes da cripto... desconfio que seja isso...


Será que não foi problema na hora de criar a tabela (ou a coluna)? É porque eu inseri a senha sem criptografia no bd, e tirei o md5() da função, mas dá no mesmo.

Eu vou tentar em outra tabela. O saco vai ser criar tudo de novo, são 22 colunas... <_<

Sobre sessions dá uma olhada aqui ->Clica aqui


Eu já conhecia o iMasters, mas não sabia que havia tantos artigos de php... :D

Vou dar uma olhada e testar mais um pouco, depois posto aqui.

#5 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 22/07/2004, 14:27

Os campos user_password e username são varchar? Se forem, faça assim:

$query = "SELECT * FROM users WHERE user_password='$password' AND username='$nick'";
------
Mero mortal!

#6 AveNoturna

AveNoturna

    Normal

  • Usuários
  • 111 posts
  • Sexo:Não informado
  • Localidade:Brasília - DF

Posted 22/07/2004, 20:33

Os campos user_password e username são varchar? Se forem, faça assim:

$query = "SELECT * FROM users WHERE user_password='$password' AND username='$nick'";

Ancale , faça como o prog falo.... é muito mais seguro e estável.... quando vc for inserir algum dados que seja necessário criptografar o conteúdo use password.... eu uso e recomendo.... (y)
Vida Longa e Próspera...
E que a força esteja com Vocês!

#7 Ancale

Ancale

    Novato no fórum

  • Usuários
  • 16 posts
  • Sexo:Não informado

Posted 23/07/2004, 12:40

Prog meu caro, tu me salvou. Eu já tinha testado essa query, mas não tinha colocado o '' no $password e no $nick. Com eles funcionou. Não entendi o porque, mas pelo menos está rodando OK. :lol:

As sessions ainda não estão funcionando (<_<), mas eu ainda estou fazendo uns testes aqui. Se continuarem a não funcionar, eu posto aqui.

Mas uma vez, obrigado ao Prog. Você salvou minha vida. :D

Edição feita por: Ancale, 23/07/2004, 12:57.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq