1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[PHP]erro lógica

Discussão em 'Programação' iniciada por Gurzi, 6 de Setembro de 2006. (Respostas: 7; Visualizações: 862)

  1. Gurzi

    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 [​IMG]
     
  2. spastikman

    spastikman Banido

    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'];
     
  3. Gurzi

    Gurzi Power Member

    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
     
  4. spastikman

    spastikman Banido



    foste tu que criaste a BD ?

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

    Gurzi Power Member

    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: 6 de Setembro de 2006
  6. spastikman

    spastikman Banido

    presumi que fosse esse problema pq já me conteceu o mesmo ;)

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

    Gurzi Power Member


    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.
     
  8. MX+

    MX+ Power Member

    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.
     

Partilhar esta Página