Avatar billede whoot Nybegynder
01. november 2007 - 21:04 Der er 41 kommentarer og
1 løsning

Find en fejl

Halløj alle eksperter!

Jeg sidder og roder med noget PHP, og jeg kan SIMPELTHEN ikke se min fejl! :D

Derfor søger jeg hjælp til at finde den.

formular.htm
----------------------------------------------------------------
<html>
<head>
<title>Loginformular</title>
</head>
<body>
<form name="min form" id="min form" method="post" action="check.php">
Brugernavn: <input type="text" name="brugernavn"><br>
Kodeord: <input type="password" name="kodeord">
<input type="submit" name="login" value="Login">
</form>
</body>
</html>
----------------------------------------------------------------
----------------------------------------------------------------




check.php
----------------------------------------------------------------
<?php
session_start();
$link = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("databasenavn", $link);

if(empty($_POST['brugernavn']) || empty($_POST['kodeord']))
{
    header("location. formular.htm");
    exit;
}
else
{
    $user = mysql_real_escape_string($_POST['brugernavn']);
    $pass = mysql_real_escape_string($_POST['kodeord']);
    $query = mysql_query("SELECT * FROM login_system WHERE usr_name='".$user."' AND usr_pass = '".$pass."' LIMIT 1") or die("Fejl 1");
    if(mysql_num_rows($query) == '1'))
    {
        $_SESSION['brugernavn'] = $_POST['brugernavn'];
        header("location: hemligside.php");
    }
    else
    {
        header("location. formular.htm");
        exit;
    }
}
?>
----------------------------------------------------------------
----------------------------------------------------------------




hemligside.php
----------------------------------------------------------------
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Hemligside</title>
</head>

<body>
<?
//Starter endnu engang sessionerne øverst på siden, samt forbinder til databasen
session_start();
$link = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("databasenavn", $link);

//Tjekker om man er logget ind
if(!empty($_SESSION['brugernavn']))
{
//Laver en query der finder ens brugerid i databasen
$query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_SESSION['brugernavn'] ."'") or die(mysql_error());
$row = mysql_fetch_assoc($query);
//Man er logget ind, og kan derfor se det hemlige indhold
echo "Dit brugerid er: ". $row['id'];
}
else
{
//Brugeren er ikke logget ind
echo "Du er ikke logget ind. Du skal ikke prøve at snyde på min hjemmeside!";
}

?>
</body>

</html>
----------------------------------------------------------------
----------------------------------------------------------------
Avatar billede nielle Nybegynder
01. november 2007 - 21:10 #1
Hvad går fejlen ud på?
Avatar billede whoot Nybegynder
01. november 2007 - 21:11 #2
Siden er hvid :S  - der kommer slet ikke noget output eller videreførsel
Avatar billede nielle Nybegynder
01. november 2007 - 21:16 #3
Ser denne linje:

$link = mysql_connect("server", "brugernavn", "kodeord");

sådan ud i virkeligheden, eller der det dik som har maskeret dine loginoplysninger?
Avatar billede whoot Nybegynder
01. november 2007 - 21:17 #4
Jeg har maskeret mine oplysninger :)
Avatar billede nielle Nybegynder
01. november 2007 - 21:18 #5
Denne:

header("location. formular.htm");

skal rettes:

header("location: formular.htm");
Avatar billede nielle Nybegynder
01. november 2007 - 21:19 #6
Begge steder...
Avatar billede whoot Nybegynder
01. november 2007 - 21:20 #7
Tak, men stadig samme resultat :(
Avatar billede nielle Nybegynder
01. november 2007 - 21:23 #8
Der er en ) for meget i denne:

if(mysql_num_rows($query) == '1'))

Bør rettes til:


if (mysql_num_rows($query) == 1)
Avatar billede whoot Nybegynder
01. november 2007 - 21:25 #9
tak, jeg tror det virker nu :) -- kan ikke logge ind, men tror selve den side virker nu.
Avatar billede nielle Nybegynder
01. november 2007 - 21:28 #10
Hvad mener du med at du ikke kan logge ind? Hvad sker der?
Avatar billede whoot Nybegynder
01. november 2007 - 21:30 #11
Jeg bliver smidt tilbage til formular.htm... hmm..
Avatar billede nielle Nybegynder
01. november 2007 - 21:37 #12
Så må du heller tjekke efter at din SQL sætning faktisk indeholder det du forbventer, samt at din database svare til den.
Avatar billede whoot Nybegynder
01. november 2007 - 21:38 #13
ja, det har jeg gjort.. :S Synes det ser rigtigt ud for mig...
Avatar billede whoot Nybegynder
01. november 2007 - 21:43 #14
har du en msn vi kan skrive over? det er lidt lettere
Avatar billede nielle Nybegynder
01. november 2007 - 21:43 #15
Det er ikke nok at kidde på koden - prøv at udskrive den:

