Top
Phpuniverset logo
 
930 banner

INDHOLD

Forside

Script libary

Job annoncer

Tips og Tricks

Konkurrence

Downloads

Dokumenter

Forum

Online udviklere


ARTIKLER

CSS

Diverse

E-handel / annoncer

Grafik

Html

Internet

Javascript

Linux

PHP/MySQL

Programmer

Flash

Søgemaskiner

Windows

C / C++


INFO

Information

Annoncering

Kontakt

Forside Forum PHP, mysql Mit login virker ikke

Mit login virker ikke


 

Mit login virker ikke

tage jørgensen  

Hej jeg har forsøgt mig med et login som er lavet af Randi H. på Udviklere.dk

"Fra begynder til login"

Jeg kan bare ikke komme videre til user.php, som jeg skal når jeg bliver loget ind.
Den skriver at brugeren ikke eksisterer, men det gør brugeren, når jeg går ind i
phpmyadmin og kontrollerer.
Login er delt i  en htm-del og en php-del.
Håber der er en herinde der kan finde frem til fejlen.

    <?php
    session_start
();
    
mysql_connect("localhost""root");
    
mysql_select_db("xxxx");
    
$bruger $_POST["brugernavn"];
    
$pass $_POST["password"];
    
$error "";
    
$userQuery mysql_query("SELECT id,brugernavn,password FROM brugere WHERE
brugernavn='
$bruger'");
    if(
mysql_num_rows($userQuery) != 1)
    {
    
$error .= "Brugeren eksisterer ikke.<br>";
    }
    else
    {
    
$userArray mysql_fetch_array($userQuery);
    if(
$userArray[""] != MD5($pass))
    {
    
$error .= "Password og brugernavn passer ikke sammen.<br>";
    }
    }
    if(
$error != "")
    {
    echo 
$error "<a href=\"javascript:history.back(-1);\">Tilbage</a>";
    }
    else
    {
    
$_SESSION["logged_in"] = 1;
    
$_SESSION["user_id"] = $userArray["id"];
    
header("Location: user.php");
    }
    
?>



Dato : 15.07.2011, 23:33

Visninger : 1785

Points : 150

 

Hej Tage,

Jeg kan med sikkerhed sige at der ikke er fejl i din kode. Den måde du har lavet det på,
kan undre mig, men så længe det virker, er det jo ligemeget. Dog vil jeg gøre dig
opmærksom på, at det ikke er specielt sikkert. Hvis du har tænkt dig at bruge det på
et site, bør du sørge for at eliminere "SQL injection", ved at validere indholdet fra
din form, inden du sender det videre til databasen.

Nu har du ikke givet os muligheden for at se på din HTML form, men det må være der
problemet ligger. Enten hedder dit tekstfelt til brugernavnet ikke "brugernavn" eller
også sender du indholdet via GET og ikke POST. Hvis du er sikker på at dit tekstfelt
hedder det rigtige, kan du evt. skifte $_POST ud med $_REQUEST. $_REQUEST modtager nemlig
indholdet, uanset om det er sendt via GET eller POST.

Jeg kan desværre ikke hjælpe dig yderligere, da jeg ikke har adgang til alle filer, og
ikke kan se strukturen på din database. :)


Dato : 18.07.2011, 18:02

Godkendt svar af : Nicklas Smed  

 

Jeg har copy pastet fra denne artikel:

http://www.udvikleren.dk/artikler/340/fra-begynder-til-login/

og HTML delen ser således ud:

    <html>
    <head>
    <title>Login</title>
    </head>
    <body>
    <h1>Login</h1>
    <form action="login.php" method="post">
    Brugernavn: <input type="text" name="brugernavn">
    <br>
    Password: <input type="password" name="password">
    <br>
    <input type="submit" value="Opret">
    </form>
    </body>
    </html>

tage


Dato : 19.07.2011, 11:20

Kommentar af : tage jørgensen  

 

Du efterspurgte også min DB struktur =

Server: localhost Database: slaegt
brugere
Tabel kommentarer: InnoDB free: 4096 kB
Feltnavn    Datatype     Nulværdi  Standardværdi  Kommentarer
id          int(11)      Nej
brugernavn  varchar(255) Nej
password    varchar(255) Nej

den ligger i øjeblikket kun på min arbejdsserver.

Men jeg lægger lige en test op på min webserver. Den fungerr nok først i morgen.


Dato : 19.07.2011, 23:00

Kommentar af : tage jørgensen  

 

Hvordan er din bruger oprettet ? 
Har du oprettet brugeren med MD5 password kryptering ? For ellers ligger problemet der :)

