• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Registrierungssystem mit Live-Daten Überprüfung

BDG

Mitglied
Hey Leute,

Ich wollte ein Registrierungssystem bauen, was ja auch nicht schwer ist.
Aber ich will, dass wenn man die Daten eingibt, dass man dann sofort angezeigt bekommt, ob der Username existiert und ob
die Paswörter gleich und lang genug sind... Wie macht man sowas ?
Gibt es da vielleicht ein Tutorial ?

Als kleine weitere Frage : Was macht dieses escape String in php bei Sachen die man von einer html <form> gesendet bekommen hat?

Danke für eure Antworten. :)

Mit freundlichen Grüßen,

BDG
 
Zuletzt bearbeitet:
Werbung:
Ist eigentlich auch eine recht einfache Sache. Du musst eine JavaScript-Funktion an das Eingabefeld hängen, welches nach Eingabe einen AJAX-Request startet, welcher wiederum eine Funktion auf dem Server zur Prüfung der Eingabe im Vergleich mit den Inhalten der Datenbank vornimmt. Wenn diese Prüfung einen Treffer hat gibst Du nur ein Signal zurück "gibts schon", wenn kein Treffer gefunden wird dann "gibts noch nicht". Abhängig davon führst Du dann eine Callback-Funktion des AJAX-Requests aus, welche das Ergebnis verarbeitet und halt "irgendwie" ausgibt.
 
Und wie mache ich diese Java Script Funktion und das Ajax request ?
Gibt es da irgendwelche Tutorials, oder Beispiele ?

MfG,BDG
 
Werbung:
hmm... Ich versteh noch nicht alles...
Also der Link ruft ja die java Script funktion "DoCallback" auf... ber ich weiß nicht was die macht, und was ein xhr ist...
Aber so wie ich das sehe müsste cih dcoh dann bei doCallback "post" und ja, was dann ?
Wie geht das dann weiter ? ich weiß auch nich, wo er die Daten dann empfängt, und auch nicht, wie ich dann wenn als Wert z.B. "true" zurückgekommen ist, wie ich dann mache, dass da anderer text angezeigt wird, z.B. "Der Benutzername ist noch frei"...
 
Ich wollte ein Registrierungssystem bauen, was ja auch nicht schwer ist.

Anscheinend scheint dir das doch relativ schwer zu fallen.

AJAX lastige Dinge macht man für gewöhnlich mit JS-Frameworks heutzutage, es ist einfach so. Also dürfte der zweite Link für dich interessant sein. Da steht alles drin was du brauchst.

