Avatar billede foxskywalker Nybegynder
23. februar 2006 - 07:15 Der er 27 kommentarer og
2 løsninger

Login med txt fil skal være meget simepl

Hejsa Experter

Skal lave en side for min svigerfar og han vil gerne have en del af siden kræver login.

Jeg vil gerne have det sådan man kan logge ind og så tjekker siden en txt fil, for så kan han selv oprette nye brugere i den, og for det andet er jeg ikke lige så stærk i PHP :)

men der skal også være et tjek så man ikke kan komme ind på de sider som kræver login.

Er der nogen der kan hjælpe :)
Avatar billede jakobdo Ekspert
23. februar 2006 - 09:18 #1
Hvor mange logins skal der være?
Hvis vi "kun" snakker et login, så kunne du hardcode det ind i php koden.
Når brugeren har tastet korrekt login, så sæt en session:
$_SESSION['login'] = true;

Og på de sider hvor der kræves login, laver du tjekket:

<?php
session_start();
if($_SESSION['login'] == true)
echo "Velkommen til siden";
else
{
//Brugeren må ikke være her... vi sender ham/hende til forsiden.
header("Location: index.php");
exit();
}
Avatar billede domaz.dk Novice
23. februar 2006 - 10:11 #2
du kunne evt. os kigge lidt på .htaccess... det er noget nemmere nu hvor du selv siger at du ikk har så meget styr på php...

http://www.webcafe.dk/artikler/apache/htaccessintro/
Avatar billede coderdk Praktikant
23. februar 2006 - 11:31 #3
lav en logins.txt med brugernavn/password i dette format:

bruger:password
hejsa:testtest

Og så require denne i toppen:

<?php

    session_start();

    if ( empty( $_SESSION['user'] ) )
    {
        if ( empty( $_POST ) )
        {
            echo '
                <form method="post">
                    Username: <input type="text" name="user"><br>
                    Password: <input type="password" name="pass"><br>
                    <input type="submit" value="Login">
                </form>';
            exit;
        }
        else
        {
            $logins = array();
            $lines = file( "logins.txt" );
            foreach ( $lines as $line )
            {
                if ( strpos( $line, ':' ) > 0 )
                {
                    list( $user, $pass ) = split( ":", $line );
                    $logins[$user] = $pass;
                }
            }
            if ( array_key_exists( $_POST['user'], $logins ) && $logins[$_POST['user']] == $_POST['pass'] )
            {
                $_SESSION['user'] = $_POST['user'];
                header( 'location: ' . $_SERVER['REQUEST_URI'] );
                exit;
            }
        }
    }

?>

Ikke så sikkert :)
Avatar billede jakobdo Ekspert
23. februar 2006 - 11:33 #4
Hvis du vælger en txt-løsning, så skal du evt flytte filen uden for www diret.
Avatar billede coderdk Praktikant
23. februar 2006 - 11:35 #5
HELT enig med jakobdo! :)
Avatar billede domaz.dk Novice
23. februar 2006 - 11:44 #6
eller .htaccess beskytte den mappe du ligger txt-filen i... (:
Avatar billede jakobdo Ekspert
23. februar 2006 - 11:48 #7
Men så er htaccess jo allerede inde i billedet.
Og ingen tvivl, htaccess er nok hurtigst at sætte op.
Men foxskywalker's svigerfar selv redigere løbende?
MYSQL med en lille hjemmelavet backend må være vejen frem. :o)
Avatar billede domaz.dk Novice
23. februar 2006 - 11:58 #8
ja eller evt. bare en funktion så han selv kan skrive i txt-filen når han er logget ind...? der er mange muligheder... selv om mysql helt sikkert er den sikreste løsning...
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 10:44 #9
Nu betyder det ikke så meget at det ikke er så sikkert, det er bare en medlemsside til en cykelklub. Så det er bare så at folk ikke kan komme ind og se medlemmernes adresser ved en fejl, og den slags.

Coderdk>> den kode som du kommer med, virker den hvis der er flere forskellige bruger?
Avatar billede domaz.dk Novice
24. februar 2006 - 10:50 #10
foxskywalker:

jeps det gør den...
Avatar billede coderdk Praktikant
24. februar 2006 - 12:47 #11
ja formatet er brugernavn:kodeord - én på hver linje :)
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 13:01 #12
coderdk>> Nu sker der så bare det at ligegyldigt om jeg taster rigtigt eller forkert så kommer man videre til det der står på resten af siden?

