You are not logged in.

  • Login

1

Saturday, August 5th 2006, 3:45am

Login Script via Ajax

Hallo Leute, fand diese Seite dank Google :) Echt intersante Beiträge und HowTo´s hier :) Allso besten dank !

Habe hier ein Threat gelesen, indem es um ein Login Script ging.
Dieser Threat: http://www.easy-coding.de/login-t103.html

Nun folgendes Problem:

PHP Quellcode

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
if ($_POST['submit'] == 1)
{
$name = $_POST['name'];
$pw = $_POST['pw'];
if ($name == "QPMEDIA")
{
 if($pw = "QPMEDIA")
 {
  header("location:/admin/index.php");
 } else {
  echo "Passwort ist Falsch";
 }
} else {
 echo "User ist Falsch";
}
}
 
echo '<html>
<head>
<title>Login Script</title>
 
</head>
<body>
<form action="'. $_SERVER['PHP_SELF'].'" method="post">';
?>
<input type="hidden" name="submit" value="1" />
<fieldset><div><input type="text" name="name" value="Benutzername" class="mailing" onfocus='clearDefault(this)'></input></div>
<div><input type="password" name="pw" value="passwort" class="mailing" onfocus='clearDefault(this)'></input></div>
<div><input type="submit" value="Login" class="buttonmail"></input></div>
</fieldset></form>
</body>
</html>


Dies war der Code, bzw. ein etwas veränderter meinerseits. Folgende 3 Probleme bestehen hierbei:

01. Bei falscher eingabe des Benutzernamens.. gibt das Script eine Fehlermeldung heraus, jedoch nicht bei einer falschen password eingabe.. man kommt trotzdem ins Adminmenü. Könnte man da eventuell auch ne fehlermeldung bekommen á la " Falsches Password"

02. Wäre es möglich ( bezogen auf den Beitrag im Wiki ) die Usernamen bzw. passwörter auch in einer db.txt zu speichern und in md5 zu codieren ??

03. Für mich die wichtigste Frage, da ich für dieses Problem IMMERNOCH keine antwort gefunden habe :(

Folgendes:

Wie schon in der Überschrieft erwähnt, soll sich das ganze über ein ajax fenster abspielen. Bei klick auf " Login " öffnet sich das ajaxfenster und da stehen die angaben aus dem obrigen php code... sprich benutzername und passwort.

Ich möchte nun, das falls eine falsche eingabe gemacht worden ist, sei es benutzername oder password, die fehlermeldung im ajaxwindow erscheint und nicht in einem neuen fenster oder sonstwo... dazu muss ich sagen, dass ich für die ajax anwendungen " Thickbox " benutze.

Link zu Thickbox: http://jquery.com/demo/thickbox/

Dieses ermöglich mir, fenster, frames, iframes in einem ajax fenster zu öffnen ( wie bei lightbox ).. jedoch bezuge ich dafür den " Ajax Content " am ende der seite.
Dieses hier: http://jquery.com/demo/thickbox/#sectionf-1

nun wie könnte man das umsetzten ? ich bin echt am verzweifeln, würde mich echt über euere hilfe freuen. Grossen dank !

Gruss QPMEDIA

2

Saturday, August 5th 2006, 3:54pm

ein login mit ajax ist natürlich auch möglich
mit onsubmit kann man die ajax funktion aufrufen
http://de.selfhtml.org/javascript/sprache/anzeige/onsubmit.htm

zu frage1:
Habe den Hinweis auf falsche Benutzerdaten nun eingebaut
hier das Update:

PHP Quellcode

1
2
3
4
5
6
7
8
9
if($login == false) {
	if($_POST['submit'] == 1)
		echo 'Fehler beim Login. Benutzername und/oder Passwort nicht korrekt.';
	else
		echo 'Bitte anmelden';
 
	require('login.php');
	die();
}


Frage2 erledigt sich ja, wenn du statt deines scriptes, das wiki script verwendest.
Dieses speichert ja md5 verschlüsselt

Zu Frage3: Da seit dem Update vor ~1 Woche keine Header Weiterleitung im Script ist, solltest du das Script nun in die Thickbox einbauen können.
Habe Thickbox noch nicht benutzt, aber vorher könnte der header die Bremse gewesen sein

3

Saturday, August 5th 2006, 4:28pm

Hi !

Zu 01:

ich hab mir das mit onsubmit mal angeschaut. Jedoch suche ich keine JavaScript lösung in dieser Form. Ich möchte eine Ausgabe in dem Formular selbst, z.b über dem Benutzernamen.


Zu 02:

mit was genau muss ich das " Updaten " ersetzten ? Kannste mir das komplette mal mit dem Update wiedergeben, kein plan wo ich sie zeilen einsetzten soll und was ich löschen muss. :?


Zu 03:

meinst du mit dem " Update vor einer Woche " das Script aus dem Boardwiki ? Ist ja eigentlich egal welches ich benutzte ( ausser ich bestehe auf die md5 ) denn das tuts ja auch, das problem ist ja einfach nur das ich die verdammte ( :) ) ausgabe der errormessage nicht in die ajxform packen kann, ohne das es sich neu lädt bzw. die seite wechselt.

Ich hänge mal nen screenshot an, was ich damit meine:

Gruss
QPMEDIA has attached the following images:
  • login_form.JPG
  • login_form_error.JPG

4

Saturday, August 5th 2006, 5:07pm

ohh.. du verweist ja auf einen post von 2004..
nene, ich hab den link gar nicht geklickt.. dachte du meintest den post zum wiki beitrag
aber das script von 2004 ist noch ohne sessions oder sonstiges - damit kann man nur eine einzige site schützen
eine basis auf der du aufbauen kannst ist dieser wiki beitrag: PHP Login Registrierung Tutorial

aber mit ajax wird das schon etwas anders gehandelt...
mit onsubmit="ajaxfunktion()" kannst du abfangen, dass die seite nicht neugeladen wird, sondern stattdessen eine ajax funktion aufrufen.
ohne die wirst du also keinen erfolg haben

ich muss gleich weg.. daher in kurzen worten...
wenn du bis morgen nicht weiter gekommen bist, helf ich dir morgen weiter

in der ajax funktion musst du die secure.php aufrufen.. diese speichert dann ein cookie, auf das die "hauptseite" auch zugreifen kann
keine ausgabe = eingeloggt
ausgabe = nicht eingeloggt + ausgabe des zurückgegebenen textes

5

Sunday, August 6th 2006, 2:16am

Nochmal hallo, also ich sass da ne ziemlich lange Zeit, hab auch noch nen bissl gegooglelt, aber komm einfach nicht weiter :oops:

zuerstmal zum Login aus dem Wiki:

ich hab da einige Probleme, da es irgendwie nicht miteinander arbeitet oder ich keinen druchblick habe, ich weiss es ehrlich gesagt nicht.

Folgendes Problem: Ich rufe das script über die secure.php auf, das ist klar. Danach gebe ich Benutzernamen und Passwort ein, das ist auch klar. Wenn es falsch ist, kommt die fehlemeldung, das ist auch ok... nun kommts... wenn ich benutzernamen und password richtig eingebe, hab ich zwar zugriff auf die admin.php, die cookies werden auch gesetzt jedoch ist die " admin.php " immer leer :) Egal was ich hineinschreibe in die admin.php, ich bekomme immer ne leere seite.

Ich habe mal das script, so wie ich es "etwas" verändert habe angehängt.

02. zum thema Ajaxlogin und der [ onsubmit="ajaxfunktion()" ] Funktion, damit komm ich leider überhaupt nicht klar. d.h ich hab null schimmer wie ich das ganze umsetzten soll. Da bräuchte ich, wenn möglich, echt deine hilfe :roll: ich hock schon seit 2 tagen nur an diesem loginteil, nerft echt mitlerweile :cry:

kurz und knapp, ich komm überhaupt nicht vorran im moment :/
QPMEDIA has attached the following file:
  • LOGIN.rar (1.58 kB - 177 times downloaded - latest: Apr 17th 2012, 11:59am)

6

Monday, August 7th 2006, 2:48am

Hi !

Ne also ich komm gar nicht mehr weiter :?
Das einige was ich mitlerweile ausfindig machen konnte war dieses hier:

Link zu Seite: Klick mich

Das sind die Bibliotheksfunktionen die, die Thickbox verwendet, also sprich JQUERY.JS
Unter AJAX sind die funktionen die benötigt werden um den callback durchzuführen.

Das ist mal ein Beispiel, was ich im zusammenhang damit an source gefunden habe:


JavaScript Code

1
2
3
4
5
6
//You could write an Ajax post with a callback:
$.post("login.php",
{username: <<username input here>>,password: <<password input here>>},
function(){
//Result of post. Do a check on the response.
});


Bloss wie ich was genau damit anfangen soll is mir dato noch ein Rätsel :oops:

7

Monday, August 7th 2006, 3:19pm

Quoted from ""QPMEDIA""

Folgendes Problem: Ich rufe das script über die secure.php auf, das ist klar. Danach gebe ich


Falsch ;-)

Du rufst das script über die admin.php auf

in deinem fall (du hast es über verschiedene verzeichnisse verteilt, musst deine admin.php so aussehen)

PHP Quellcode

1
<?php chdir('..'); require('secure.php'); ?>CONTENT


dann noch eine Optimierung in der secure.php:
entferne die whitespaces beim abfragen (Wiki Version hab ich aktualisiert)

PHP Quellcode

