João Santos 0 Posted April 25, 2020 Report Share Posted April 25, 2020 Tenho este código em PHP para fazer log-in numa base de dados. Mas dá sempre erro de combinação de pass e email. Código: <?php if (isset($_POST['enviar'])) { $username = mysqli_real_escape_string($con, $_POST['email']); $password = mysqli_real_escape_string($con, $_POST['pass']); $erros = 0; if (empty($username)) { echo "User errado"; $erros = $erros + 1; } if (empty($password)) { echo "Pass errada"; $erros = $erros + 1; } if ($erros == 0) { $password = md5($password); $query = "SELECT * FROM registo WHERE email='$username' AND pass='$password'"; $results = mysqli_query($con, $query); if (mysqli_num_rows($results) == 1) { $_SESSION['email'] = $username; header('location: index.html'); }else { echo "Wrong username/password combination"; } } } ?> Mesmo estando os dados corretos dá o erro: Wrong username/password combination Link to post Share on other sites
tiago.f 22 Posted April 25, 2020 Report Share Posted April 25, 2020 (edited) Olá João, Perguntas: de onde vem a variável $con ? qual o resultado de mysqli_num_rows($results) ? - já sabemos que não é 1.. Edited April 25, 2020 by tiago.f Link to post Share on other sites
João Santos 0 Posted April 25, 2020 Author Report Share Posted April 25, 2020 o con vem de quando eu crio a base de dados: <?php $con = mysqli_connect('localhost', 'root', ''); $sql = "CREATE DATABASE bdex"; mysqli_query($con, $sql); $con = mysqli_connect('localhost', 'root', '', 'bdex'); $sql = "CREATE TABLE registo ( NOME VARCHAR(35) NOT NULL, EMAIL VARCHAR(25) NOT NULL, PASS VARCHAR(25) NOT NULL, VID VARCHAR(50) NOT NULL );"; mysqli_query($con, $sql); ?> Mas já fiz um registo na base de dados, por isso era suposto o mysqli_num_rows($results) ser 1. Link to post Share on other sites
tiago.f 22 Posted April 25, 2020 Report Share Posted April 25, 2020 (edited) Olhando para a tua bd, e vendo a password em plaintext (GRANDE falha de segurança), não me parece que fazendo $password = md5($password); antes do query, vá alguma vez retornar algum registo. Ainda assim, qual a respota á minha 2ª pergunta? - "era suposto retornar 1" não é o mesmo que "testei e retorna 1" EDIT: guardar a password usando md5 tb não é mt seguro, ainda que infinitamente melhor que plaintext. Usa antes password_hash (link) Edited April 25, 2020 by tiago.f Link to post Share on other sites
veaoum 1 Posted May 4, 2020 Report Share Posted May 4, 2020 if ($erros == 0) { $password = md5($password); $query = "SELECT * FROM registo WHERE email='$username' AND pass='$password'"; $results = mysqli_query($con, $query); if (mysqli_num_rows($results) == 1) { $_SESSION['email'] = $username; header('location: index.html'); }else { echo "Wrong username/password combination"; } Já vi servidores a serem case sensitive (acho que é assim que se diz) se assim for os campos da BD são maiúsculos e não minúsculos..... Se tivesse no teu caso trocava o "Wrong username/password combination" por $query, poderás conseguir analisar melhor o resultado. Link to post Share on other sites
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