Avatar billede duqe Nybegynder
18. februar 2005 - 00:11 Der er 43 kommentarer og
1 løsning

Hent login-data ud af SQL tabel

Hej!

Jeg har lavet en tabel med nogle login information ('bruger' og 'password). Jeg bruger følgende script til at hive "værdierne" ud:

$query = mysql_query("select * from admin");
while( $row = mysql_fetch_array($query)) {
$auser = $row['bruger'];
$apass = $row['PASSWORD']; }

Bagefter kommer der et script der tjekker om det indtastede login svarer til det der står i SQL tabellen:

if (($_POST['user'] == $auser) and ($_POST['pass'] == $apass))

Problemet er at jeg kun kan logge ind med det første login der står i min tabel (jeg har pt. 2).

Nogle der kan hjælpe?
På forhånd tak!
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:13 #1
Du skal ændre din SQL således at du henter passwordet til brugeren ud og tjekker om det er korrekt.
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:15 #2
brug f.eks. følgende SQL: (skal self tilpasses)

$query = mysql_query("SELECT password FROM admin WHERE bruger = '".$_POST['bruger']."';");
while( $row = mysql_fetch_array($query))
{
  $apass = $row['PASSWORD'];
}

if ($_POST['pass'] == apass)
{
  //bahh
}
Avatar billede m_els Nybegynder
18. februar 2005 - 00:16 #3
Du skal nok hellere gøre således:

$bruger = $_POST['user'];
$pass = $_POST['pass'];

$bruger_pass = mysql_query("SELECT `brugernavn` FROM `admin` WHERE `brugernavn` = '$bruger' AND `password` = '$pass'");
$bruger_exist = mysql_num_rows($bruger_pass);

if ($bruger_exist >0){
//bruger og password er korrekt
}
else{
//bruger og password er ikke korrekt
}
Avatar billede alister_crowley Nybegynder
18. februar 2005 - 00:17 #4
tigertool, det er da dobbelt arbejde ?

$query = mysql_query("SELECT password FROM admin WHERE bruger = '".$_POST['bruger']."' AND password='".$_POST['pass']."';");

og så checke med mysql_num_rows om der blev fundet et resultat.
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:18 #5
alister_crowley << kan du have ret i - men jeg kan nu godt lide at tjekke om det evt. kun er passordet der er forkert.
Avatar billede detox Nybegynder
18. februar 2005 - 00:20 #6
tigertool -> men på denne måde:

while( $row = mysql_fetch_array($query))
{
  $apass = $row['PASSWORD'];
}

overskriver du jo $apass for hvert gennemløb, hvilket var det oprindelige problem.
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:21 #7
Der er et WHERE statement hvilket vil sige at du kun får et password, eftersom der max findes en bruger med brugernavnet!
Avatar billede detox Nybegynder
18. februar 2005 - 00:22 #8
Hvorfor så lave en while løkke?
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:22 #9
behøves heller ikke. Men det er sent :)
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:23 #10
Desuden giver det jo ingen forskel om der er en while eller ej. Den while bliver kun kørt en enkelt gang!
Avatar billede detox Nybegynder
18. februar 2005 - 00:27 #11
Ok, pointen med at lave en WHERE bestemt forespørgsel er den røde tråd ;O)
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:29 #12
Korrekt. Skrev vist også at det skulle rettes til.
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:30 #13
Smider lige et svar for en sikkerhedsskyld :)
Avatar billede duqe Nybegynder
18. februar 2005 - 00:33 #14
Jeg har forsøgt mig med m_els's foreslag. Men får følgende fejl:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/www.x-road-user.dk/www/auth.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at /var/www/www.x-road-user.dk/www/auth.php:11) in /var/www/www.x-road-user.dk/www/auth.php on line 20

Jeg har uploadet koden på: http://www.x-road-user.dk/kode.txt

Fejlkode nr. 2 (header) har jeg set før, men fik det til at virke ved at putte min session_start(); øverst på siden. Hvorfor kommer den nu igen? :(
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:36 #15
Er Password ikke et fy-ord i MySQL?
Avatar billede duqe Nybegynder
18. februar 2005 - 00:37 #16
Det aner jeg intet om - men godt nok PASSWORD med uppercase i min mysql-tabel????
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:38 #17
Problemet er at der er en funktion i MySQL kaldet PASSWORD - prøv for sjov skyld at omdøbe det i tabellen og i SQL'en.
Avatar billede duqe Nybegynder
18. februar 2005 - 00:40 #18
Okay - det prøver jeg lige - er der ellers ikke noget i vejen med min kode (er næsten lige startet på det her)
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:41 #19
ellers prøv mit eksepmel :)
Avatar billede duqe Nybegynder
18. februar 2005 - 00:44 #20
Jeg har prøvet med dit eksempel tigertool, og min kode ser nu således ud:
ftp://x-road-user.dk/www/kode_tigertool.txt
Problemer er bare at man kan logge ind uden at skrive korrekt user og pass.
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:45 #21
Dødt link?
Avatar billede duqe Nybegynder
18. februar 2005 - 00:45 #22
Og man kan ikke logge ind når man skriver det rigtige login :D
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:45 #23
Jeg bruger selv mit lille script mange steder - og det virker fint.
Avatar billede duqe Nybegynder
18. februar 2005 - 00:45 #24
Hovsa.. det skal selvfølgelig være:
http://x-road-user.dk/kode_tigertool.txt
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:46 #25
jamen hvordan ser din tabel da ud?
Avatar billede duqe Nybegynder
18. februar 2005 - 00:47 #26
bruger varchar(20), password varchar(20)
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:49 #27
Så er der jo fejl i den SQL m_els skrev. der står jo brugernavn og ikke bruger!