<?php
session_start();

$link = mysql_connect("server", "brugernavn", "kodeord");
mysql_select_db("databasenavn", $link);

if (empty($_POST['brugernavn']) || empty($_POST['kodeord'])) {
    header("location: formular.htm");
    exit;
} else {
    $user = mysql_real_escape_string($_POST['brugernavn']);
    $pass = mysql_real_escape_string($_POST['kodeord']);

    $sql = "SELECT * FROM login_system WHERE usr_name='$user' AND usr_pass = '$pass' LIMIT 1";
    echo "DEBUG: $sql<br>";
    exit;

    $query = mysql_query($sql) or die("Fejl 1");
    if (mysql_num_rows($query) == 1) {
        $_SESSION['brugernavn'] = $_POST['brugernavn'];
        header("location: hemligside.php");
        exit;
    } else {
        header("location: formular.htm");
        exit;
    }
}
?>
Avatar billede nielle Nybegynder
01. november 2007 - 21:44 #16
Jeg bruger ikke MSN.
Avatar billede nielle Nybegynder
01. november 2007 - 21:44 #17
kidde => kigge
Avatar billede whoot Nybegynder
01. november 2007 - 21:48 #18
Svaret er:
DEBUG: SELECT * FROM database WHERE usr_name='WhOOt, 5c' AND usr_pass = '6123' LIMIT 1
Avatar billede nielle Nybegynder
01. november 2007 - 21:54 #19
Og hvad sker der hvis du afproøver den SQL kommando direkte i din phpmyadmin?
Avatar billede whoot Nybegynder
01. november 2007 - 21:56 #20
MySQL returnerede ingen data (fx ingen rækker). (Forepørgsel tog 0.0011 sek) :S
Avatar billede whoot Nybegynder
01. november 2007 - 21:58 #21
kan det have noget med kommaet at gøre? :s at det ikke kan være i sql'en?