Jeg bruger selv samme stykke kode som login, og det virker hos mig.

Du kan lige se hele min kode her:

<?php
   session_start
();
  
    include(
"db.php");
  
   
$bruger mysql_real_escape_string($_POST["username"]);
   
$pass mysql_real_escape_string($_POST["password"]);
   
$error "";
  
   
$userQuery mysql_query("SELECT id,username,password FROM users WHERE
username='
$bruger'");
  
   if(
mysql_num_rows($userQuery) != 1)
   {
   
$error .= "Brugeren eksisterer ikke.<br>";
   }
   else
   {
   
$userArray mysql_fetch_array($userQuery);
  
   if(
$userArray["password"] != MD5($pass))
   {
   
$error .= "Password og brugernavn passer ikke sammen.<br>";
   }
   }
   
    if(
$error != "")
   {
   echo 
$error "<a href=\"javascript:history.back(-1);\">Tilbage</a>";
   }
   else
   {
   
$_SESSION["logged_in"] = 1;
   
$_SESSION["user_id"] = $userArray["id"];
   
$_SESSION["username"] = $bruger;
   echo 
'<script> document.location="http://localhost:8888/"; </script>';
   }
   
   
   
?>


Du kan evt. prøve at ændre den sidste linke fra header til echo '<script>' osv som jeg
har gjort det. Jeg havde også også problemer med header funktionen :)


Dato : 20.07.2011, 11:06

Afvist svar af : Christian Jensen  

 

Hej Tage,

Christian kommer med et godt forslag, men hvis du modtager fejlen "Brugeren eksisterer
ikke", så er MD5 krypteringen ikke det eneste problem. Anyway, så kan jeg via Christians
kode, se at du mangler nogle ting i din egen. Jeg har omskrevet jeres struktur lidt, da
den ser lidt mærkelig ud, og egentlig ikke giver specielt meget mening, uanset om det
virker eller ej.

Christian, du har ret i at man godt kan opleve problemer med funktionen header(), men de
er lette at slippe af med hvis de opstår. Tage skriver dog, at han modtager fejlen
"Brugeren eksisterer ikke". Hvis header() funktionen gav problemer, ville PHP give ham en
fejl. Kan ikke helt huske hvad der står, men det er noget med "Headers have already been
sent ...". :)

<!DOCTYPE HTML>

<html>
    <head>
        <meta charset="UTF-8" />
        <title>Login</title>
    </head>
    <body>
        <h1>Login</h1>
        <form action="login.php" method="post">
            <label for="brugernavn">Brugernavn</label>
            <input type="text" id="brugernavn" name="brugernavn" /><br />
            <label for="password">Password</label>
            <input type="password" id="password" name="password" /><br />
            <button type="submit" id="login-submit">Login</button>
        </form>
    </body>
</html>

<?php
    
if(isset($_POST['login-submit'])){
        
$dbCon mysql_connect("localhost""root");
        
mysql_select_db("table"$dbCon);
        
        
$brugernavn mysql_real_escape_string($_POST['brugernavn']);
        
$password md5(mysql_real_escape_string($_POST['password']));
        
        
$query mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");
        if(
mysql_num_rows($query) == 1){
            
$result mysql_fetch_array($query);
            if(
$password != $result['password']){ $error "Password og brugernavn passer ikke
sammen."
; }
        }
        else{ 
$error "Brugeren eksisterer ikke."; }
        
        if(!isset(
$error)){
            
session_start();
            
$_SESSION['logged_in'] = true;
            
$_SESSION['user_id'] = $result['id'];
            
$_SESSION['username'] = $brugernavn;
            
            
header("Location: user.php");
        }
        else{ echo 
$error "<a href=\"#\" onclick=\"history.back(-1);\">Tilbage</a>"; }
        
        
mysql_close($dbCon);
    }
?>


Dato : 20.07.2011, 15:54

Afvist svar af : Nicklas Smed  

 

Det kræver så at han har aktiveret fejlvisning i PHP, selvfølgelig. ;)

Dato : 20.07.2011, 15:58

Kommentar af : Nicklas Smed  

 

Hej Christian og Nicklas

Tak for inputene. Det vil jeg forsøge mig med når jeg kommer hjem.

Her er et link hvor i kan se min php opsætning:

http://wanthai.dk/phpinfo.php

Og her er min testside for login:

http://tage.wanthai.dk/test/forsiden.html

Niclas, når jeg ser på din opstilling ser det ud som om du har både html delen og php
delen på samme document? Dem har jeg på to, en htm og en php side.

