• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Sessions

37 mensagens neste tópico

Estou a tentar fazer um sistema de login

e diz sempre que o username é inválido

---------index.php--------------

[code=php]session_start();
include ("teste.php");
if ($_POST) {
  $error = login_check($_POST);

-------------teste.php-------------

function login_check($forms){
$error = "";
$username = $forms['username'];
$password = $forms['password'];
if(trim($username) == "") $error .= "<li>your username is empyt.</li>";
if(trim($password) == "") $error .= "<li>your password is empty.<li>";

/* connectar á db */

$connect = mysql_connect('localhost', 'admin', 'passw) OR DIE("FALHOU");
$ch_db = mysql_select_db('bd, $connect) OR DIE("FALHOU 2");
$member_id = mysql_query('SELECT NICKNAME,PASSWORD FROM USERS where NICKNAME = ' .$_POST['username'])  
	' AND PASSWORD = ' .$_POST['password'],$connect);


    
/* FIM DA QUERY */ 

[/code]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá a meu ver tas a complicar o simples :P

Ai o login cheak tá muito complicado o penso que seria mais simples algo assim.


function login_check($user, $pass){
$error = "";
if(trim($username) == "") $error .= "<li>your username is empyt.</li>";
if(($password) == "") $error .= "<li>your password is empty.<li>";                                  //Não aconselho o trim na pass o user pode kerer usar espaços na password.

@$connect = mysql_connect('localhost', 'admin', 'passw);
@$ch_db = mysql_select_db('bd, $connect);
@$member_id = mysql_query('SELECT NICKNAME,PASSWORD FROM USERS where NICKNAME = ' .$user . ' AND PASSWORD = ' .$pass);

Penso que assim é mais simples e não uses o die pelo menos nao na versao final é uma grande fala.

em relação ás session nao tenho muito experiencia normalmente uso sempre cookies a meu ver é mais simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não estou a entender o porquê disto :

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/gendra/public_html/teste.php on line 26

Error:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá só mesmo vendo mas pelo erro penso que é algum problema no query.

Tenta fazer print_r ao resultado do query.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez o problema esteja aqui

$connect = mysql_connect('localhost', 'admin', 'passw) OR DIE("FALHOU");

Falta um  '  tem que ser assim

$connect = mysql_connect('localhost', 'admin', 'passw') OR DIE("FALHOU");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pensei que isso era um erro de copy/paste se não é bem possivel ser esse o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pensei que isso era um erro de copy/paste se não é bem possivel ser esse o problema.

O erro não está ai :P  o erro está no query :P

ERRO:

$member_id = mysql_query('SELECT NICKNAME,PASSWORD FROM USERS where NICKNAME = ' .$_POST['username'])  ' AND PASSWORD = ' .$_POST['password'],$connect);

Tem que ser assim:

$member_id = mysql_query("SELECT NICKNAME,PASSWORD FROM USERS WHERE NICKNAME = '{$_POST['username']}' AND PASSWORD = '{$_POST['password']}'", $connect);

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem agora estou aqui com um erro marado que não percebo a lógica disto

Indo á BD tenho estes valores

Username : teste

Password : 698dc19d489c4e

Ora como devem ter percebido, trata-se de uma password com encriptação md5 em cima...

Agora estou a testar a coisa mais simples do mundo e simplesmente não funciona... Diz que não encontrou ninguem com a password.

<?php
$connect = mysql_connect('localhost', 'admin', 'password');
$ch_db = mysql_select_db('bd', $connect);
$pass='698dc19d489c4e';
    $member_id =  mysql_query("select * from USERS WHERE PASSWORD='".$pass."'");


    $found = mysql_num_rows($member_id);
print $found;
?>

simplesmente diz 0...

já tentei tambem por "teste" num $_POST e depois fazer o md5 mas vai dar ao mesmo..

ando nisto à horas :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se a senha que esta na BD é md5 então  esta senha  "698dc19d489c4e"  tinha que ter 32 caracteres e não  14 :P

Faz-me um favor executa este query mysql_query( 'SELECT * FROM users' ); e mostra-me o resultado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora:

Select * from USERS;

N_REGISTO  NOME  NICKNAME  PASSWORD  DATA_DE_NASCIMENTO  EMAIL 

7  teste  teste  698dc19d489c4e  NULL  teste@localhost.pt

é de referenciar que na página de registo de Utilizadores é registado assim :

$PASSWORD = MD5($PASSWORD);

$REGISTO= "INSERT INTO USERS(NOME, NICKNAME, PASSWORD, EMAIL) VALUES('$NOME', '$LOGIN',' $PASSWORD', '$EMAIL');";

edit: tinha PASSWORD VarCHAR(15)

está explicado :\

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$member_id = mysql_query("SELECT * from USERS where PASSWORD='".$password."' AND NICKNAME='".$username."'") OR

die(mysql_error());

    $found = mysql_num_rows($member_id);

e da me este erro:

Resource id #40

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a query nao deveria ser assim?

   $member_id = mysql_query("SELECT * from USERS where PASSWORD='$password' AND NICKNAME='$username'") or die(mysql_error());

tens que ter cuidado com as aspas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado..

Agora outra coisa..

tenho as passwords em md5 sendo que na base de dados estão gravadas de tal forma..

Ora se fizer isto:

sendo $xx = 'e1bfd762321e409cee4ac0b6e841963c' ; //palavra pass igualzinha á que esta guardada

    $member_id = mysql_query("SELECT * FROM USERS WHERE password='$xx'");

$row = mysql_fetch_array($member_id);

não aparece nada....

mas se procurar pelo utilizador ao invés da password já aparece :\ weird não ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é realmente estranho tens a certeza que escreveste bem o campo password? tá mesmo igual ao da BD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa lá mas acho que isso já é preguiça de pensar... Gurzi o que é que te custa verificar se tem uma password definida na BD e se a md5 da password esta correcta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Kingless não é nada preguiça

Vou tentar explicar o que se passa

Tenho um campo chamado PASSWORD que actualmente é VARCHAR(32)

quando tenho o md5($password) não sei porque mas o campo PASSWORD só guarda 31 caracteres...

se puser VARCHAR(33) Ele ja guarda as 32 caracteres mas depois só com LIKE '%$pass%' é que funciona..

já fiz ALTER TABLE USERS MODIFY PASSWORD CHAR(32) e ele automaticamente passa a varchar de novo :\

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crias a tabela assim:

CREATE TABLE `users` (
`n_registo` int(11) NOT NULL auto_increment,
`nome` varchar(100) NOT NULL default '',
`username` varchar(75) NOT NULL default '',
`password` varchar(100) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
PRIMARY KEY (`n_registo`) );

Depois executas este query

mysql_query("INSERT INTO users VALUES (NULL, 'nome', 'usuario', '". md5( 'senha' ) ."', 'email@email.com'");

E depois executas este query

$senha = md5('senha');
$query = mysql_query( "SELECT password FROM users WHERE password = '$senha'" );
$row = mysql_fetch_array( $query );
echo $row['password'];

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê estar a dar 100 de espaço a uma variável que recebe 32 caracteres do md5 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pa, nunca e de mais dar espaco a variavel...

(nem melhorar o sistema de seguranca...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso não é relativio :S podes dar apenas 50 nao deves é dar mesmo o numero certinho, não me perguntes pk lol porke nao sei bem mas dá problemas isso esta testado :P

Para alem disso esse 50 é o limite não é o que vai ocupar se meteres la 100 e depois 1 digito ele só vai ocupar 1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$REGISTO= "INSERT INTO users(NOME, NICKNAME, PASSWORD, EMAIL) VALUES('$NOME', '$LOGIN',' $PASSWORD', '$EMAIL');";

estou a fazer alguma coisa mal aqui ?

acho que o erro vem daqui

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pa, acho que o que ta dentro da variavel (a query), nao precisa do ;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê estar a dar 100 de espaço a uma variável que recebe 32 caracteres do md5 ?

Quando utilizas varchar() tu podes dar espaço de 100 porque depois ele diminui o espaço para o tamanho da palavra já quando utilizas char() não podes dar muito espaço porque ele não vai diminuir o espaço para o tamanho da palavra e vai-te gastar alguns bytes na mysql.

$REGISTO= "INSERT INTO users(NOME, NICKNAME, PASSWORD, EMAIL) VALUES('$NOME', '$LOGIN',' $PASSWORD', '$EMAIL');";

estou a fazer alguma coisa mal aqui ?

acho que o erro vem daqui

Falta inserir o numero de registo e as letras têm que ser minusculas porque é case-sensetive... não sei porquê que fazes tudo com letras maisculas.

$REGISTO= "INSERT INTO users (n_registo, nickname, password, email) VALUES(NULL,'$NOME', '$LOGIN',' $PASSWORD', '$EMAIL')";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora não dá para registar...

porra estou cheio de dores de cabeça com esta m****

$PASSWORD = MD5($PASSWORD);

$REGISTO= "INSERT INTO users (id_registo,nickname, password, email) VALUES(NULL,'$NOME', '$LOGIN', '$PASSWORD', '$EMAIL')";

$REGISTAR= MYSQL_QUERY($REGISTO) OR DIE("FALHOU O REGISTO DE UTILIZADOR");

retorna sempre "FALHOU REGISTO"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O id não se mete null ele ta definido para auto incremente ou seja incremtenta 1 para cada registo

deve ficar assim

 $REGISTO= "INSERT INTO users (nickname, password, email) VALUES('$NOME', '$LOGIN', '$PASSWORD', '$EMAIL')";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora