Avatar billede smeier Nybegynder
22. oktober 2004 - 14:00 Der er 26 kommentarer og
1 løsning

ændre loginkald fra txt til mysql.

Jeg har følgende uddrag af min loginfunktion. Problemer er at jeg gerne vil ændre den til at tjecke og hente fra MySql istedet for en tekst fil. Går ud fra at jeg ikke bare kan ændre $txt = file("pass"); til en db kald, da den jo tæller ned gennem tekstfilen... eller hvad? nogen der kan hjælpe?


session_start();
//funktion til at tjekke om brugernavn og password findes og ligger på samme linie i pass filen
function tjeklogin($var1, $var2) {

$txt = file("pass");

$name = array();
$pas = array();

    for($i = 0; $i < count($txt); $i++) {
$get = explode("|", $txt[$i]);
$name[] = $get[0];
$pas[] = $get[1];
    }

if(in_array($var1, $name)) {

    for($a = 0; $a < count($name); $a++) {
    if($var1 !=$name[$a]) {
continue;
}else{

    if($var2 != chop($pas[$a])) { //chop fjerner linieskiftet, som "følger med" for hver ny linie i pass filen

return 1; //Brugernavnet findes, men forkert password

    }else{

return 2; //Brugenavn og password stemte, og ligger på samme linie

        }
    }
}
    }else{

return 0; //Brugernavnet findes ikke

    }
}
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:06 #1
<?php
session_start();

include("mysql_connection.php");


function tjeklogin($navn, $pass) {

    $sql = ("SELECT * FROM USERS WHERE brugernavn = '".$navn."' AND password = '".$pass."'")or die(mysql_error());
    if($sql){
        while($r = mysql_fetch_array($sql)){
            print "log in sgu : ".$r["brugernavn"];
        }
    }else{
        print "nej for fanden";
    }
}

tjeklogin($_POST["brugernavn"],$_POST["password"]);
?>

Sårn i den dur?
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:07 #2
tjaa hvis det funker så fint, skal lige tjecke.
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:08 #3
husk jeg har lavet en mysql_connection.php der skal indeholde forbindelsen til din database.

Formen der sender afsted sender med method="post" og har felterne <input type="password" name="password" value=""> og <input type="text" name="brugernavn" value="">

Tilsvarende 2 felter står i mysql_queryen - De skal så svarer til felterne i din database.
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:11 #4
mysql_connection.php kunne se sådan her ud :

<?php
$sql_host = "localhost"; // eller dit domænes database host
$sql_user = "smeier"; // sql brugernavn
$sql_passwd = "skatterdog"; // sql password
$db = "databasenSNavn";

$myconnect = mysql_connect($sql_host,$sql_user,$sql_passwd)or die (mysql_error());
mysql_select_db($db)or die (mysql_error());
?>
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:13 #5
ja ja det ved jeg godt. Ikke hunse. Det er sjovere at lære selv ;)
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:14 #6
og igen vil det selvfølgelig være en god idé lige at tjekke de artikler jeg linkede til i det andet spørgsmål.
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:14 #7
ok farmand ;-)
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:17 #8
En lille hunse ting mere ;-)

Vi indsætter lige LIMIT 0,1 da vi kun vil have én bruger ligegyldigt hvad. (men brugernavn bør være unikt)