har et cms kørende med admin login og der er der ingen problemer, hvorfor jeg har
mistanke til MD5 passwors'et. Men jeg er selvlært så jeg har ikke noget erfaring der kan
hjælpe mig. Derfor er det så meget vigtigere at der er nogen på et forum som dette der
er parat til at hjælpe.


Dato : 20.07.2011, 17:52

Kommentar af : tage jørgensen  

 

Hej Tage,

Skrev bare både HTML formen og PHP koden i 1 indlæg. Det betyder ikke at det skal være
i samme fil. Skrev bare HTML formen ind, fordi jeg har ændret på den. Det eneste der er
ændret i selve funktionaliteten er, at jeg har givet knappen et ID. Hvilket der bruges i
PHP-koden til at tjekke om, der overhovedet er blevet klikket på knappen (altså om der
overhovedet er sendt data videre), eller om man bare har anmodet om at få login.php med
det samme.

Glemte det selv, men du bør nok sætte det her ind i slutningen af PHP koden:

<?php
    
if(isset($_POST['login-submit'])){
        
// ...
    
}
    else{
        echo 
"Der blev ikke sendt nogen data.";
    }
?>


Dato : 20.07.2011, 18:04

Kommentar af : Nicklas Smed  

 

Den tilføjelse du foreslog Nicklas var fin, nu kan jeg se at "Der blev ikke sendt nogen
data." 

Så hvad gør jeg nu?


Dato : 20.07.2011, 22:36

Kommentar af : tage jørgensen  

 

Hej Tage,

Det er min fejl. Skrev det sådan lidt hurtigt, så jeg har selvfølgelig selv lavet fejl.
Hvis du benytter det jeg har skrevet herunder, så burde du ikke støde på flere
problemer:




HTML:

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8" />
        <title>Login</title>
    </head>
    <body>
        <h1>Login</h1>
        <form action="login.php" method="post">
            <label for="brugernavn">Brugernavn</label>
            <input type="text" id="brugernavn" name="brugernavn" /><br />
            <label for="password">Password</label>
            <input type="password" id="password" name="password" /><br />
            <input type="hidden" id="login-submit" name="login-submit" />
            <button type="submit">Login</button>
        </form>
    </body>
</html>




PHP:

<?php
    
if(isset($_POST['login-submit'])){
        
$dbCon mysql_connect("localhost""root");
        
mysql_select_db("brugere"$dbCon);
        
        
$brugernavn mysql_real_escape_string($_POST['brugernavn']);
        
$password md5(mysql_real_escape_string($_POST['password']));
        
        
$query mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");
        if(
mysql_num_rows == 1){
            
$result mysql_fetch_array($query);
            if(
$password != $result['password']){
                
$error "Password og brugernavn passer ikke sammen!";
            }
        }
        else{ 
$error "Brugeren eksisterer ikke!"; }
        
        if(!isset(
$error)){
            
session_start();
            
$_SESSION['logged_in'] = true;
            
$_SESSION['user_id'] = $result['id'];
            
$_SESSION['username'] = $result['brugernavn'];
            
            
header("Location: user.php");
        }
        else{ echo 
$error "&nsbp;&nbsp;<a href=\"#\"
onclick=\"history.back(-1);\">Tilbage</a>"
; }
    }
    else{ echo 
"Der blev ikke sendt nogen data."; }
?>


Dato : 21.07.2011, 09:03

Afvist svar af : Nicklas Smed  

 

Alt du så mangler at sørge for er, at de brugernavne der ligger i databasen, har været
igennem funktionen mysql_real_escape_string(), inden de blev lagt ind i databasen. Og at
dine passwords også lige er blevet md5() krypteret inden de blev lagt ind. ;)


Dato : 21.07.2011, 09:08

Kommentar af : Nicklas Smed  

 

Kan du ikke vise mig din indsæt og opret sider, for jeg kan har ikke erfaring med
mysql_real_escape_string()

Ellers prøv at oprette dig her:

http://tage.wanthai.dk/Test/Forsiden.html


Dato : 21.07.2011, 10:56

Kommentar af : tage jørgensen  

 

Login


HTML:

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8" />
        <title>Login</title>
    </head>
    <body>
        <h1>Login</h1>
        <form action="login.php" method="post">
            <label for="brugernavn">Brugernavn</label>
            <input type="text" id="brugernavn" name="brugernavn" /><br />
            <label for="password">Password</label>
            <input type="password" id="password" name="password" /><br />
            <input type="hidden" id="login-submit" name="login-submit" />
            <button type="submit">Login</button>
        </form>
    </body>
</html>




PHP:

<?php
    
if(isset($_POST['login-submit'])){
        
// Erstat "table" med hvadend din table hedder.
        
$dbCon mysql_connect("localhost""root");
        
mysql_select_db("table"$dbCon);
        
        
$brugernavn mysql_real_escape_string($_POST['brugernavn']);
        
$password md5(mysql_real_escape_string($_POST['password']));
        
        
// Erstat "table" med hvadend din table hedder.
        
$query mysql_query("SELECT * FROM table WHERE brugernavn = '$brugernavn'");
        if(
mysql_num_rows($query) == 1){
            
$result mysql_fetch_array($query);
            if(
$password != $result['password']){
                
$error "Password og brugernavn passer ikke sammen!<br />\n";    
            }
        }
        else{ 
$error "Brugeren eksisterer ikke!<br />\n"; }
        
        if(!isset(
$error)){
            
session_start();
            
$_SESSION['logged_in'] = true;
            
$_SESSION['user_id'] = $result['id'];
            
$_SESSION['username'] = $result['brugernavn'];
            
            
header("Location: user.php");
        }
        else{
            echo 
$error "<a href=\"#\" onclick=\"history.back(-1);\">Tilbage</a>";
        }
        
        
mysql_close($dbCon);
    }
    else{
        echo 
"Der blev ikke sendt nogen data!<br />\n";
        echo 
"<a href=\"#\" onclick=\"history.back(-1);\">Tilbage</a>";
    }
?>


Dato : 21.07.2011, 15:45

Afvist svar af : Nicklas Smed  

 

Opret


HTML:

<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8" />
        <title>Opret</title>
    </head>
    <body>
        <h1>Opret Bruger</h1>
        <form action="opret.php" method="post">
            <label for="brugernavn">Brugernavn</label>
            <input type="text" id="brugernavn" name="brugernavn" /><br />
            <label for="password" id="password" name="password" />
            <input type="password" id="password" name="password" /><br />
            <label for="rpassword">Gentag password</label>
            <input type="password" id="rpassword" name="rpassword" /><br />
            <input type="hidden" id="opret-submit" name="opret-submit" />
            <button type="submit">Opret</button>
        </form>
    </body>
</html>




PHP:

<?php
    
if(isset($_POST['opret-submit'])){
        
// Erstat "table" med hvadend din table hedder.
        
$dbCon mysql_connect("localhost""root");
        
mysql_select_db("table"$dbCon);
        
        
$brugernavn mysql_real_escape_string($_POST['brugernavn']);
        
$password md5(mysql_real_escape_string($_POST['password']));
        
$rpassword md5(mysql_real_escape_string($_POST['rpassword']));
        
        if(!empty(
$brugernavn) && !empty($password) && !empty($rpassword)){
            
// Erstat "table" med hvadend din table hedder.
            
$query mysql_query("SELECT id FROM table WHERE brugernavn = '$brugernavn'");
            if(!
mysql_num_rows($query)){
                if(
$password == $rpassword){
                    
// Erstat table med hvadend din table hedder.
                    
mysql_query("INSERT INTO table (brugernavn, password) VALUES ('$brugernavn',
'
$password')");
                    
                    
header("Location: login.php");
                }
                else{ 
$error "Dine passwords er ikke ens!<br />\n"; }
            }
            else{ 
$error "Denne bruger eksisterer allerede!<br />\n"; }
        }
        else{ 
$error "Ikke alle felter blev udfyldt!<br />\n"; }
        
        if(isset(
$error)){
            echo 
$error "<a href=\"#\" onclick=\"history.back(-1);\">Tilbage</a>";
        }
        
        
mysql_close($dbCon);
    }
    else{
        echo 
"Der blev ikke sendt nogen data!<br />\n";
        echo 
"<a href=\"#\" onclick=\"history.back(-1);\">Tilbage</a>";
    }
?>


Dato : 21.07.2011, 15:46

Afvist svar af : Nicklas Smed  

 

hej og tak for indsatsen, men jeg kan ikke få selve logind delen til at virke. men jeg
godtager jeres svar, og igen rigtigt mange tak.


Dato : 13.08.2011, 21:56

Kommentar af : tage jørgensen  




Login for at skrive et indlg :



   Brugernavn

Password
 

+ Opret en ny Bruger, Klik her

+ Glemt brugernavn/password

 

Send Artikel/anmeldelse til: phpuni@phpuniverset.dk

Tilbage til oversigt

Phpuniverset's politik om personlige oplysninger, artikler & Koder Phpuniverset er optimeret til Mozilla 1024 * 768 Phpuniverset version: 3.0 beta
Webhost : Ignesco.dk

Bund