Er der også en mulighed for at den kan huske at man er logget ind hvis der er flere sider man skal være logget ind for at kunne benytte?
Avatar billede coderdk Praktikant
24. februar 2006 - 13:06 #13
Ja, der mangler da en else:

<?php

    session_start();

    if ( empty( $_SESSION['user'] ) )
    {
        if ( empty( $_POST ) )
        {
            echo '
                <form method="post">
                    Username: <input type="text" name="user"><br>
                    Password: <input type="password" name="pass"><br>
                    <input type="submit" value="Login">
                </form>';
            exit;
        }
        else
        {
            $logins = array();
            $lines = file( "logins.txt" );
            foreach ( $lines as $line )
            {
                if ( strpos( $line, ':' ) > 0 )
                {
                    list( $user, $pass ) = split( ":", $line );
                    $logins[$user] = $pass;
                }
            }
            if ( array_key_exists( $_POST['user'], $logins ) && $logins[$_POST['user']] == $_POST['pass'] )
            {
                $_SESSION['user'] = $_POST['user'];
                header( 'location: ' . $_SERVER['REQUEST_URI'] );
                exit;
            }
            else
            {
                echo "Brugernavn eller password er forkert. Husk at der er forskel på store og små bogstaver! Både i brugernavn og password!";
                exit;
            }
        }
    }

?>

:) Den fil skal blot require's øverst på alle sider, den husker det hvis du er logget ind!
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 13:13 #14
Den er lige ved at være der nu, bortset selvfølgelig fra at den ikke viser noget før man trykker opdater bagefter. Input boksene forsvinder bare når man trykker login
Avatar billede coderdk Praktikant
24. februar 2006 - 13:21 #15
Hmm underligt - Den burde egentlig selv reloade siden:

header( 'location: ' . $_SERVER['REQUEST_URI'] );

Du kan prøve, for sjov, at udskifte $_SERVER['REQUEST_URI'] med en anden URL...
Avatar billede jakobdo Ekspert
24. februar 2006 - 13:34 #16
Hvad med: header( 'location: ' . $_SERVER['PHP_SELF'] ); ??
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 17:38 #17
Samme problem ligeyldigt hvad jeg gør.

tjek:

http://www.dannymator.dk/login/logintest.php

for at se hvad den gør, har indsat en anden URL hvor der stod 'REQUEST_URI'
Når du har logget ind tryk da på opdater og se hvad der sker

bruger/pass: test
Avatar billede coderdk Praktikant
24. februar 2006 - 17:54 #18
Og du er sikker på, at filen er det *første* der bliver set af php? Ikke engang et enkelt lille mellemrum? Det kan jo være at headers bliver skrevet ud, men at din error_reporting er sat så du ikke ser fejlmeddelelsen?
Avatar billede coderdk Praktikant
24. februar 2006 - 17:59 #19
Er du sikker på at du gør det rigtigt? Hvis du har smidt min kode ind i logcheck.php så skal logintest.php se sådan ud:

<?php

  require_once( 'logcheck.php' );

  echo "Dette ser du kun hvis du er logget ind!";

?>

Desuden tror jeg at du måske skal rette linjen:

  $logins[$user] = $pass;

til:

  $logins[$user] = trim( $pass );
Avatar billede coderdk Praktikant
24. februar 2006 - 18:03 #20
Prøv denne kode.

logcheck.php

<?php

    session_start();
   
    if ( $_SERVER['SCRIPT_FILENAME'] == __FILE__ )
    {
        die( 'Denne fil kan ikke kaldes direkte. Brug require_once() på en anden side.' );
    }

    if ( empty( $_SESSION['user'] ) )
    {
        if ( empty( $_POST ) )
        {
            echo '
                <form method="post">
                    Username: <input type="text" name="user"><br>
                    Password: <input type="password" name="pass"><br>
                    <input type="submit" value="Login">
                </form>';
            exit;
        }
        else
        {
            $logins = array();
            $lines = file( "logins.txt" );
            foreach ( $lines as $line )
            {
                if ( strpos( $line, ':' ) > 0 )
                {
                    list( $user, $pass ) = split( ":", $line );
                    $logins[$user] = trim( $pass );
                }
            }
            if ( array_key_exists( $_POST['user'], $logins ) && $logins[$_POST['user']] == $_POST['pass'] )
            {
                $_SESSION['user'] = $_POST['user'];
                header( 'location: ' . $_SERVER['REQUEST_URI'] );
                exit;
            }
            else
            {
                echo "Brugernavn eller password er forkert. Husk at der er forskel på store og små bogstaver! Både i brugernavn og password!";
                exit;
            }
        }
    }

