Försöker använda följande kod till en inloggning, (med aktiveringsmail).
Verkar dock inte få det att fungera, får bara "fel användarnamn eller lösenord".
Tacksam för all hjälp.
<?php
session_start(); // Alltid överst på sidan
error_reporting(E_ALL);
ini_set("display_errors", "1");
include "includes/mysql.php"; // Databasanslutningen
// Inloggning
if (isset($_POST['submit'])){
$password = md5($_POST['losenord']);
$epost = db_escape($_POST['epost']);
$sql = "SELECT id, aktiv, losenord, epost FROM annonsorer
WHERE epost='$epost'
AND losenord='{$password}' AND aktiv = '1'";
$result = mysql_query($sql) or die("SQL: $sql<br />" . mysql_error());
//$aktiv = mysql_result($result, 0, 'aktiv');
// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0){
header("Location: logga_in.php?badlogin=");
exit;
}
// Är kontot inte aktiverat skicka personen till sida med info om att kontot inte är aktiverat
if ($result['aktiv'] == '0') {
header("Location: ejaktiverat.php");
exit;
}
// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = db_escape($_POST['epost']);
header("Location: mitt_konto.php");
exit;
}
// Utloggning
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: index.php");
exit;
}
?>
Och när du kör sql-frågan för sig själv händer vad?
Jag körde frågan ...
// Inloggning
if (isset($_POST['submit'])){
$password = md5($_POST['losenord']);
$epost = db_escape($_POST['epost']);
$sql = "SELECT id, aktiv, losenord, epost FROM annonsorer
WHERE epost='$epost'
AND losenord='{$password}' AND aktiv = '1'";
$result = mysql_query($sql) or die("SQL: $sql<br />" . mysql_error());
//$aktiv = mysql_result($result, 0, 'aktiv');
i en "echo", och fick:
SELECT id, aktiv, losenord, epost FROM annonsorer WHERE epost='test@test.se' AND losenord='827ccb0eea8a706c4c34a16891f84e7b' = 'SELECT id, aktiv FROM annonsorer WHERE epost='test@test.se' AND losenord='827ccb0eea8a706c4c34a16891f84e7b''; Resource id #4 = mysql_query(SELECT id, aktiv, losenord, epost FROM annonsorer WHERE epost='test@test.se' AND losenord='827ccb0eea8a706c4c34a16891f84e7b') or die('SQL: SELECT id, aktiv, losenord, epost FROM annonsorer WHERE epost='test@test.se' AND losenord='827ccb0eea8a706c4c34a16891f84e7b'
' . mysql_error()); = mysql_result(Resource id #4, 0, 'aktiv);
För att du kollar av din md5 mot lösenordsfältet i databasen och inte md5-fältet...sen kan man ju fundera på varför du ska hasha lösenordet men ändå spara det i klartext....
För att du kollar av din md5 mot lösenordsfältet i databasen och inte md5-fältet...sen kan man ju fundera på varför du ska hasha lösenordet men ändå spara det i klartext....
Som nämnt ovan, så är jag fortfarande rätt novis inom php och mysql, men jag försöker.
i sql-satsen dvs. Eftersom du kör md5() på indatan från formuläret så kommer du per automatik inte få någon träff vid jämförelse.
När du kollar upp $password mot losenord gör det detsamma som att jämföra 06a2fcaaabeb16e45411d80f68f2df78 med 12345
Guldstrand, det verkar som om du inte riktigt förstått det här med md5 och vitsen med att använda det. Det kan nog vara en del av ditt problem. Det du BÖR lagra i databasen är det krypterade lösenordet, INTE lösenordet. Dvs, man registrerar sig genom att fylla i någon form, tex:
Namn: ................... <-- Textfield name="user"
Losen: ................... <-- Textfield name="pass"
Epost: ................... <-- Textfield name="email"
//Och diverse annat
I din PHP-kod, när du tar hand om datat från formen så gör du bland annat:
$cryptPass = md5($_POST['pass']); //Vilket du gör
//...
$sql = "INSERT INTO Users(Name, pass, email, ....)
VALUES ('".$_POST['user']."', '".$cryptPass."', '".$_POST['email']."', ...)"
//...
Dvs du måste lagra det krypterade lösenordet.
När du sedan vill logga in, har du en motsvarande form:
Namn: ................... <-- Textfield name="user"
Losen: ................... <-- Textfield name="pass"
När du ska se om lösenordet är rätt jämför du det (krypterade) lösenord du hämtar från databasen med $cryptPass som räknas ut likadant som i registreringssidan, nämligen:
$cryptPass = md5($_POST['pass']);
Jag gissar att ditt problem kan bero på att du antingen jämför ett krypterat lösenord mot ett okrypterat, eller ett krypterat med ett två gånger krypterat pga att du inte fattat HUR du ska använda md5. :)
Edit: La till ett gäng borttappade '.
329 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2