PF2G Posted May 28, 2012 at 01:15 PM Report #458508 Posted May 28, 2012 at 01:15 PM (edited) Boa tarde, P@P Eu estou a tentar fazer um sistema de log in e de registo mas não me esta a dar bem: no log in eu ponho info correta e ele diz que esta incorreto: <?PHP session_start(); include "db_connect.php"; $username = $_POST['user']; $password = $_POST['password']; mysql_select_db($dbname, $connect); $query_log="SELECT username, password FROM utilizadores WHERE username='". $username. "' AND password='". $password ."'"; $log = mysql_query($query_log, $connect) or die(mysql_error()); $row_log = mysql_fetch_assoc($log); if ($username == $row_log['username'] AND $pass == $row_log['password']) { $_SESSION['user'] = $username; header("Location: admin.php"); } else { echo 'Utilizador ou Password incorrectos'; } mysql_close($connect); ?> No registo não me adiciona e da erro nas variaveis das textbox: <?PHP include 'db_connect.php'; ?> <table> <form action="" method="post"> <tr> <td> Username: </td> <td> <input type="text" name="user" /> </td> </tr> <tr> <td> Password: </td> <td> <input type="password" name="pass" /> </td> <input type="submit" name="submit" /> </tr> </form> </table> <?PHP $username= $_POST['user']; $password = sha1($_POST['password']); if(isset($_POST['submit'])) { $query="insert into utilizadores(username, password) values('".$username."','".$password."')"; $res=mysql_query($query); header('location:index.php'); } ?> Alguem me pode ajudar? Obrigado, PF2G Edited May 28, 2012 at 02:06 PM by brunoais geshi!
HappyHippyHippo Posted May 28, 2012 at 01:49 PM Report #458513 Posted May 28, 2012 at 01:49 PM 1º (e o erro mesmo) o teu input de password tem o nome "pass" ... logo esta linha tem de ser alterada: $username = $_POST['user']; //$password = $_POST['password']; $password = $_POST['pass']; 2º : tem cuidado com os valores que são fornecidos ao script, tenta fazer uma limpeza aos mesmos (o porquê ve na net SQL Injection): $username = mysql_real_escape_string($_POST['user']); $password = mysql_real_escape_string($_POST['pass']); 3º : como tens o teu sql a retornar somente o registo que contem o username e password correcto, basta saber se retornas-te 1 registo (não é preciso validar novamente): //if ($username == $row_log['username'] AND $pass == $row_log['password']) { if (mysql_num_rows($log)) { IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PF2G Posted May 28, 2012 at 01:56 PM Author Report #458517 Posted May 28, 2012 at 01:56 PM (edited) Realmente os nomes tava trocados, foi erro meu :S Agora ele faz login mas da erro no $_Session porque? <?PHP include 'db_connect.php'; session_start(); $_SESSION['username'] = $username; ?> <html> Bem-Vindo ao Backoffice, <?PHP echo $username ?> </html> e o registo continua a não adicionar.... <?PHP include 'db_connect.php'; ?> <table> <form action="" method="post"> <tr> <td> Username: </td> <td> <input type="text" name="user" /> </td> </tr> <tr> <td> Password: </td> <td> <input type="password" name="pass" /> </td> <input type="submit" name="submit" /> </tr> </form> </table> <?PHP $username = mysql_real_escape_string($_POST['user']); $password = mysql_real_escape_string($_POST['pass']); if(isset($_POST['submit'])) { $query="insert into utilizadores(username, password) values('".$username."','".$password."')"; $res=mysql_query($query); header('location:index.php'); } ?> Edited May 28, 2012 at 02:13 PM by brunoais geshi!
HappyHippyHippo Posted May 28, 2012 at 02:04 PM Report #458522 Posted May 28, 2012 at 02:04 PM porque tens as variáveis trocadas ... /* ler a variável $username (que não está declarada) e guarda o seu valor (NULL) em sessão (destruindo o que já existe) */ //$_SESSION['username'] = $username; /* ler a variável de sessão para $username */ $username = $_SESSION['username']; IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PF2G Posted May 28, 2012 at 02:10 PM Author Report #458525 Posted May 28, 2012 at 02:10 PM porque tens as variáveis trocadas ... /* ler a variável $username (que não está declarada) e guarda o seu valor (NULL) em sessão (destruindo o que já existe) */ //$_SESSION['username'] = $username; /* ler a variável de sessão para $username */ $username = $_SESSION['username']; Ei que estupidez :/ Obrigado amigo. Agora ja so falta o inserir user
johnmaia Posted May 28, 2012 at 02:20 PM Report #458530 Posted May 28, 2012 at 02:20 PM (edited) Supõe que o ficheiro PHP para efectuar o registo do utilizador se chama "registo.php". O código seguinte já deve resultar. <?PHP include 'db_connect.php'; $step = $_POST['step']; if($step != 1) { ?> <table> <form action="registo.php" method="post"> <input type="hidden" name="step" value="1" /> <tr> <td> Username: </td> <td> <input type="text" name="user" /> </td> </tr> <tr> <td> Password: </td> <td> <input type="password" name="pass" /> </td> <input type="submit" name="submit" /> </tr> </form> </table> <?PHP } else if($step == 1) { $username = mysql_real_escape_string($_POST['user']); $password = mysql_real_escape_string($_POST['pass']); if($username != Null && $password != Null) //Alterar as condições de validação, como limite minimo na dimensão do username/password { $query="insert into utilizadores(username, password) values('".$username."','".$password."')"; //Encriptar a password para não correr os risco de algum dia as passwords dos teus utilizadores ficarem expostas. $res=mysql_query($query); echo "Registo Concluido"; } else { echo "Dados Invalidos"; } } } ?> Aconselho ainda a não armazenares as Passwords sem estarem encriptadas. Utiliza algo como hash('sha512' ,$password); E na função de login, encriptas a password inserida para fazer login, e comparas o resultado dessa encriptação com o que tens na Base de Dados. Edited May 28, 2012 at 02:27 PM by johnmaia
PF2G Posted May 28, 2012 at 02:29 PM Author Report #458533 Posted May 28, 2012 at 02:29 PM Supõe que o ficheiro PHP para efectuar o registo do utilizador se chama "registo.php". O código seguinte já deve resultar. <?PHP include 'db_connect.php'; $step = $_POST['step']; if($step != 1) { ?> <table> <form action="registo.php" method="post"> <input type="hidden" name="step" value="1" /> <tr> <td> Username: </td> <td> <input type="text" name="user" /> </td> </tr> <tr> <td> Password: </td> <td> <input type="password" name="pass" /> </td> <input type="submit" name="submit" /> </tr> </form> </table> <?PHP } else if($step == 1) { $username = mysql_real_escape_string($_POST['user']); $password = mysql_real_escape_string($_POST['pass']); if($username != Null && $password != Null) //Alterar as condições de validação, como limite minimo na dimensão do username/password { $query="insert into utilizadores(username, password) values('".$username."','".$password."')"; //Encriptar a password para não correr os risco de algum dia as passwords dos teus utilizadores ficarem expostas. $res=mysql_query($query); echo "Registo Concluido"; } else { echo "Dados Invalidos"; } } } ?> Aconselho ainda a não armazenares as Passwords sem estarem encriptadas. Utiliza algo como hash('sha512' ,$password); E na função de login, encriptas a password inserida para fazer login, e comparas o resultado dessa encriptação com o que tens na Base de Dados. Desculpa mas continua sem adicionar. Aparece a mensagem de Registo concluido mas nao adiciona nada...
HappyHippyHippo Posted May 28, 2012 at 02:35 PM Report #458536 Posted May 28, 2012 at 02:35 PM adiciona esta linha : $res=mysql_query($query); echo mysql_error(); // faz a saída para a página do erro que fez com que o SQL não fosse correctamente executado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
johnmaia Posted May 28, 2012 at 02:35 PM Report #458537 Posted May 28, 2012 at 02:35 PM O código seguinte já deve resultar. <?PHP include 'db_connect.php'; $step = $_POST['step']; if($step != 1) { ?> <table> <form action="registo.php" method="post"> <input type="hidden" name="step" value="1" /> <tr> <td> Username: </td> <td> <input type="text" name="user" /> </td> </tr> <tr> <td> Password: </td> <td> <input type="password" name="pass" /> </td> <input type="submit" name="submit" /> </tr> </form> </table> <?PHP } else if($step == 1) { $username = mysql_real_escape_string($_POST['user']); $password = mysql_real_escape_string($_POST['pass']); if($username != Null && $password != Null) //Alterar as condições de validação, como limite minimo na dimensão do username/password { mysql_query("INSERT INTO `utilizadores` (`username`, `password`) VALUES ( '".$username."', '".hash('sha512' ,$password)."');"); echo "Registo Concluido"; } else { echo "Dados Invalidos"; } } } ?>
PF2G Posted May 28, 2012 at 02:48 PM Author Report #458550 Posted May 28, 2012 at 02:48 PM Fogo sem exito... adiciona esta linha : $res=mysql_query($query); echo mysql_error(); // faz a saída para a página do erro que fez com que o SQL não fosse correctamente executado Diz quer nenhuma dtabse foi selecionada
johnmaia Posted May 28, 2012 at 02:52 PM Report #458554 Posted May 28, 2012 at 02:52 PM (edited) Porque tens de escolher a Base de Dados aonde estás a inserir dados nas tabelas. mysql_select_db("nomedabd"); Declara isto logo após o include 'db_connect.php'; Ou colocar o "mysql_select_db" dentro do ficheiro: "db_connect.php". Aliás, tu usas esta linha na tua função para efectuar o login: mysql_select_db($dbname, $connect); Só terás mesmo de adicioná-la na função de registo. Edited May 28, 2012 at 03:04 PM by johnmaia
PF2G Posted May 28, 2012 at 03:04 PM Author Report #458558 Posted May 28, 2012 at 03:04 PM Ja funciona. 🙂 Obrigado pessoal 😉
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now