?>

logintest.php:

<?php

  require_once( 'logcheck.php' );

  echo "Dette ser du kun hvis du er logget ind!";

?>
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 20:02 #21
Hehe samme problem, input boksene forsvinder og man skal reloade for at se siden. (Har brugt den sidste kode du skrev).

http://www.dannymator.dk/test/logintest.php
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 20:02 #22
Bruger og pass stadig: test
Avatar billede coderdk Praktikant
24. februar 2006 - 20:14 #23
Det lyder underligt. Jeg har lige testet på min egen server, og der virker det fint. Jeg kunne reproducere din fejl, hvis du kaldte logcheck direkte...

Prøv lige, i bunden af hver fil, før ?> at skrive:

echo __FILE__ . ":<br>"; highlight_file( __FILE__ );

Det ser altså ud som om at der skrives noget ud før logcheck.php bliver kaldt... Sessions virker heller ikke.
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 20:58 #24
Samme fejl igen, men efter jeg trykkede opdater, kom dette frem:

/hsphere/local/home/danny/dannymator.dk/test/logcheck.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>

<?php

    session_start();
   
    if ( $_SERVER['SCRIPT_FILENAME'] == __FILE__ )
    {
        die( 'Denne fil kan ikke kaldes direkte. Brug require_once() på en anden side.' );
    }

    if ( empty( $_SESSION['user'] ) )
    {
        if ( empty( $_POST ) )
        {
            echo '
                <form method="post">
                    Username: <input type="text" name="user"><br>
                    Password: <input type="password" name="pass"><br>
                    <input type="submit" value="Login">
                </form>';
            exit;
        }
        else
        {
            $logins = array();
            $lines = file( "logins.txt" );
            foreach ( $lines as $line )
            {
                if ( strpos( $line, ':' ) > 0 )
                {
                    list( $user, $pass ) = split( ":", $line );
                    $logins[$user] = trim( $pass );
                }
            }
            if ( array_key_exists( $_POST['user'], $logins ) && $logins[$_POST['user']] == $_POST['pass'] )
            {
                $_SESSION['user'] = $_POST['user'];
                header( 'location: ' . $_SERVER['REQUEST_URI'] );
                exit;
            }
            else
            {
                echo "Brugernavn eller password er forkert. Husk at der er forskel på store og små bogstaver! Både i brugernavn og password!";
                exit;
            }
        }
    }
    echo __FILE__ . ":<br>"; highlight_file( __FILE__ );

?>


</body>
</html>
Dette ser du kun hvis du er logget ind!/hsphere/local/home/danny/dannymator.dk/test/logintest.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title></head>

<body>

<p>
<?php

  require_once( 'logcheck.php' );

  echo "Dette ser du kun hvis du er logget ind!";
echo __FILE__ . ":<br>"; highlight_file( __FILE__ );
?>
</p>
</body>
</html>
Avatar billede coderdk Praktikant
24. februar 2006 - 21:02 #25
Hvordan har du sat det ind? Hvor kommer den HTML fra over? Som jeg har skrevet skal logcheck require's aller, ALLER øverst i filen, der må under INGEN omstændigheder bliver skrevet noget ud før den, ikke engang et mellemrum...
Avatar billede coderdk Praktikant
24. februar 2006 - 21:03 #26
Og i logcheck.php skal der INTET være før den første <?php
Avatar billede foxskywalker Nybegynder
24. februar 2006 - 21:12 #27
Jeg er ikke helt med skal det ikke stå i body'en?
Avatar billede coderdk Praktikant
24. februar 2006 - 21:27 #28
Det skal ikke være i logcheck.php (well, det kan det godt, men så skal det stå de steder hvor der bliver skrevet noget ud). Det må godt stå i logintest.php, men EFTER <?php require_once( 'logcheck.php' ); ?>
Avatar billede foxskywalker Nybegynder
04. oktober 2006 - 10:18 #29
Hmm det virker vist delvist
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