Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

dermainzer

Routinier

Dabei seit: 07.03.2009

Beiträge: 327

 

1 Zum Seitenanfang

Sonntag, 12. April 2009, 21:45

Login mit Ajax und PHP - Statuscode: 0

Hallo,

ich bin grade am Ajax lernen und wollte einen Login erstellen. Ich kriege aber immer den Statuscode 0, funktioniert also nicht. Ich finde den Fehler nicht, könnt ihr mir helfen?

Ajax Code:

Javascript-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function login(user, pass) {
		
		
		
		var email = user;
		var pw = hex_md5(pass); // pw mit md5 hashen
		
		var req = null;
				
		try {
			req = new XMLHttpRequest();
		}
		catch(ms) {
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");	
			}
			catch(nonms) {
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(failed) {
					req = null;	
				}
			}
		
		}
			 	
		if(req == null) {
			alert("error");
		}
				
		
		req.open("POST", 'http://localhost/login.php?do=login', true);
				
		req.onreadystatechange = function() {
			switch(req.readyState) {
						
				case 4:
					if(req.status != 200) {
						alert("req.status: " + req.status);	
					}
					else {
						alert("req.responsetext: " + req.responseText);
					}
					break;
				default:
					return false;
				break;
						
			}
		};
				
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			
		
		req.send("username=" + email + "&userpw=" + pw); //"
		
	} // login [end]

Fornular:

HTML

1
2
3
4
5
<form action="#" onsubmit="login(document.getElementsByName('email').item(0).value, document.getElementsByName('pw').item(0).value);" method="post">
        	<label for="email">eMail:</label><input type="text" class="textfield" name="email" /><br />
            <label for="pw">Passwort:</label><input type="password" class="passwordfield" name="pw" /><br />
            <input type="submit" name="submitbutton" value="Login" id="submit" />
</form>

login.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// session
    session_start();

    // includes
    include('connect.php');
    
    
    if(!defined(DIRECTLY))
        die('Access denied');

    
    
    switch($_GET['do']) {
        /*** login ***/
        case "login":
            
            $username mysql_real_escape_string($_REQUEST['username']);
            $userpw mysql_real_escape_string($_REQUEST['userpw']); // 
            
            $query mysql_query("SELECT * FROM login WHERE username = '{$username}' AND pw = '{$userpw}'");
            while($row mysql_fetch_assoc($query)) {
                if($username == $row['username'] && $userpw == $row['userpw']) {
                
                        
                    // sessions setzen
                    
                    $_SESSION['isLogin'] = true;
                    

                    
                }
                else {
                    if($_SESSION['isLogin'] == true) {
                        echo('you are already logged in');
                    }
                    else {
                        echo('incorrect password or username <br /> try again');
                    }
                }
            }
                
    
        break;
        /*** logout ***/
        case "logout":
            session_unset();
            session_destroy();
            header("Location: index.php");
        break;
    }




dermainzer
 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

2 Zum Seitenanfang

Montag, 13. April 2009, 09:02

Ich kenne mich mit Ajax nicht so aus, aber solltest du nicht in der login.php auch den entsprechenden Status zurückgeben?
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
 

dermainzer

Routinier

Dabei seit: 07.03.2009

Beiträge: 327

 

3 Zum Seitenanfang

Montag, 13. April 2009, 12:04

Hallo,

ich hab die login.php geändert und jetzt geht es, ich kriege aber immer noch den Statuscode 0:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$username mysql_real_escape_string($_REQUEST['username']);
            $userpw mysql_real_escape_string($_REQUEST['userpw']); // 
            
            
            
            $query mysql_query("SELECT * FROM login WHERE email = '{$username}' AND pw = '{$userpw}'");
            
            $row mysql_num_rows($query);
            
            if($row 1) {
                

                    
                    $_SESSION['isLogin'] = true;
                    
                
            }
            elseif($row 0) {
                echo('incorrect password or username <br /> try again');

            }

dermainzer

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dermainzer« (13. April 2009, 12:04)

 

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

4 Zum Seitenanfang

Montag, 13. April 2009, 14:36

Mal generell, die Zeile "req.send("username=" + email + "&userpw=" + pw); //"" ist kein AJAX, weil es nicht im XML-Format ist. Um genau zu sein machst du eine trickreiche abart von Lazy Loading. Du kannst das von mir aus aber gerne AJAX nennen, es fehlen ja eh' nur ein paar buchstaben.