$sql = ("SELECT * FROM USERS WHERE brugernavn = '".$navn."' AND password = '".$pass."' LIMIT 0,1")or die(mysql_error());
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:24 #9
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /hsphere/local/home/xxxxyyyy/spillesteder.dk/admin/intern/loginarray.php on line 14

  $sql = ("SELECT * FROM user WHERE user_name = '".$navn."' AND password = '".$pass."'")or die(mysql_error());
    if($sql){
        while($r = mysql_fetch_array($sql)){  <--- Linje 14
            print "log in sgu : ".$r["user_name"];
        }

Har tjecket kaldet. Det burde være rigigt. Ved du hvorfor den laver fejl her?
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:31 #10
har du indsat nogle brugere i databasen??

prøv evt :

    if(if(mysql_num_rows($sql) != 0){){
        while($r = mysql_fetch_array($sql)){
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:34 #11
Parse error: parse error, unexpected T_IF
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:35 #12
hov kom også til at skrive if inde i.

if(mysql_num_rows($sql) != 0){){
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:39 #13
Det jeg ikke forstår er, at i den gamle fil, sendte denne fil dig videre til login filen hvis man ikke var logget ind?!?!
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:40 #14
ligemeget. Det var længere nede i file, og selvfølgelig duer det ikke hvis sql kaldet ikke duer.
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:42 #15
Hvad gør den hvis jeg ikke har indtastet navn og pass, men går ind på siden alligevel? tror problemet ligger her. Den kan jo ikke kalde hvis .navn ikke eksisterer.
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:45 #16
<?php
session_start();

include("mysql_connection.php");


function tjeklogin($navn, $pass) {

    $sql = ("SELECT * FROM USERS WHERE brugernavn = '".$navn."' AND password = '".$pass."' LIMIT 0,1")or die(mysql_error());
    if(mysql_num_rows($sql) != 0){
        while($r = mysql_fetch_array($sql)){
            print "log in sgu : ".$r["brugernavn"];
            $_SESSION["login"] = $r["brugernavn"];
        }
    }else{
        header ("location:login.php");;
    }
}

if(!isset($_SESSION["login"])){
    tjeklogin($_POST["brugernavn"],$_POST["password"]);
}else{
    print "velkommen ".$_SESSION["login"];
}
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 14:46 #17
mangler lige at lukke den med ?>
Avatar billede smeier Nybegynder
22. oktober 2004 - 14:55 #18
Store problemer nu. Men tror det er fucked, jeg har gemt noget af filen og filerne for dig.

Smider 200 points i alt ind.
Her er filerne brugt:

http://d954977.u38.surftown.dk/admin/intern/login_igenigen.phps

http://d954977.u38.surftown.dk/admin/intern/logud_igenigen.phps

http://d954977.u38.surftown.dk/admin/intern/dologin_igenigen.phps

http://d954977.u38.surftown.dk/admin/intern/loginarray.phps

Hvis du ikke gider se på det mere forstår jeg det godt. Men er temmelig forvirret lige nu.
Men hvis det er så inkluderer jeg
<?php
include("loginarray.php");
tjekigen();
?>
i alle filer der skal beskyttes.
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 15:06 #19
VIGTIGT!!!

Kald IKKE din databse connection fil for .inc - gør du det så vil jeg kunne downloade den. Gør som jeg gjorde og kald den .php så bliver den parset af serveren og downloades ikke.

md5 krypterer du virkeligt brugernavnene så kan du jo aldrig se det igen :

if(tjeklogin($_POST["user_name"], md5($_POST["password"])))

Og hvorfor tjekker du på alle de sessions som slet ikke er sat. f.eks ON["okdu"]

if (!isset($_SESSION["navn"], $_SESSION["id"]) || $_SESSION["id"] != session_id()) {
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 15:12 #20
dine formfelter svarer heller ikke til det jeg skrev :

<form action="dologin_igenigen.php" method="post">
<input type="hidden" name="logind" value="logind">

Brugernavn:<br>
<input type="text" name="navn"><br>
Password:<br>
<input type="password" name="pass"><br>
<input type="submit" value="Log ind">
</form>

skulle være brugernavn og password
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 15:41 #21
lol jeg mangler da det vigtigste....

$sql = mysql_query("SELECT * FROM USERS WHERE brugernavn = '".$navn."' AND password = '".$pass."' LIMIT 0,1")or die(mysql_error());
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 15:59 #22
Så får du sgu det hele - jeg må ha kedet mig ;-)

<?php
// dette er forsiden.
include("sql.php");
include("login.php");

session_start();

$velkomst = tjeklogin();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<?php
print $velkomst;
?>
<br />
<form action="<?php $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="logind" value="logind">

Brugernavn:<br>
<input type="text" name="navn"><br>
Password:<br>
<input type="password" name="pass"><br>
<input type="submit" value="Log ind">
</form>


<br />
<a href="logout.php">logout.php</a>
<br/>
<a href="side2.php">link</a>
</body>
</html>


//////////////////////////////
//////////////////////////////
//////////////////////////////

<?php
// dette er side 2.
include("sql.php");
include("login.php");

session_start();

$velkomst = tjeklogin();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<?php
print $velkomst;
?>
<br /><br/>
<a href="logout.php">logout.php</a>
<br/>
<a href="side.php">link</a>
</body>
</html>

//////////////////////////////
//////////////////////////////
//////////////////////////////


<?php
//logout.php
session_start();
$_SESSION = array();
session_destroy();
header("Location:forside.php");
exit;
?>

//////////////////////////////
//////////////////////////////
//////////////////////////////

<?php

// login.php

function tjeklogin(){
    if(!isset($_SESSION["username"],$_SESSION["id"]) || $_SESSION["id"] != session_id){
        if(isset($_POST["navn"],$_POST["pass"])){
            return login($_POST["navn"],$_POST["pass"]);
        }else{
            return "Her skal du logge ind";
        // ovenstående liner kan erstattes med header("location:logud_igenigen.php"); husk så at have formen der.
        }
    }else{
        return "velkommen ".$_SESSION["username"];
    }
}

function login($navn, $pass) {
    $sql = mysql_query("SELECT * FROM users WHERE brugernavn = '".$navn."' AND password= MD5('".$pass."') LIMIT 0,1")or die(mysql_error());
    if(mysql_num_rows($sql) != 0){
        while($r = mysql_fetch_array($sql)){
            $_SESSION["username"] = $r["nick"];
            $_SESSION["id"] = session_id;
        }
        // return "YEAH MAN";
        header("location:$_SERVER[PHP_SELF]?".$r["brugernavn"]);
    }else{
        return "Forkert brugernavn eller password";
    }
}
?>

//////////////////////////////
//////////////////////////////
//////////////////////////////

Sider uden loginkrav fjerner du : $velkomst = tjeklogin();

slut bum finito
Avatar billede nikolajdu Nybegynder
22. oktober 2004 - 16:00 #23
og husk lige at ændre include("sql.php") til din connection fil.
Avatar billede smeier Nybegynder
24. oktober 2004 - 16:26 #24
Nårh ja forresten. Tak og smid et svar.
Avatar billede nikolajdu Nybegynder
24. oktober 2004 - 17:00 #25
oki doki :))

Håber du fik det til at dutte :)9
Avatar billede nikolajdu Nybegynder
24. oktober 2004 - 17:00 #26
doh :)
Avatar billede nikolajdu Nybegynder
24. oktober 2004 - 21:26 #27
tak for point :))
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