PHP - Sistema de Login

Boas,

bem ando aqui a aventurar-me no php, dado que tenho umas tarefas entre mãos nesta linguagem, e, então ao tentar fazer um sistema de login deparei-me com um problema...


Código:
<?
//conecta com o db
include ("connect.php");
$nome= $_POST['username'];
$senha = $_POST['password'];
if (strlen($senha)< 1 or strlen($nome) < 1){
 echo '<p align="center">Senha ou apelido inv&aacute;lidos<BR><a href="javascript:history.back(1);">tente denovo</a></p>';
}
else{
 $logar = mysql_query("SELECT * FROM login WHERE username='$nome' AND password='$senha'") or die("Username Desconhecido!");
}
if (mysql_num_rows($logar) > 0 ){
 echo 'Benvindo';
} 
else {
 echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente de novo</a></p>';
}
?>


O problema é que ele ao imprimir está a imprimir tudo apartir de '>0' deste if que passo a citar em baixo:

Código:
if (mysql_num_rows($logar) > 0 ){


Alguém sabe o que tenho aqui de errado?!?

Cumps
 
não é por essa razão...

se os caracteres não forem válidos não precisas de ver se existe um registo com esse utilizador/password
 
não olhei para o código todo, mas parece-me que tens de escapar ali umas cenas no html

assim:

PHP:
 echo '<p align=\"center\">Senha ou apelido inv&aacute;lidos<BR><a href=\"javascript:history.back(1);\">tente denovo</a></p>';

e a mesma coisa para o outro echo de html mais abaixo, mas esse sistema de login deixa muito a desejar :P
 
já tentei o escapamento no html, mas, de facto se dou escapamento ás (aspas) então depois ele não faz o alinhamento ao centro, e, o link não funciona.


A cena é que ele como podes verificar na imagem está a imprimir-me código á toa:|



Cumps
 
tipo agradeço o facto de referires o post do outro bacano! mas se possível eu queria ajuda era para resolver o prob deste meu código. Além do que, para ser sincero o código do outro bacano está bom demais para agarrar agora neste momento, dado que há coisas que não entendo bem ali no código!



Cumps
 
Isso parece-me um erro de sintaxe, tenta assim...

Código:
<?
//conecta com o db
include ("connect.php");
 
$nome= $_POST['username'];
$senha = $_POST['password'];
 
if (strlen($senha)< 1 or strlen($nome) < 1){
 echo '<p align="center">Senha ou apelido inv&aacute;lidos<BR><a href="javascript:history.back(1);">tente denovo</a></p>';
}
else{
 
 $logar = mysql_query("SELECT * FROM login WHERE username='$nome' AND password='$senha'") or die("Username Desconhecido!");
 
if (mysql_num_rows($logar) > 0 ){
 echo 'Benvindo';
} 
else {
 echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente de novo</a></p>';
}
 
}
 
 
?>
 
PHP:
<?php
//conecta com o db
include ("connect.php");
$nome= $_POST['username'];
$senha = $_POST['password'];

if (strlen($senha)< 1 or strlen($nome) < 1){
 echo "<p align=\"center\">Senha ou apelido inv&aacute;lidos<BR><a href=\"javascript:history.back(1);\">tente denovo</a></p>";
}
else{
     $logar = mysql_query("SELECT * FROM login WHERE username='$nome' AND password='$senha'") or die("Username Desconhecido!");
    if (mysql_num_rows($logar) > 0 ){
         echo "Benvindo";
    } 
    else {
         echo "<p align=\"center\">Senha ou apelido não conferem<BR><a href=\"javascript:history.back(1);\">tente de novo</a></p>";
    }
}
?>
Penso que assim não terás problemas
 
essa query também não está bem, não podes simplesmente espetar ai as variaveis.. usa assim

Código:
 $logar = mysql_query("SELECT * FROM login WHERE username="'.$nome.'" AND password="'.$senha.'" ") or die("Username Desconhecido!");
 
essa query também não está bem, não podes simplesmente espetar ai as variaveis.. usa assim

Código:
 $logar = mysql_query("SELECT * FROM login WHERE username="'.$nome.'" AND password="'.$senha.'" ") or die("Username Desconhecido!");


não deu com a tua query..


entretanto tentei com a seguinte query:

Código:
$logar = mysql_query("SELECT * FROM login WHERE username=".$nome." AND password=".$senha.";") or die("Username Desconhecido!");

acho que assim a query está correcta, mas, no entanto continua com o mesmo problema inicial.
 
Se utilizares o LIMIT na query, podes defenir o numero de resultados que queres returnar (Nota: nao sei como tens a BD definida)
 
PHP:
<?php
//conecta com o db
include ("connect.php");
$nome= $_POST['username'];
$senha = $_POST['password'];
 
if (strlen($senha)< 1 or strlen($nome) < 1){
 echo "<p align=\"center\">Senha ou apelido inv&aacute;lidos<BR><a href=\"javascript:history.back(1);\">tente denovo</a></p>";
}
else{
     $logar = mysql_query("SELECT * FROM login WHERE username='$nome' AND password='$senha'") or die("Username Desconhecido!");
    if (mysql_num_rows($logar) > 0 ){
         echo "Benvindo";
    } 
    else {
         echo "<p align=\"center\">Senha ou apelido não conferem<BR><a href=\"javascript:history.back(1);\">tente de novo</a></p>";
    }
}
?>
Penso que assim não terás problemas


Resolvido! Thanks...
 
Última edição:
Gostaria de pedir-vos uma opinião no sentido de, estou a pensar adaptar isto a um website previamente criado. Este sistema de login vai ficar numa div, em que o que pretendo é enquanto o utilizador não faz login, fica como unIndentified, e, aparece na respectiva div o sistema de login com o formulário. Mas, quando este faz o login, este mesmo formulário desaparece e é substituido o formulário de "login" por uma mensagem do tipo "Benvindo Caro XXXX" em que XXXX é o seu username.

Se a div fosse só isso, era um simples update da div....

Mas como a div tem além disso menú's, etc... Como é que faço esta actualização da forma mais eficiente? Não queria estar a recorrer ao método de booleanos, para saber se o estado do user é "loggado" ou "não loggado"...

Talvez AJAX???


Cumps
 
essa query assim tá a funcar?!?

para saberes se o user ta logado usa a global $_SESSION

W3schools tens la tutorials
 
podes usar o isset($_SESSION)

Código:
if (isset($_SESSION['sessioname'])) { 'mostra bem vindo' }else{ 'mostra form' }

maneira simplista
 
mas assim quando autentico a pessoa, tenho que criar uma sessão certo? E essa sessão permanece até ele fechar o browser? ou, permanece até ele mudar de URL?
 
Back
Topo