João Santos Posted April 25, 2020 at 02:10 PM Report Share #617937 Posted April 25, 2020 at 02:10 PM 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 comment Share on other sites More sharing options...
tiago.f Posted April 25, 2020 at 02:28 PM Report Share #617938 Posted April 25, 2020 at 02:28 PM (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 at 02:28 PM by tiago.f Link to comment Share on other sites More sharing options...
João Santos Posted April 25, 2020 at 02:46 PM Author Report Share #617939 Posted April 25, 2020 at 02:46 PM 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 comment Share on other sites More sharing options...
tiago.f Posted April 25, 2020 at 02:50 PM Report Share #617940 Posted April 25, 2020 at 02:50 PM (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 at 02:52 PM by tiago.f Link to comment Share on other sites More sharing options...
veaoum Posted May 4, 2020 at 08:51 PM Report Share #618019 Posted May 4, 2020 at 08:51 PM 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 comment Share on other sites More sharing options...
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