Code:
[COLOR=#000000]$[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]ajax[/COLOR][COLOR=#666600]({[/COLOR][COLOR=#000000]
  type[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#008800]"POST"[/COLOR][COLOR=#666600],[/COLOR][COLOR=#000000]
  url[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#008800]"some.php"[/COLOR][COLOR=#666600],[/COLOR][COLOR=#000000]
  data[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#666600]{[/COLOR][COLOR=#000000] name[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#008800]"John"[/COLOR][COLOR=#666600],[/COLOR][COLOR=#000000] location[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#008800]"Boston"[/COLOR][COLOR=#666600]}[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#666600]}).[/COLOR][COLOR=#000088]done[/COLOR][COLOR=#666600]([/COLOR][COLOR=#000088]function[/COLOR][COLOR=#666600]([/COLOR][COLOR=#000000] msg [/COLOR][COLOR=#666600])[/COLOR][COLOR=#666600]{[/COLOR][COLOR=#000000]
  alert[/COLOR][COLOR=#666600]([/COLOR][COLOR=#008800]"Data Saved: "[/COLOR][COLOR=#666600]+[/COLOR][COLOR=#000000] msg [/COLOR][COLOR=#666600]);[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#666600]});

[/COLOR]Besonders dieses Beispiel dürfte für dich interessant sein.

Eine kleine Nebeninfo: Du postest damit nur Daten an eine URL. Wie diese Seite die Daten verarbeitet hat rein garnichts mehr mit JS/AJAX zu tun. d.H. du musst dein Resultat Serverseitig so zurückliefern dass jQuery was ihm anfangen kann. Die zurückgelieferten Daten hast du hier z.B. im msg Parameter im Closure der .done() Methode.

wie ich dann mache, dass da anderer text angezeigt wird, z.B. "Der Benutzername ist noch frei"...

Hinsichtlich dessen empfehle ich dir dich in Javascript Grundlagen einzuarbeiten.Wenn du bei jQuery bleibst nimmt dir das doch viel Arbeit ab.
Kurze dazu:
.html() – jQuery API .text() – jQuery API
 
Werbung:
Super ! Danke ! Nur noch eine Frage (bis jetzt)
Wie mache ich, dass wenn man fertig getippt hat, dass das automatisch ausgeführt wird ?
Und im php Script muss ich dann einfach, wenn die Abfrage richtig war "return "true"" und dann in dem Formular wieder if (msg == "true") string123 = "Username ist noch frei";, oder ?
 
Wie mache ich, dass wenn man fertig getippt hat, dass das automatisch ausgeführt wird ?

Code:
$('input').blur(function(){ 
    alert('Tu etwas'); 
});

Und im php Script muss ich dann einfach, wenn die Abfrage richtig war "return "true"

du musst dein Resultat Serverseitig so zurückliefern dass jQuery was ihm anfangen kann

Hast du die Dokumentation der ajax() Methode überhaupt gelesen? Suche nach Datatype. Das gängigste wäre die Daten im JSON Format zurückzuliefern. Damit kann man dann auch eine Menge anfangen.

if (msg == "true") string123 = "Username ist noch frei";, oder ?

???

Du checkst nach dem AJAX request dein Resultat und manipulierst anhand dessen deine DOM.

Bedenke dass Clientseitige Checks nicht ausreichen wenn du das Script in der Produktion einsetzen willst.

Ich handhabe dass immer so, dass die Action des Formulars auf das selbe Script verweist wie auch der AJAX Request. Ich checke dann Serverseitig ob ich einen AJAX Request vorliegen haben. Wenn ja, liefere ich die Daten im JSON Format zurück, wenn nicht generiere ich eine View die mir die Fehlermeldungen und das Formular ausgibt, oder leite auf das Formular zurück mit den Fehlermeldungen.

 
Du setzt das action Attribut auf die Datei des Ajax-Calls? Das hab ich noch nie so gemacht? Welche Vorteile versprichst du dir davon?
 
Werbung:
Aber SpaceCookie, was soll ich denn in der php Datei dann returnen ? Du meinst ja einfach ein String wie "true" oder " Es hat funktioniert " geht nicht, weil jQuery das nicht lesen kann...
 
Du setzt das action Attribut auf die Datei des Ajax-Calls? Das hab ich noch nie so gemacht? Welche Vorteile versprichst du dir davon?


Naja ich arbeite meist mit dem MVC Pattern. d.H. mein Action Attribut liegt auf einem Controller.
In diesem Controller prüfe ich obs ein AJAX Request ist. Wenn es einer ist liefere ich die gewünschten Daten im JSON Format zurück. Wenn es keiner ist (also das Formular ganz normal abgesendet wurde, z.B. wenn JS deaktiviert ist) liefere ich die Daten als HTML aus. Ich liefere ein View zurück.

Der Vorteil dabei ist, dass ich meine Datenhaltung zentral handhabe. Egal ob es ein AJAX Request ist oder nicht, die Daten bleiben dieselben.
Ich brauche keine extra Controller oder Dateien die mir die Daten via JSON ausliefern. Der Nachteil ist, dass ich in jedem Controller in dem AJAX verwendet wird eben abfragen muss ob es ein AJAX request ist.

Ich habe mir aber auch schon Gedanken gemacht wie ich dieses Manko ausbügeln kann. Das läuft folgendermaßen:
Ich bin momentan dabei mir eine AJAX Schnittstelle zu basteln. Dies ist ein Controller der alle Ajax requests handelt.

Code:
$.ajax({
  type:"POST",
  url:"ajax/[I]modelname/method/params[/I]",
  data:{...}
[B]...
[/B]});

Mein AJAX Controller akzeptiert als Parameter ein Modelname und die entsprechende Methode.
Nun ruft mein AJAX Controller das Model auf, das Model checkt ob diese Methode via AJAX Request angesprochen werden darf. (ca. so:)

Code:
class UserModel extends Model{

  public function getUserName($id){
    $this->makeAjaxAccessible();
    [B]...[/B]
  }

}

und gibt mir dann die Daten im jSON Format zurück.
Der Vorteil hierbei ist, dass ich eine komplett zentrale Schnittstelle habe die AJAX Requests abwickelt. Das Model oder andere Controller müssen nicht wissen dass ich mir meine Daten via AJAX holen kann. Das Model stellt lediglich die Funktionalität zur Verfügung zu sagen ob auf die Methode ein AJAX Request abgesetzt werden darf, mehr aber nicht. Meine Daten bleiben davon komplett unberührt. Um die kümmert sich dann mein AJAX Controller.

Edit: @BDG: Schau dir mal das an http://php.net/manual/de/function.json-encode.php
 
@spaceCookie, also muss ich ein Array returnen ? Also so "return array("true");
Und dann im Formular wieder $bla = json_encode(msg);
Und dann if ($bla = "true") string123 = "jaaaaa, der Nutzername ist noch frei...

:(

Gibt es da keine Tutorials, wie ich sowas mache ? Also nicht nur die Funktion sondern auch die Benutzung ?
 
Werbung:
Check username availability in PHP with jQuery AJAX - Webwizo's Blog

Allerdings mit HTML und nicht jSON Rückgabe.

also muss ich ein Array returnen ? Also so "return array("true");
Und dann im Formular wieder $bla = json_encode(msg);


Du musst ein bereits jSON encodiertes Array ausgeben und nicht returnen. Wenn du Serverseitig etwas nur returnst kann eine Clientseitige Sprache garnichts damit anfangen weil Serverseitig bereits fertiggeparst wurde.

Code:
echo json_encode($meinDatenArray);
 
Ah OK, ich bin nicht davon ausgegangen, dass du ein MVC Framework benutzt ;)

Ich handhabe das aehnlich, wenn ich mit CodeIgniter arbeite. Ich benutze da auch einen eigenen Controller fuer Ajax-Requests.

Die url lautet dann ungefaehr www.site.com/ajax/checkID/id

Dann wird automatisch die Methode checkID mit dem Parameter id aufgerufen und je nach Fehler oder nicht ein view geladen.

Aber mit deiner Vorgehensweise hat du im Endeffekt die bessere Wahl getroffen, weil bei mir kein Fallback vorhanden ist falls Javascript deaktiviert ist....
Ich denke ich werde meine Vorgehensweise anpassen. Danke fuer den Denkanstoss ;)
 
Oke soweit :) Funktioniert prima. Als letztes nur noch ne mini kleine Frage : Wozu ist mysql_escape_string ?
Und noch eine, wie schütze ich mich vor sql_injections ?
 
Werbung:
Oke soweit
icon_smile.gif.pagespeed.ce.Tc4KHB2wv1.gif
Funktioniert prima. Als letztes nur noch ne mini kleine Frage : Wozu ist mysql_escape_string ?
Und noch eine, wie schütze ich mich vor sql_injections ?


google mal mysql_real_escape_string und ich verspreche dir du wirst lachen :D
 
Der Lacher wird noch größer, denn in der Doku von PHP kann man mysql_real_escape_string auch finden. :D :D
 
Oh :D Oke, das war Zufall :=)
Ich meld mich dann wieder wenn es wieder neue Fehler gibt (+/- 15 min)...

EDIT: Oke, es ist soweit... :D
ich wollte rausfinden ob ein Nutzername bereits existiert, oder nicht...
Aber was ist hierdran falsch ?

$sql = "SELECT COUNT(*) FROM user WHERE user_name = '$u'";
$result = mysql_query(sql);
if (mysql_result($result, 0) == 0)

Er sagt mir immer

"Warning: mysql_result() expects parameter 1 to be resource, boolean given in /usr/www/users/****/TheAmazingBDG/functions.php on line 31
 
Werbung:
Frag' doch MySQL:
PHP:
$result = mysql_query(sql)
   or die ("MySQL-Error: " . mysql_error());
Ein error_reporting(E_ALL); und ein ini_set("display_errors", true); am Anfang des Scriptes würden dir auch einiges verraten, z.B. dass PHP mit sql nicht wirklich was anfangen kann.
 
oh... Ohhhh... Ohhhhhhhhhhhhh ! :D ja, die Tabelle existierte nicht... Da fehlte ein "s"... :D
Oke, das werd ich jetzt immer an Anfang schreiben, danke :D
 
Zurück
Oben