Avatar billede coolcom Nybegynder
21. oktober 2007 - 13:34 Der er 9 kommentarer og
1 løsning

mysql_fetch_object() fejl.

Hey..

Har et lille problem med følgende script:

//Definere klassen login
class Login {

    var $output = "";
    var $html     = "";
   
        function pages() {
            global $skin;
           
                $this->html = $skin->load('skin_login');
       
                $skin->do_title("Login");
                $do = !empty($_GET['do']) ? $_GET['do'] : FALSE;
                   
                    switch ($do)
                    {
                        case "1":
                            $this->signin();
                        break;
                        case "2":
                            $this->check_login();
                        break;
                        case "3":
                            $this->logout();
                        break;
                        case "4":
                            $this->do_login();
                        break;
                        case "5":
                            $this->do_register();
                        break;
                        default:
                            $this->signin();
                        break;
                    }
               
                $skin->do_output("$this->output");
        }


        function signin() {
            global $skin;
       
                $this->output .= $this->html->showlogin();
           
            }
           
        function check_login() {
        global $connector, $skin;   
       
            $username = $_POST['username'];
            $password = $_POST['password'];
       
            //Søger for, at man ikke kan bruge SQL injections       
            $Username = preg_replace("#[^a-zA-Z0-9-_\.]#", "", $username);                       
           
           
            $result = $connector->query("SELECT * FROM users WHERE username='. $username .' AND password='. $password .'");               
           
            $row = mysql_fetch_object($result);                       
           
            //Tjekker om der var nogen der passede til vores forespørgsel        
            if(!empty($row) && $row->password == $password && $row->username == $username)            {           
           
                    //Smider brugernavnet og kodeordet ind i sessioner            
                    $_SESSION['Username'] = $Username;            $_SESSION['Password'] = $Password;                       
                   
                    //Så er man logget ind.            
                    return true;           
                   
                    }       
            else           
                    {           
                   
                    //Smider en javascript alert til brugeren der siger, at han ikke loggede korrekt ind.            
                    echo "<script language=\"javascript\" type=\"text/javascript\">alert('Dine loginoplysninger passede ikke sammen.');
                    </script>";                       
                               
                    return false;           
                }       
       
        }
}
?>

Det retunere:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\felderbal\modules\login.php on line 66

Hvad skyldes dette?
Avatar billede coolcom Nybegynder
21. oktober 2007 - 13:35 #1
Det skal lige siges at scriptet ikke er færdigt..
Jeg mangler at konstruere de sidste funktioner, men jeg skal lige have dette på plads først.
Avatar billede erikjacobsen Ekspert
21. oktober 2007 - 13:42 #2
Det er en underlig SQL-streng du har. Hvad med:

            $result = $connector->query("SELECT * FROM users WHERE username='$username' AND password='$password'");
Avatar billede erikjacobsen Ekspert
21. oktober 2007 - 13:43 #3
Din fejl kommer ikke på grund af fejl i mysql_fetch_object, men oftest pga fejl i sql-sætningen. Din $connector fidus burde have fortalt dig det på en måde.
Avatar billede coolcom Nybegynder
21. oktober 2007 - 14:05 #4
Det hjalp ikke..
Avatar billede nielle Nybegynder
21. oktober 2007 - 14:41 #5
Lige en sidenote: Det hjælper ikke at du beskytter din $username imod sql-injection hvis du ikek gør det samme for $password. I øvrigt ville jeg foretrække at bruge mysql_real_escape_string() til dette formål.
Avatar billede nielle Nybegynder
21. oktober 2007 - 14:44 #6
1) Er din $connector blevet initialiseret for at du kalder check_login()?

2) Tilføj et tjel på om der er fejl i din SQL:

$result = $connector->query("SELECT * FROM users WHERE username='$username' AND password='$password'") or die(mysql_error());
Avatar billede olebole Juniormester
21. oktober 2007 - 18:31 #7
<ole>

"//Søger for, at man ikke kan bruge SQL injections"
... aha! Ser man det? Prøv lige følgende kode og tjek så din egen  ;o)

$username = "Ole-ø/Bo'le'Bum";
$Username = preg_replace("#[^a-zA-Z0-9-_\.]#", "", $username);
print $Username."<br><br>";
print $username;

/mvh
</bole>
Avatar billede olebole Juniormester
21. oktober 2007 - 18:35 #8
- og det er den versionen med lille 'u', du bruger i din SQL!  =8-O
Avatar billede coolcom Nybegynder
21. oktober 2007 - 19:11 #9
@nielle:

Tak for svaret. Det hjalp mig på vej og det virker nu. Smid et svar for points
Avatar billede nielle Nybegynder
21. oktober 2007 - 19:14 #10
Oki, men husk nu også lige de meget relevante kommentare der har været omkring beskyttelse imod SQL-injection.

... og et svar :^)
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