[PHP]erro lógica

Gurzi

Power Member
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 o $found retorna 0...

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

ando nisto à horas
sad.gif
 
para já tens um erro ...

uma hash de md5 é constituida por 128bits (32 caracteres em hexadecimal)

corta a ultima parte e substitui por :

$result = mysql_fetch_array($member_id);
print $result['username'];
 
para já tens um erro ...

uma hash de md5 é constituida por 128bits (32 caracteres em hexadecimal)

corta a ultima parte e substitui por :

$result = mysql_fetch_array($member_id);
print $result['username'];

Pois mas quando faço o registo do utilizador faço isto:

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

e não entendo porque não aparecem os 32 caracteres
 
Pois mas quando faço o registo do utilizador faço isto:

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

e não entendo porque não aparecem os 32 caracteres



foste tu que criaste a BD ?

Se sim, por acaso criaste o campo com espaço suficiente ? (tipo password varchar(32))
 
Boa..

PASSWORD VARCHAR(15)


acho que então está descoberto o grande problema, agora como faço um change de quantos caracteres quero no campo ?


edit: ALTER TABLE 'USERS' CHANGE 'PASSWORD' 'PASSWORD' VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL


já agora:

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

$member_id = mysql_query("select * from USERS WHERE PASSWORD='".$password."' AND NICKNAME='".$username."'");


$found = mysql_num_rows($member_id);


thnks :P
 
Última edição:
presumi que fosse esse problema pq já me conteceu o mesmo ;)

A sintaxe é essa, mas para te facilitar, aconselho a instalares o phpmyadmin ;)


Eu tenho e uso o phpmyadmin..

agora a cena estúpida é que criei isto

CREATE TABLE USERS( N_REGISTO INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, NOME CHAR(20),
NICKNAME CHAR(20) NOT NULL, PASSWORD CHAR(32) NOT NULL, DATA_DE_NASCIMENTO DATE,
EMAIL CHAR(30) NOT NULL, MSN CHAR(30), AVATAR INTEGER);


e quando faço

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

o gajo na coluna "PASSWORD" so guarda 31 caracteres ao invés dos 32 que o md5 retorna..
não me perguntes porquÊ. porque eu também ando à dia e meio a tentar perceber.
 
The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

[ http://dev.mysql.com/doc/refman/5.0/en/char.html ]

Posto isto está explicado o problema. Tens de usar o campo password como varchar(32).
Agora já vais conseguir trablhar com os logins dos utilizadores sem problemas.

Deixo mais um conselho porque desde que começei a programar mais seriamente em PHP começei a usar biibliotecas de BD. Qualquer coisa envia-me um PM.
Para resolver o problema do mysql_num_rows, basta pores um @ antes da função, assim já nao retorna erros.

PHP:
$rows = @mysql_num_rows( $query );
Cumprimentos.
 
Back
Topo