usr_name er defineret som longtext.
Avatar billede nielle Nybegynder
01. november 2007 - 21:59 #22
Så er det vel ikke så underligt at du ikke kan logge ind?
Avatar billede nielle Nybegynder
01. november 2007 - 22:00 #23
Det kan godt være et komma på den plads. Men du skal jo have den værdi, og med det komma på den plads, i din database før at det giver mening.
Avatar billede whoot Nybegynder
01. november 2007 - 22:03 #24
Ja, men det har jeg også.. :S
Avatar billede nielle Nybegynder
01. november 2007 - 22:04 #25
Hvad sker der hvis du fjerner din LIMIT 1?
Avatar billede whoot Nybegynder
01. november 2007 - 22:06 #26
Det bliver det samme.. :(
Avatar billede nielle Nybegynder
01. november 2007 - 22:06 #27
(en lille note om navne: Du bør ikke kalde din tabel for 'database'; din database er faktisk samlingen af alle de tabeller du opretter.)
Avatar billede nielle Nybegynder
01. november 2007 - 22:07 #28
Hvad får du ud hvis du bare prøver med:

SELECT * FROM database WHERE usr_name='WhOOt, 5c'
Avatar billede whoot Nybegynder
01. november 2007 - 22:11 #29
det giver det samme.. :(
Men hvis jeg søger
SELECT * FROM database WHERE usr_id = 1 AND usr_password = 6123
giver den det rigtige.. Det ser ud som om der er en eller anden fejl i usr_name?
Avatar billede nielle Nybegynder
01. november 2007 - 22:15 #30
Et par muligheder:

Et mellemrum i starten eller i slutningen af feltet.
Mere end et mellemrum efter kommaet.
Avatar billede whoot Nybegynder
01. november 2007 - 22:21 #31
Det ser ikke sådan ud.. jeg har prøvet alle muligheder der er med fejlmellemrum :(
Avatar billede nielle Nybegynder
01. november 2007 - 22:27 #32
Hvordan "ser" du at der ikke er to mellemrum efter kommaet? HTML viser dem jo bare som et enkelt mellemrum. Du må altså tjekke efter på en anden måde - f.eks. ved at cut'og'paste det fremsøgte ind i Notepad.
Avatar billede whoot Nybegynder
01. november 2007 - 22:33 #33
Nu har jeg fjernet alle mellemrum i brugernavnet, og nu virker det.. mystisk..
Kan det lade sig gøre at der ikke kan være mellemrum i? :S
Avatar billede nielle Nybegynder
01. november 2007 - 22:35 #34
Tja, der findes da tegn som ligner et mellemrum til forveksling så man kan vel ikek være sikker. Det ville dog være underligt, hvis det var sådan et som var kommet ind.
Avatar billede whoot Nybegynder
01. november 2007 - 22:36 #35
Det virker, hvis jeg trykker "ret" på en bruger og derefter trykker ok igen.....
Jeg har brugt mit eget script til at lave brugerlisten ud fra --



Lav_bruger_liste.php
----------------------------------------------------------------
<?php
$host="localhost"; // Host name
$username="brugernavn"; // Mysql username
$password="kodeord"; // Mysql password
$db_name="database"; // Database name
$tbl_name="tabel"; // Table name

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$fil = file("laesmig.txt"); //$fil bliver et array med én linje i hver position
$id = 0;
//Vis indholdet af arrayet
foreach($fil as $linje)
{


$usr_pass = "Pass";
$id = $id +1;
$usr_pass = rand(1000,9999);

$sql="INSERT INTO login_system(usr_id, usr_name, usr_pass) VALUES ('$id', '$linje', '$usr_pass')";
$result=mysql_query($sql);

if($result){
echo "Fuldført! -";
echo $linje . "<br />";
}
else {
echo "ERROR @";
}
}


?>
----------------------------------------------------------------
----------------------------------------------------------------
Avatar billede nielle Nybegynder
01. november 2007 - 22:40 #36
Kigger på det...

Men hvorfor har du ikke erklæret dit usr_id felt til at være autoincrement? Så ville du ikke selv skulle bakse med at tælle $id op, og du ville altid være 100 % sikker på at du ikke kommer til at vælge et id som allerede er blevet brugt.
Avatar billede whoot Nybegynder
01. november 2007 - 22:43 #37
Det har du ret i - det er smart :) Det må jeg indrømme, at jeg ikke havde tænkt over. Tak for tippet ;)

Ps. grunden til at det måske går lidt langssomt oven i kasketten her på den anden side af nettet, er fordi det er første gang jeg koder i PHP :) Er kun vant til VB og nogle af de andre:)
Avatar billede nielle Nybegynder
01. november 2007 - 22:45 #38
Jeg tror at jeg ved hvad fejlen kunne være: Når du læser linjerne fra filen så er der et par linjeskiftkaraktere i slutningen af hver linje. De skal slettes inden at linjen lægges i basen:

Lav_bruger_liste.php
----------------------------------------------------------------
<?php
$host = "localhost"; // Host name
$username = "brugernavn"; // Mysql username
$password = "kodeord"; // Mysql password
$db_name = "database"; // Database name
$tbl_name = "tabel"; // Table name

mysql_connect($host, $username, $password) or die("cannot connect");
mysql_select_db($db_name) or die("cannot select DB");

$fil = file("laesmig.txt");  //$fil bliver et array med én linje i hver position
// Vis indholdet af arrayet
foreach ($fil as $linje) {
    $usr_pass = "Pass";
    $usr_pass .= rand(1000, 9999);

    $linje = trim($linje);

    $sql = "INSERT INTO login_system(usr_name, usr_pass) VALUES ('$linje', '$usr_pass')";
    $result = mysql_query($sql);

    if ($result) {
        echo "Fuldført! -";
        echo $linje . "<br />";
    } else {
        echo "ERROR @";
    }
}
?>
Avatar billede whoot Nybegynder
01. november 2007 - 23:11 #39
MANGE TAK! :D:D:D
Nu virker det sgu! mange mange mange tak for hjælpen!

Er det lovligt at give flere points end indlægget lover? for det vil jeg hvertfald hjertens gerne :)
tusind tak!
Avatar billede nielle Nybegynder
02. november 2007 - 06:46 #40
Selvfølgelig er det lovligt - der findes endda en funktion til det: Under menupunktet Funktioner oppe nær toppen af denne side, ude i venstre side.

Det er nu ikke nødvendigt for min skyld. :^)
Avatar billede whoot Nybegynder
02. november 2007 - 13:28 #41
okay, mange tak :)
Avatar billede nielle Nybegynder
02. november 2007 - 17:53 #42
Selv tak :^)
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