Avatar billede MorDuC Nybegynder
25. marts 2012 - 16:05 Der er 7 kommentarer og
1 løsning

jquery ajax, kan ikke få mit script til at virke overhovedet

her er min loginform

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>

<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
   
    $("#loginform").submit(function() {
        var loginDetails = $("#loginform").serialize();
       
        //ajax call
        $.ajax({
            type: "POST",
            url: "login.php",
            data: loginDetails,
            success: function(json) {
                var returnvalue = jQuery.parseJSON(json);
                console.log(returnvalue.password);
                console.log(returnvalue.userExist);
                if(json.password == 1){
                    header("Location: index.php");
                }
           
            }
               
        });
        return false;
    });
});
</script>
</head>



<body>

<form id="loginform" method="POST">
    <Legend>Login</Legend>
   
        <p><label for="username">Brugernavn<input id="username" name="username" class="text" type="text" maxlength="32" /></label></p>
        <p><label for="password">Kodeord</label><input id="password" name="password" class="text" type="text" /></p>
        <p><button class="submit">Login</button></p>

</form>
</body>
</html>

og her er min php fil som ajax kalder:

<?php

    include("dbfunctions.php");
    // save password and username in variables
    $username        = $_POST['username'];
    $password        = $_POST['password'];
   
    $response = array('userExist' =>'', 'password'=>'');
    // create mysql query
    $username = mysql_real_escape_string($username);
    $query = "SELECT password, salt
            FROM users
            WHERE username = '$username';";
   
    // connect to database
    dbConnect();
    $result = mysql_query($query);
    dbClose();
    if(mysql_num_rows($result) < 1) // ingen user med det username
    {
        $response['userExist'] = 0;
    }
    else
    {
        $userData = mysql_fetch_array($result, MYSQL_ASSOC);
        $hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
        if($hash != $userData['password']) // forkert password
        {
            $response['password'] = 0;
        }
        else
        {
            $response['password'] = 1;
        }
       
    }
   
    print json_encode($response);
?>


har siddet og kigget på det længe. og kan ikke se hvor jeg gør noget galt.

nogen kloge hoveder som kan se hvad der sker. eller ikke sker
Avatar billede keysersoze Guru
25. marts 2012 - 16:14 #1
Hvis det ikke virker må du få en fejl - får vi den har vi lidt større chance for at komme med konstruktiv input.
Avatar billede olebole Juniormester
25. marts 2012 - 16:25 #2
<ole>

Hvad skal der ske her:

    if(json.password == 1){
        header("Location: index.php");
    }

- og så må jeg give keysersoze ret: Du må kunne fortælle noget mere ... ikke mindst om JS-/PHP-fejl

/mvh
</bole>
Avatar billede olsensweb.dk Ekspert
25. marts 2012 - 16:40 #3
jeg spekulerer på følgende i din login.php:
$query = "SELECT password, salt FROM users WHERE username = '$username';";

hvad laver det næst sidste semicolon ??
jeg ville ikke have det med
$query = "SELECT password, salt FROM users WHERE username = '$username'";


lever din db connection uden for din function ?? normalt lever variabler kun inde i functionens scope
dbConnect(); retunerer denne en connention ??
dbClose(); kan denne se den connection den skal lukke, hvis den er oprettet uden for scopet

prøv at udskrive din connection

og som de andre skriver fejl beskrivelser

brug fejl findings værktøjerne i din browser
hvis du bruger firefox så installer FireBug
Avatar billede olsensweb.dk Ekspert
25. marts 2012 - 23:51 #4
nedenstående er utested

burde dette
if(json.password == 1){
    header("Location: index.php");
}

ikke være
if(returnvalue.password == 1){
    location.href="index.php";
    self.focus();
}


du skal jo teste på den decode json array
header er en php commando prøv med  location.href

så ole dit indlæg var bull's-eye :)

fandt iøvrigt ud af at semicollon'et i sql stringen virker, ved at kigge på nedenstående link
http://tinsology.net/2009/06/creating-a-secure-login-system-the-right-way/
http://www.phpfreaks.com/forums/index.php?topic=354786.0
http://pastebin.com/kpK66HN3
http://bytes.com/topic/php/answers/913271-php-login-script

som sprøgeren er været kraftigt inspireraret af
Avatar billede olebole Juniormester
26. marts 2012 - 16:28 #5
Undskyld, men hvad er meningen med scriptet - udover at holde spørgeren beskæftiget og dermed væk fra gadehjørner, frimærkesamlinger og stavgang?

Er meningen, at det skal fungere som et login script, er begrebet 'login' grebet helt forkert an. Scriptet kan end ikke i allerheldigste fald bidrage med nogen form for sikkerhed
Avatar billede MorDuC Nybegynder
30. marts 2012 - 18:20 #6
lige nu har det intet større formål. men når jeg får styr på de forskellige koncepter. skulle det jo gerne ende med at kunne lave et login script.

Tak for alle jeres kommentarer. Skal vidst tilbage og læse lidt mere om ajax og json. hvis i smider nogle svar kan i jo dele pointene
Avatar billede olebole Juniormester
30. marts 2012 - 18:41 #7
- og du skal nok også læse lidt mere om PHP/MySQL og JavaScript. Jeg samler ikke point, så de må deles mellem de andre  =)
Avatar billede olsensweb.dk Ekspert
31. marts 2012 - 16:59 #8
du kan godt få et svar her, hvis du absolut vil uddele point
det var jo ole der pin pointed hvor fejlen lå
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