Avatar billede roz Nybegynder
06. juli 2005 - 02:36 Der er 19 kommentarer og
1 løsning

PHP og MySQL kode problem

Jeg har denne rimelig enkle kode:

<?php
if (!isset($send)) {
echo "Login
<form action=".$_SERVER['PHP_SELF']." method=post>
Username:<br>
<input type=text name=name size=30 maxlength=30><br>
Password:<br>
<input type=password name=pass size=30 maxlength=30><br>
<input type=submit name=send>
</form>
";
}

else {
include('config.php');
$password = md5($pass);
$result = mysql_query("SELECT * FROM members WHERE Username = '$name'");
if (!$result) {
echo "The username does not exist!";
}
while ($row = mysql_fetch_array ($result)) {
$check = $row["password"];
}
if (md5($password) === md5($check)) {
session_register("username");
session_register("password");
echo "Welcome ";
echo "$name";
} else {
echo "Login failed! Please try again.";
}
}
?>

Problemet er at når jeg trykker submit sker der intet. Siden loades med stadig med formen på.

2. Spørgsmål: Tror nok denne kode kræver at register_globals er on . Hvis dette er tilfældet hvordan kan koden så optimeres så dette ikke er nødvendigt?
Avatar billede jaw Nybegynder
06. juli 2005 - 02:43 #1
Lige i første omgang, så prøv:

if (!isset($_POST['send'])) {

for hvis du kører med register_globals på så vil $send forblive tom hele tiden.
Avatar billede roz Nybegynder
06. juli 2005 - 02:52 #2
Ahh ja så virker det vidst :) (NÆSTEN) :)

Koden ser nu således ud:
<?php
if (!isset($_POST['send'])) {
echo "Login
<form action=".$_SERVER['PHP_SELF']." method=post>
Username:<br>
<input type=text name=name size=30 maxlength=30><br>
Password:<br>
<input type=password name=pass size=30 maxlength=30><br>
<input type=submit name=send>
</form>
";
}

else {
$pass = $_POST['pass'];
$name = $_POST['name'];

include('config.php');

$result = mysql_query("SELECT * FROM members WHERE Username = '$name'");
if (!$result) {
echo "The username does not exist!";
}
while ($row = mysql_fetch_array ($result)) {
$check = $row["password"];
}
if (md5($password) === md5($check)) {
session_register("username");
session_register("password");
echo "Welcome ";
echo "$name";
} else {
echo "Login failed! Please try again.";
}
}
?>


Problemet er at man kan logge ind med hvilket som helst brugernavn så længe passwordet passer :S
Lidt mærkeligt... Nogen der kan se hvorfor?
Avatar billede jaw Nybegynder
06. juli 2005 - 03:01 #3
Har lavet et par små ændringer, så prøv det lige:

    $result = mysql_query("SELECT * FROM members WHERE Username = '$name'");
    if (!$result) {
        echo "The username does not exist!";
    } else {
        while ($row = mysql_fetch_array ($result)) {
            $check = $row["password"];
        }
        if (md5($password) == md5($check)) {
            session_register("username");
            session_register("password");
            echo "Welcome ";
            echo "$name";
        } else {
            echo "Login failed! Please try again.";
        }
    }
}
?>

Er ikke 100% på at det virker, for har ikke testet det.
Avatar billede roz Nybegynder
07. juli 2005 - 01:25 #4
Hmm virker ikke. Lige meget hvad mans kriver skrver den blot "welcome ($name)".
:(
Avatar billede jaw Nybegynder
07. juli 2005 - 01:26 #5
Altså, den skriver det ligemeget hvilket brugernavn man indtaster og upåvirket af adgangskoden?
Avatar billede roz Nybegynder
07. juli 2005 - 01:29 #6
Jep...
Avatar billede roz Nybegynder
07. juli 2005 - 01:45 #7
Den skriver også welcome selv om du ingenting skriver i felterne :S
Avatar billede jaw Nybegynder
07. juli 2005 - 01:46 #8
Okey, så prøv at udskifte:

if (!$result) {

med:

if (mysql_num_rows($result) == 0) {
Avatar billede roz Nybegynder
07. juli 2005 - 01:50 #9
Okay det bliver bedre og bedre :) Nu skal man skrive det rigtige brugernavn. Ellers skriver den at brugernavnet ikke findes :D

Problemet er nu kun passwordet. Der er det stadig lige meget hvad man skriver.
Avatar billede jaw Nybegynder
07. juli 2005 - 01:55 #10
Okey, det var da et skridt i den rigtige retning. Men check lige et par ting som jeg måske lige opdagede:

1. Krypterer du ikke 2 gange?
  $password = md5($pass);
  if (md5($password)
2. Tror du skal ændre $pass til $_POST['pass']
Avatar billede roz Nybegynder
07. juli 2005 - 02:05 #11
Nej det gør jeg ikke.
Her er koden i opdateret form:

<?php
if (!isset($_POST['send'])) {
echo "Login
<form action=".$_SERVER['PHP_SELF']." method=post>
Username:<br>
<input type=text name=name size=30 maxlength=30><br>
Password:<br>
<input type=password name=pass size=30 maxlength=30><br>
<input type=submit name=send value=Login>
</form>
";
}

else {
$pass = $_POST['pass'];
$name = $_POST['name'];

include('config.php');

    $result = mysql_query("SELECT * FROM members WHERE Username = '$name'");
if (mysql_num_rows($result) == 0) {
        echo "The username does not exist!";
    } else {
        while ($row = mysql_fetch_array ($result)) {
            $check = $row["password"];
        }
        if (md5($pass) == md5($check)) {
            session_register("username");
            session_register("password");
            echo "Welcome ";
            echo "$name";
        } else {
            echo "Login failed! Please try again.";
        }
    }
}
?>



BTW: Opdagede lige at det kun er når man IKKE skriver noget i password den lader en logge ind. :S

Altså virker det helt forkert hehe. Ikke engang det rigtige password lader en slippe igennem :S
Avatar billede jaw Nybegynder
07. juli 2005 - 02:10 #12
Hm, jeg må indrømme jeg er træt, så det går lidt langsomt, og det her bliver nok aftenens sidste forsøg.

Men prøv lige at udskrive $check og $pass og se om de indeholder det du mener de skal. Og hvorfor egentlig kryptere, når din kryptering alligevel kun foregår her?
Avatar billede roz Nybegynder
07. juli 2005 - 02:16 #13
Det skal også ændres senere. Men nu skal jeg lige først have dette enkle script til at virke :)
Avatar billede jaw Nybegynder
07. juli 2005 - 02:19 #14
Ja, men er du 100% sikker på, at $check og $pass indeholder hvad de skal??? Et sted, hvor du er sikker på de er sat, f.eks. ved "Welcome $name" så prøv echo $pass . " " . $check; eller noget lignende...
Avatar billede roz Nybegynder
07. juli 2005 - 02:20 #15
De udskriver ikke det rigtige ;)

Pass udskriver selvfølgelig rigtigt men check indeholder ingenting lige meget om man vælger rigtigt brugernavn eller hvad.
Avatar billede roz Nybegynder
07. juli 2005 - 02:21 #16
Men kna ikke lige forstå hvorfor check ikke indeholder det rigtige :S
Avatar billede jaw Nybegynder
07. juli 2005 - 02:25 #17
Så prøv:
$check = $row['password'];
echo $row['password'];
...bare for at se, om du får det rigtige ud. Og du er sikker på, at feltet i databasen hedder "password" med små bogstaver osv.?
Avatar billede roz Nybegynder
07. juli 2005 - 02:27 #18
Haha FUCK... Password var med stort.. Havde jeg helt glemt at tænke på... Du skal ihvertfald have rigtig mange tak for al din hjælp! Smid et svar så får du selvfølgelig point :)
Avatar billede jaw Nybegynder
07. juli 2005 - 02:29 #19
Godt det virker - og selv tak :) Altid en god ting at udskrive sine variabler hvis de bøvler...
Avatar billede roz Nybegynder
07. juli 2005 - 02:33 #20
Hehe jaa :)
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