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;
}
?>
@ndersMedlem sedan juni 200026 914 inlägg Och när du kör sql-frågan för sig själv händer vad?
colioneMedlem sedan juni 20013 386 inlägg Varför har du måsvingar runt password?
@nders skrev:
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);
colione skrev:
Varför har du måsvingar runt password?
Bra fråga... :r
@ndersMedlem sedan juni 200026 914 inlägg Snälla, skriv ut bara $sql, och exekvera den i något vettigt verktyg. Det är bara en massa php-kladd i dina inlägg... :(
@nders skrev:
Snälla, skriv ut bara $sql, och exekvera den i något vettigt verktyg. Det är bara en massa php-kladd i dina inlägg... :(
Vadå "kladd"..?
Körde frågan direkt i phpmyadmin, och fick.
MySQL returnerade ett tomt resultat (dvs inga rader). (Frågan tog 0.0003 sek)
SELECT id, aktiv, losenord, epost
FROM annonsorer
WHERE epost = '$epost'
AND losenord = '$password'
AND aktiv = '1'
LIMIT 0 , 30
(Är fortfarande novis när det gäller php samt mysql.) :r
@ndersMedlem sedan juni 200026 914 inlägg skrev du verkligen ut frågan med echo? du har ju fortfarande php-variablerna i det du postar nu?
edit: php är kladd. våra ögon och hjärnor kan inte automatiskt parsa php-kod. punkt 3 i denna lista har gått dina ögon förbi - läs gärna resten också.
Kan fortfarande inte logga in. :(
Användarnamn: test@test.nu
Lösenord: 12345
MD5: 06a2fcaaabeb16e45411d80f68f2df78
CREATE TABLE `annonsorer` (
`id` int(10) unsigned NOT NULL auto_increment,
`admin` enum('ja','nej') NOT NULL default 'nej',
`losenord` varchar(32) NOT NULL default '',
`namn` varchar(50) NOT NULL default '',
`gatuadress` varchar(50) NOT NULL default '',
`postnummer` varbinary(10) NOT NULL default '',
`ort` varchar(50) NOT NULL default '',
`telefon` varchar(20) NOT NULL default '',
`epost` varchar(50) NOT NULL default '',
`ipadress` varchar(20) NOT NULL default '',
`tillagd` datetime NOT NULL default '0000-00-00 00:00:00',
`status` enum('väntar','godkänd') NOT NULL default 'väntar',
`aktiv` int(11) NOT NULL default '0',
`md5` varchar(32) NOT NULL default '',
`link` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
--
-- Data i tabell `annonsorer`
--
INSERT INTO `annonsorer` VALUES (12, 'nej', '12345', 'test', 'test', 0x3132333435, 'test', '12345', 'test@test.nu', 'min ipadress', '2008-01-15 14:12:30', 'godkänd', 1, '06a2fcaaabeb16e45411d80f68f2df78', 0);
Förstår inte varför. :(
colioneMedlem sedan juni 20013 386 inlägg 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....
colione skrev:
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.
Är tacksam för hjälp med hur jag löser detta.
colioneMedlem sedan juni 20013 386 inlägg du ändrar din sql-fråga så att frågan ställs mot md5-fältet.
colione skrev:
du ändrar din sql-fråga så att frågan ställs mot md5-fältet.
Förstår det, men hur? :r
Det snurrar riktigt ordentligt i skallen just nu.
Istället för
losenord = '$password'
skriver du
md5 = '$password'
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
Ok! Nu har jag detta:
// Inloggning
if (isset($_POST['submit'])){
$password = md5($_POST['losenord']);
$epost = db_escape($_POST['epost']);
$sql = "SELECT id, aktiv, md5, epost FROM annonsorer
WHERE epost='$epost'
AND md5='$password'
AND aktiv = '1'";
$result = mysql_query($sql) or die("SQL: $sql<br />" . mysql_error());
Får dock fortfarande "fel användarnamn eller lösenord".
Guldstrand sliter sig i håret...
colioneMedlem sedan juni 20013 386 inlägg $sql = "SELECT id, aktiv, md5, epost FROM annonsorer
WHERE epost='$epost'
AND md5='$password'
AND aktiv = '1'";
echo $sql;
Som vi bad dig om för ett tag sen.
aasahMedlem sedan mars 20033 451 inlägg 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 '.