Fordelen med mit script er at du faktisk kan tjekke på om brugeren findes og bare har indtastet forkert kodeord - eller om brugeren ikke findes overhovedet.
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:51 #28
Forresten..
$_SESSION['login'] = "false";
skrives:
$_SESSION['login'] = false; (hvis det er boolsk)
Avatar billede duqe Nybegynder
18. februar 2005 - 00:51 #29
Lige nu bruger jeg dit script, der er skrevet i http://x-road-user.dk/kode_tigertool.txt

www.x-road-user.dk - Login . Hvis du vil se det i praksis.
Avatar billede duqe Nybegynder
18. februar 2005 - 00:52 #30
Det er bevidst at false og true har "" om sig.
Avatar billede tigertool Nybegynder
18. februar 2005 - 00:58 #31
Prøv lige:
<?
session_start();

mysql_connect("mysql5.wannafind.dk", "x_road_use", "");
mysql_select_db("x_road_user_dk_db");

$query = mysql_query("SELECT password FROM admin WHERE bruger = '".$_POST['bruger']."';");
while( $row = mysql_fetch_array($query))
{
    $apass = $row['password'];
}

if (mysql_num_rows($query) > 0)
{
  if ($_POST['pass'] == $apass)
  {
    //Brugernavn og password er korrekt
    $_SESSION['login'] = "true";
    $_SESSION['user_in'] = $_POST['bruger'];
    header("Location: admin.php");
  }
  else
  {
    //Password er forkert - brugernavn rigtigt.
    $_SESSION['login'] = "false";
    header("Location: login.php");
  }
}
else
{
  //Brugernavnet eksisterer ikke
  $_SESSION['login'] = "false";
  header("Location: login.php");
}

?>
Avatar billede tigertool Nybegynder
18. februar 2005 - 01:05 #32
Virker det?
Avatar billede duqe Nybegynder
18. februar 2005 - 01:06 #33
Nej :(
Man kan ikke komme ind på admin.php ligemeget hvad. Jeg prøvede at skifte "password" i query til uppercase (PASSWORD som den står i mysql) og straks fik jeg nogle fejl.. Det kan være at du har ret med at password er et fy-ord. Jeg prøver lige at ændre det.
Avatar billede tigertool Nybegynder
18. februar 2005 - 01:07 #34
<?
session_start();

mysql_connect("mysql5.wannafind.dk", "x_road_use", "");
mysql_select_db("x_road_user_dk_db");

$query = mysql_query("SELECT password FROM admin WHERE bruger = '".$_POST['user']."';"); //<-- Fejl her, undskyld
while( $row = mysql_fetch_array($query))
{
    $apass = $row['password'];
}

if (mysql_num_rows($query) > 0)
{
  if ($_POST['pass'] == $apass)
  {
    //Brugernavn og password er korrekt
    $_SESSION['login'] = "true";
    $_SESSION['user_in'] = $_POST['user']; //<-- Fejl her, undskyld
    header("Location: admin.php");
  }
  else
  {
    //Password er forkert - brugernavn rigtigt.
    $_SESSION['login'] = "false";
    header("Location: login.php");
  }
}
else
{
  //Brugernavnet eksisterer ikke
  $_SESSION['login'] = "false";
  header("Location: login.php");
}

?>
Avatar billede tigertool Nybegynder
18. februar 2005 - 01:08 #35
Jeg har skrevet $_POST['bruger'] i scriptet du lige prøvede. Jeg postede lige et nyt - der burde faktisk stå: $_POST['user']! Min fejl - jeg kunne se det da jeg kiggede på html sourcen på din side.
Avatar billede duqe Nybegynder
18. februar 2005 - 01:10 #36
Yepsen - det lade jeg godt mærke til, og du gjordet også et andet sted men jeg har rettet det :D.. Vender lige tilbage 1 minut - tror næsten det virker nu.
Avatar billede duqe Nybegynder
18. februar 2005 - 01:12 #37
Det virker!!

Måske var det den 'PASSWORD' i SQL der drillede lige start?
Anyways det virker og nu kan jeg sove godt i nat :P..

Tusind tak for hjælpen (det er ikke nemt at være nybegynder :)).
Avatar billede tigertool Nybegynder
18. februar 2005 - 01:13 #38
Det har du ret i - vi har alle været der :)
Avatar billede duqe Nybegynder
18. februar 2005 - 01:14 #39
;) - Giver jeg dig ikke poitn ved at trykke "Accepter"? Der sker intet, andet end at siden reloades?
Avatar billede tigertool Nybegynder
18. februar 2005 - 01:14 #40
Du kan let implementere fejl-beskeder i det kode jeg har postet. Så ved brugeren at der er noget galt - og du kan let se forskel på om brugernavnet findes eller ej.
Avatar billede tigertool Nybegynder
18. februar 2005 - 01:15 #41
Du skal vist først vælge mig i listen i siden :)
Avatar billede duqe Nybegynder
18. februar 2005 - 01:16 #42
Det kan jeg godt se nu du siger det - Så sparede du mig sørme også for en masse bøvl der :)
Avatar billede tigertool Nybegynder
18. februar 2005 - 01:16 #43
Jep - tak for point :)
Avatar billede duqe Nybegynder
18. februar 2005 - 01:17 #44
Det er mig der takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester