webForumDet fria alternativet

Problem med inloggning

15 svar · 707 visningar · startad av Guldstrand

GuldstrandMedlem sedan juli 20041 274 inlägg
#1

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
#2

Och när du kör sql-frågan för sig själv händer vad?

colioneMedlem sedan juni 20013 386 inlägg
#3

Varför har du måsvingar runt password?

GuldstrandMedlem sedan juli 20041 274 inlägg
#4

@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
#5

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... :(

GuldstrandMedlem sedan juli 20041 274 inlägg
#6

@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
#7

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å.

GuldstrandMedlem sedan juli 20041 274 inlägg
#8

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
#9

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....

GuldstrandMedlem sedan juli 20041 274 inlägg
#10

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
#11

du ändrar din sql-fråga så att frågan ställs mot md5-fältet.

GuldstrandMedlem sedan juli 20041 274 inlägg
#12

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.

visslarenMedlem sedan juli 2001770 inlägg
#13

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

GuldstrandMedlem sedan juli 20041 274 inlägg
#14

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
#15
  $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
#16

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 '.

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
129 ms — hämta tråd, inlägg och bilagor (db)