Du könntest aber die Zeile "open" umschreiben, dann müsste es gehen.

req.open("POST", 'http://localhost/login.php?do=login&username=xxx&userpw=xxx', true);




PS: ab und zu verweigert er die verbindung weil es ein anderer Server ist. Versuch anstelle von localhost mal local, host oder 127.0.0.1.

:D



Also ich verwende Prototype-JS für AJAX-Aufgaben.

Da kannst du sagen:

Möglich das dir meine Antwort nicht gefällt, aber denk mal an den Vorteil der Standartisierung.
 

ospx

Kaiser

Dabei seit: 11.11.2006

Beiträge: 1 131

 

5 Zum Seitenanfang

Montag, 13. April 2009, 14:51

der Fehler müßte in deinem JavaSript - Code liegen.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
		req.onreadystatechange = function() {
			switch(req.readyState) {
						
				case 4:
					if(req.status != 200) {
						alert("req.status: " + req.status);	
					}
					else {
						alert("req.responsetext: " + req.responseText);
					}
					break;
				default:
					return false;
				break;
						
			}

...


genaugenommen hier im switch:

Quellcode

1
2
3
4
5
...
				default:
					return false;
				break;
                    ...


Weil in den unterschiedlichen Stadien des Requests unterschiedliche Statuscodes geliefert werden.
Bei jeder Änderung des Statuses wird die Funktion ausgeführt, weil Event feuert.

Der erste Status ist nunmal aber immer Status: 0 = uninitialized --> der Request wurde noch nicht durch die Methode open() ausgelöst / wurde also noch nicht abgesendet.
Dieser Code wird also immer erzeugt, sobald ein XMLHttpRequest - Objekt instanziert wird.
In deiner Funktion läuft er damit automatisch als erstes in den default-Zweig des switches.
Lösung -> nimm mal dort das "return false" heraus.

@ nocturne: Er verwendet zwar kein xml, aber das "X" in Ajax ist aus den Anfanngszeiten der Technologie. Der Namensgeber selbst sagt heute, dass der Name eigentlich unzutreffend ist (durch das enthaltene 'x' in Ajax), da es eben nicht nur auf xml-Daten beschränkt ist. Unter Ajax werden jegliche Übertragungen subsimiert, die über das XMLHttpRequest - Object abgewickelt werden. Auch Prototype und viele andere Frameworks übermitteln intern eher selten XML-Daten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ospx« (13. April 2009, 14:51)

 

dermainzer

Routinier

Dabei seit: 07.03.2009

Beiträge: 327

 

6 Zum Seitenanfang

Montag, 13. April 2009, 19:39

Hi Leute,

ich hab das gemacht, was ihr mit gesagt habt, leider hat nichts etwas gebracht. Deswegen habe ich das Script neu geschrieben, nach diesem Tutorial. Leider funktioniert es jetzt auch nicht, aber vielleicht könnt ihr den Fehler besser sehen, ich kann es jedenfalls nicht...

Formular:
ist das selbe geblieben

JS-Code:

Javascript-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
var request = false;
function login(user, pass) {
var email = user;
		var pw = hex_md5(pass); // diese function ist in einer externen js datei enthalten
		setRequest(email, pw);
}
function setRequest(email, pw) {
			
			if(window.XMLHttpRequest) {
				request = new XMLHttpRequest();
			}
			else if(window.ActiveXObject) {
				
				try {
					request = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch(ex) {
					
					try {
						request = new ActiveXObject("Microsoft.XMLHTTP");			
					}
					catch(e) { 
						alert(e); 
					}
				}
			} // else if [end]
			
			if(!request) {
				alert("Fehler beim XMLHTTP-Instanz erzeugen");
			}
			else {
				
				alert("asdasd");
				
				var url = "http://127.0.0.1/codesnippetmanageronline/login.php?email=" + email + "&pw=" + pw; //?;
				//alert(email + pw);
				request.open('GET', url, true);
					
				request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

				request.send(null);
				
				request.onreadystatechange = interpretRequest;
				
			} // if !request [end]
			
			
		} // setRequest [end]
		
		function interpretRequest() {
			alert("interpretRequest()");
			switch(request.readyState) {
			
				case 4:
					if(request.status != 200) {
						alert("Fehler: " + request.status);
					}
					else {
						var xml = request.responseXML;
						var login = xml.getElementsByTagName('eingeloggt')[0].firstChild.nodeValue;
					}
				
					alert(login);
				
				break;
			}
			
			
		} // interpretRequest [end]

login.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
session_start();
    
    include('connect.php');
    
    if(isset($_REQUEST['email']) && isset($_REQUEST['pw'])) {
        
        header('Content-Type: text/xml; charset=utf-8');
        
        echo("<?xml version="1.0\" encoding=\"utf-8\"?>\n");
        echo("<login>\n");
        
        $email mysql_real_escape_string($_REQUEST['email']);
        $pw $_REQUEST['pw']; // wird schon md5 gehahst übertragen
        
        $query mysql_query("SELECT * FROM login WHERE email = '".$email."' AND pw = '".$pw."'");
        $rows mysql_num_rows($query);
            
        if($rows == 1) {
        
            
            echo("\t<eingeloggt>true</eingeloggt>");
            $_SESSION['isLogin'] = true;
            
        }
        elseif($rows == 0) {
            echo("\t<eingeloggt>false</eingeloggt>");
            $_SESSION['isLogin'] = false;
        }
    
    
        echo("</login>");
    }
    else {
        echo('access denied');    
    }


Könnt ihr mir bitte nochmal helfen?
Danke schonmal,

dermainzer
 

ospx

Kaiser

Dabei seit: 11.11.2006

Beiträge: 1 131

 

7 Zum Seitenanfang

Montag, 13. April 2009, 21:29

Was sagt denn die Fehlerkonsole?

Was für alert - Ausgaben bekommst du?
 

dermainzer

Routinier

Dabei seit: 07.03.2009

Beiträge: 327

 

8 Zum Seitenanfang

Montag, 13. April 2009, 21:33

Die Fehlerkonsole sagt: alles ok.

Ausgabe ist "asdasd" und die eingegebene Email und MD5 gehashtes Passwort. Wenn ich aber die Zeile alert(email + pw); um zwei Zeilen nach unten verschiebe (nach request.open), kommt nur "asdasd".


dermainzer
 

ospx

Kaiser

Dabei seit: 11.11.2006

Beiträge: 1 131

 

9 Zum Seitenanfang

Montag, 13. April 2009, 22:18

setz mal 'request.onreadystatechange' vor 'request.send(null)'

Quellcode

1
2
request.onreadystatechange = interpretRequest;
request.send(null);


Kommt auf php-Seite etwas an? Vielleicht mal mit

PHP-Quelltext

1
file_put_contents("ajax.log"var_export(getallheaders(),true));


die eingehenden header mitschreiben oder etwas ähnliches...
 

dermainzer

Routinier

Dabei seit: 07.03.2009

Beiträge: 327

 

10 Zum Seitenanfang

Montag, 13. April 2009, 22:29

Hi ospx,

vielen Dank, du hast mir sehr geholfen :)
Ich hab nochmal die Pfadangaben in der PHP und JS Datei getauscht/von absolut in relativ geändert und siehe da, es geht :)

vielen Dank an euch :)


dermainzer

edit: der Statuscode wird immer noch mit 0 zurückgegeben, aber der eigentliche Login funktioniert. Kann das mit dem Statuscode Sicherheitslücken mit sich bringen?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dermainzer« (13. April 2009, 22:29)

 

ospx

Kaiser

Dabei seit: 11.11.2006

Beiträge: 1 131

 

11 Zum Seitenanfang

Montag, 13. April 2009, 23:10

Wann, wo und wie wird Status = 0 zurückgegeben? über ein alert? wo hast du das wie eingebaut? Oder wie sonst?

Du hast vorhin schon verstanden, dass
request.onreadystatechange
ein Eventhandler ist, der mehrfach während der Ausführung eines Requests feuert und somit in den unterschiedlichen Stadien eines Requests am Anfang ein Status =0 normal ist? Wenn du eine Antwort empfängst und auf deiner Seite darstellen kannst, hast du irgendwann auch den status= 4, den du ja haben willst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ospx« (13. April 2009, 23:10)

 

Ähnliche Themen