1
2
3
4
foreach($file as $row) {
...
        $user = trim($row[0]);
        $password = trim($row[1]);



//UPDATE
angehängt findest du ein Ajax Login Beispiel... der code ist zu 90% mit der Wiki Version identisch und wurde nur um ein bisschen AJAX erweitert
Torben Brodt has attached the following file:
  • ajax-login.zip (1.85 kB - 291 times downloaded - latest: May 2nd 2012, 2:07am)

8

Monday, August 7th 2006, 5:15pm

Hi d0nut,

erstmal danke das du dir die Mühe gemacht hast 8)

Update: Also das angehängte Script funktioniert einwandfrei, aber nicht auf die Art und Weise wie in meinem Screenshot. Wenn ich die admin.php einfüge auf der seite und es mit dem klick auf den link aufrufe, ist das Loginfeld leer. Und wenn ich z.b die secure.php anstelle der admin.php dort einfüge, ersscheint zwar das feld Benutzername und Passwort, jedoch bei richtiger oder falschen angaben, schliesst sich das Fenster einfach und es wird keine aktion ausgeführt :(

Dann hab ich das LoginScript das ich angehängt hatte ( das mit den Unterordnern ) updatet wie du es beschrieben hast, jedoch hab ich da das problem, wenn ich die cookies lösche und dann erneut anmelden will, wird der cookie automatisch gesetzt und ich komm in den adminbereich. Versteh ich net :)

Schauste mal bitte nach, was das problem ist ? Jetzt schonmal danke !!!!!

Gruss QP-

9

Monday, August 7th 2006, 6:29pm

das 2te problem existiert, weil die session zusätzlich zum cookie irgendwo im browsercache ist..

du kannst dir eine logout.php erstellen mit folgendem inhalt

PHP Quellcode

1
2
3
4
<?php
session_start();
session_destroy();
?>


@problem1: du hast recht - das script ist bewusst simpel gehalten, damit man es in wiki und co verwenden kannst
aber gerne helfe ich dir auch beim vollständigen aufbau, wie du es haben willst

erläuter mir mal genau den ablauf
1. user gelangt auf startseite
2. user klickt auf admin (??)
3. startseite bleibt im hintergrund - loginfeld poppt auf
4. logineingabe OK -> wechsle die seite zu admin.php (reales wechseln/ ohne ajax)
5. logineingabe FALSCH -> zeige das sofort im ajax popup an

10

Monday, August 7th 2006, 7:13pm

Erstmal danke das du mir da weiterhilfst :)

Ok, also zur Problematik, in meinem Falle:

Schritt 01: Die Seite wird aufgerufen -> http://www.domain.de/
Schritt 02: Die Person die sich einlogen will, klickt auf den Link "Login" ( im Screenshot oben rechts zu sehen )
Schritt 03: Wenn man auf den Loginlink klickt passiert folgende aktion aus THICKBOX:

HTML Code

1
<a href="admin/admin.php?height=125&amp;width=220" class="thickbox">login</a>

Schritt 03: dann öffnet sich ( wieder wie auf den Screenshots ) das AjaxFenster ( dafür benutze ich THICKBOX in Verbindung mit der JQUERY Bibliothek )
Schritt 04: da sieht man "Benutzername", "Passwort" und "Login"
Schritt 05: das formular wird, wie in Schritt 03 beschrieben, aus der Datei z.b admin.php geladen
Schritt 06: Jetzt soll folgendes Passieren: Person "XYZ" klick auf Login, schreibt beim Benutzernamen und beim passwort, falsche Angaben. Dann soll wie auf dem Screenshot, eine Fehlermeldung ausgeben werden.
Schritt 07: Aber wenn die Angaben richtig sind, soll er in den Adminbereich bzw. Userbereich der Seite weitergeleitet werden und das in einem neuen Fenster, also _blank.

Kurz gesagt, so ungefäht wie du es gerade beschrieben hast :)


UPDATE: Hab dafür ein kleines Video erstellt, da wird mein Problem besser beschrieben. KLICK MICH


Gruss QP-

11

Tuesday, August 8th 2006, 11:32am

*g* coole idee mit dem video

aber die änderungen waren wirklich nur minimal
ich behalte den aber lieber weiterhin kompakt, als andere (und natürlich mich) zu bemühen in die ajax libraries einzuarbeiten

zur übersicht hab ich dir das vollständige script angehängt.
hier die erläuterungen der änderungen

secure.php
um das login formular habe ich eine box gezaubert:

HTML Code

1
<div style="position:absolute;left:20%;top:100px;width:300px;border:1px solid #000000">


admin.php und index.php habe ich aufgetrennt
bei der admin.php wird gleich beim aufruf der loginstatus überprüft und falls kein login existiert das popup eingeblendet

das ajax script hab ich in ajax.js ausgelagert und 1 änderung vorgenommen

