Avatar billede wosgam Nybegynder
30. april 2008 - 21:04 Der er 12 kommentarer og
1 løsning

Loginsystem vil ikke virke

hej er der nogle eksperter der ved hvorfor dette script ikke virker??

$brugernavn = $_POST['brugernavn'];
        $password = $_POST['password'];
        $linjer = file('brugere.txt');
        $tt = count($linjer) + 1;
       
        // Hvis filen med brugerne ikke er der så opret den
        if(!file_exists("brugere.txt")){$fext = fopen("brugere.txt","w+");fclose($fext);}
       
        // Start med at tjekke om brugeroplysningerne passer
        for($i=0;$i<$tt;$i++)
        {
            $side = explode("|",$linjer[$i]);
                if($brugernavn == $side[0])
                {
                print 'Inde i brugernavn. Password:  '.$password.' | '.$side[1].'<br>';
                    if($password == $side[1])
                    {
                        $valid = true;
                    }
                }
        }
       
        if($valid == true)
        {
        echo 'Du er nu logget ind.';
        }else{
        echo 'hh';
        }
Avatar billede w13 Novice
30. april 2008 - 21:19 #1
Hvilken del er det, der ikke bliver udført?
Avatar billede majbom Novice
30. april 2008 - 21:21 #2
hvad er det der ikke virker, skriver den hverken det ene eller andet, hvad er fejlen?
Avatar billede w13 Novice
30. april 2008 - 21:23 #3
Jeg ville nok tilføje en break; lige efter $valid=true; i øvrigt. Der er jo ingen grund til, at for-løkken fortsætter, når brugeren er fundet.
Avatar billede wosgam Nybegynder
30. april 2008 - 21:40 #4
fejlen er den at den kan godt logge ind med den anden bruger men ikke den første, det vil sige at den kan ikke tjekke første linje i filen tror jeg nok og i anden kan den godt. Her får i lige hele scriptet som det ser ud ind til videre:

<?php
ob_start(); // Gør så der ikke sker den typiske session fejl: headers already sent by...........
session_start(); // Siger at vi skal bruge sesioner
$session = $_SESSION['li']; // Lægger sesionen over i variablen $session
$sesbrugernavn = $_SESSION['brugernavn']; // Lægger sessionen brugernavn over i variablen brugernavn

echo '<center>'; // Laver et simpelt html tag

/*
STARTSIDE
*/
    if($session){echo 'Du er logget ind som: '.$sesbrugernavn.'';}elseif(!$_GET['login'] && !$session)
    {
        print '
        <h1>Login</h1>
        <form action="?login=ja" method="POST">
       
        Brugernavn: <input type="text" name="brugernavn">
        <br>
        Password: <input type="password" name="password">
        <br>
        <input type="submit" name="submit" value="Login">
        </form>';
    }
   
/*
CHECK LOGIN
*/
    if($_GET['login'] == 'ja' && !$session && isset($_POST['submit']))
    {
        $brugernavn = $_POST['brugernavn'];
        $password = $_POST['password'];
        $linjer = file('brugere.txt');
        $tt = count($linjer);
       
        // Hvis filen med brugerne ikke er der så opret den
        if(!file_exists("brugere.txt")){$fext = fopen("brugere.txt","w+");fclose($fext);}
       
        // Start med at tjekke om brugeroplysningerne passer
        for($i=0;$i<$tt;$i++)
        {
            $side = explode("|",$linjer[$i]);
                if($brugernavn == $side[0])
                {
               
                    if($password == $side[1])
                    {
                        $valid = true;
                        break;
                    }
                }
        }
       
        if($valid == true)
        {
        echo 'Du er nu logget ind.';
        }else{
        echo 'hh';
        }
    }
   
echo '<center/>'; // Laver et simpelt slut html tag for ovenstående center
   
ob_end_flush();
?>
Avatar billede dkfire Nybegynder
01. maj 2008 - 13:19 #5
Dit script, som det er nu, vil ikke virke med flere bruger fordi når du henter en linje fra din brugere.txt vil du i enden af linjen få en nylinje karakter med hvis der er flere linjer efter den linje du henter.
Du kan prøve at rette din script, således at du fjerner disse karaktere fra linjen.

Ret:
for($i=0;$i<$tt;$i++)
        {
            $side = explode("|",$linjer[$i]);
                if($brugernavn == $side[0])
                {
             
                    if($password == $side[1])
                    {
                        $valid = true;
                        break;
                    }
                }
        }
Til:
forarch( $linjer as $linje )
{
    $linjetrim = rtrim($linje);
    $side = explode("|",$linjetrim);
    if($brugernavn == $side[0] && $password == $side[1])
    {
        $valid = true;
        break;
    }
}
Avatar billede dkfire Nybegynder
01. maj 2008 - 13:22 #6
Og lige noget dokumentation:
rtrim fjerner forskellige ting fra enden af en streng. I dit tilfæle er strengen en linje fra din fil.
http://dk.php.net/manual/en/function.rtrim.php

Og grunden til du skal bruge den findes i forklaringen om file().
http://dk.php.net/manual/en/function.file.php
Avatar billede wosgam Nybegynder
03. maj 2008 - 19:45 #7
Tak til jer alle,

men specielt mange tusinde tak til dkfire,

du får points :)
Avatar billede dkfire Nybegynder
03. maj 2008 - 20:07 #8
Jamen så lægger jeg et svar. :-)
Avatar billede wosgam Nybegynder
03. maj 2008 - 21:13 #9
Ligger du lige et svar dkfire??
Avatar billede wosgam Nybegynder
03. maj 2008 - 21:14 #10
I kan se hvor langt jeg er noget på det ind til videre her:
http://loginsystem.magnusbm.dk
Avatar billede terke Nybegynder
04. maj 2008 - 11:03 #11
Har du overvejet at gemme brugere og kodeord i MySQL i stedet for en fil?
Avatar billede wosgam Nybegynder
04. maj 2008 - 19:01 #12
Terke,

nej faktisk ikke :)

fordi at jeg har det formål med dette login system at det skal laves uden.
Avatar billede terke Nybegynder
05. maj 2008 - 20:19 #13
Nu ved jeg godt at et loginsystem med sessions og MySQL ikke er det sikreste, men et system hvor brugere og kodeord ligger i en offentligt tilgængelig fil er bestemt ikke mere sikkert!

Jeg kan f.eks. se følgende fra din "bruger.txt"-fil:
prut|546b106fd63f9cd94551be5d8c15e234|ja
Ifølge et "rainbow table" over md5 hashkoder er kodeordet "prut"... Så nemt kunne jeg få den information frem.

Men det er selvfølgelig fair nok hvis du vil (eller er tvunget til at) lave det udenom en database :-)
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