JavaScript Code

1
2
3
4
5
6
if(login == true && feedback.substr(0,11) == "<!--OK//-->")
	document.location.href = "admin.php";
else if(login == false)
	document.getElementById('maincontent').innerHTML = feedback;
else
	document.getElementById('content').innerHTML = feedback;


in maincontent soll der geschützte inhalt geladen werden
und das if überprüft ob eben gerade angemeldet wurde - falls ja, wird man weitergeleitet
Torben Brodt has attached the following file:

12

Tuesday, August 8th 2006, 7:06pm

hehe, jo das Video war mal wieder eine gedankliche Höchstleistung von mir *G*

Ich hab diverse Probleme mit dem Login, z.b wenn man die errormessage kommt, steht die Anmeldemessage noch da :) Irgendwie übereinander. Ich schaus mir noch genau an, aber hab eigentlich vorerst keine anderen Probleme :) Dank dir d0nUt ;)

13

Thursday, August 17th 2006, 10:17pm

So ich hab mich jetzt mal mit dem Macher von JQUERY in kontakt gesetzt... der mir kurzerhand erklären wollte, wie das ganze funtzt.. da es auf die andere art und weise irgendwie nicht hingehauen hat bei mir.

Hier mal Teile der Email:

Quoted

Ich denke, was du brauchst, ist das "offizielle" form plugin. Eine Beispielseite dazu gibt es hier: http://www.malsup.com/jquery/form/
Folgendes müsstest du dann mit Hilfe des form plugins implementieren:
Bei Klick auf Login wird die Form per ajax abgeschickt. Auf Serverseite werden Benutzername und Passwort geprüft und entsprechend ein Status zurückgesendet. Per Callback prüfst du diesen Status. Sind die daten in Ordnung, sendest du die Form ganz normal ab, sind sie nicht in Ordnung, zeigst du eine entsprechende Fehlermeldung an.
Das sollte dann in etwa so aussehen:

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
$(document).ready(function() {
        // bei submit der Form mit der id 'loginform' soll der Rückgabewert
        // in das Element mit der ID 'output' geladen und der callback 'after'
        // ausgeführt werden
        $('#loginform').ajaxForm('#output', after);
});
function after(content) {
        if(!content) {
                // wenn von serverseite nichts zurückkam, soll das formular ganz normal abgeschickt werden, ohne AJAX
                $('#loginform').submit();
                return false;
        }
}


Der Trick ist jetzt, auf der Serverseite festzustellen, ob ein Ajax-Request gesendet wurde und dementsprechend nichts oder eine Fehlermeldung zurückzusenden. Wenn hingegen ein normaler Request kommt, wird genauso geprüft ob die Daten in Ordnung sind, wenn ja, wird entsprechend die nächste Seite zurückgegeben. Auf die Art wird sichergestellt, das die Benutzerdaten auf jeden Fall serverseitig geprüft werden, bevor z.B. die Benutzerdaten in der Session gespeichert werden.


Kein Plan was er will :) Weiss einer Rat ???

14

Thursday, August 17th 2006, 11:51pm

UPDATE: Hab das Problem ENDLICH gelöst, dank der Hilfe des Entwicklerns und d0nUt :) Grossen dank an beide :)

15

Friday, August 18th 2006, 3:50pm

Hallo Leute,

bei mir funzt das Script unter: PHP Login Registrierung Tutorial nicht!

Wenn ich zwei mal auf Login klicke, ohne dass ich etwas eingebe, kann ich mit trotzdem einloggen. Irgentwo ist da ein Fehler im Script.

Ich habe es genau so übernommen wie es im Tut erklärt is, und die Dateien auch genauso benannt.

Kann mir jemand helfen und sagen wo der Fehler liegt?

16

Friday, August 18th 2006, 4:09pm

vermutlich an der php einstellung register_globals on
dadurch ist $_SESSION['user'] das selbe wie $user

habs tutorial umgeschrieben (variablen umbenannt)
nun sollte es funktionieren

17

Friday, August 18th 2006, 4:24pm

Das ging ja fix! :D
Danke! Ich werde es gleich mal ausprobieren

18

Friday, August 18th 2006, 4:52pm

Super! Funktioniert nun!

Nur noch 2 kleine Anmerkungen zu deinem Script:

1. In der Login.php in Zeile 6 steht noch value="<?php echo $_POST['user']; ?>" anstatt value="<?php echo $_POST['p_user']; ?>".

2. Der Typ der Passwortfelder ist nicht type="password". :wink:

19

Friday, August 18th 2006, 4:57pm

hey, das ist ein wiki..
ich versuch hier alle zum wiki schreiben zu treiber, also änder es selbst :-P

20

Friday, August 18th 2006, 5:38pm

OK! Ich habs aktualisiert! :D

Similar threads

Social bookmarks