Ich möchte gerne in einem Formular mit einem Klick auf einen Button überprüfen lassen, ob ein gewünschter Benutzername schon existiert.
Sprich:
Es gibt ein form, welches das Feld ‚usrname‘ beinhaltet.
Daneben ein Button, welcher nicht die Form speichert, sondern eine JS-Funktion aufruft. Diese soll nun eine php starten, die in meiner DB nachschaut, ob der Wert im Formularfeld schon existiert.
Ich vermute, dass dies mit AJAX zu realisieren ist, aber wie? Ich kenne mich mit AJAX null aus
Kann mir jemand den entscheidenden Schnipsel liefern, der den Wert aus dem Formularfeld ausliest, an die php übergibt und den Rückgabewert (0/1) empfängt? Sind ja vermutlich nur 3 Zeilen, oder?
Daaaaaaaaanke, schonmal
Kann mir jemand den entscheidenden Schnipsel liefern, der den
Wert aus dem Formularfeld ausliest, an die php übergibt und
den Rückgabewert (0/1) empfängt? Sind ja vermutlich nur 3
Zeilen, oder?
Naja, das Ajax PHP Mysql tutorial , hat genau was du brauchst an schnippsel , sogar mit jason objekt .
da sollte es doch ein leichtes sein .
Etwas löschen etwas ändern und schon haste es fertig
Hmmm, habe ich mir mal angesehen.
Der HTML-Teil ist glasklar. Der php-Teil auch. Der JS-Teil überfordert mich massiv… Wie gesagt: Mit JS kenne ich mich überhaupt nicht aus und habe leider auch nicht die Zeit mich da einzuarbeiten. Wenn ich da jetzt anfänge zu löschen und zu ändern ist das ein pures Ratespiel.
Ich bräuchte ja nur den Teil, welcher das Feld an die php schickt und wieder die Antwort empfängt.
Erbarmt sich jemand meiner (JS-)gequälten Seele
nur das „Teil“, was den Request ans PHP-script schickt und den response verarbeitet:
function Test(Name){ var req=false; var URL=„URL_zum_script.php“; if (window.XMLHttpRequest){req=new XMLHttpRequest()} else {req=new ActiveXObject(„Microsoft.XMLHTTP“)} if (!req){return false} req.open(„GET“, URL+"?" + Name , true); req.onreadystatechange=function() { if(req.readyState==4 && req.status==200) { //hier wird req.responseText verarbeitet z.B.: if(req.responseText==„nein“){ alert(Name +’ bereits vergeben’); // vielleicht noch das input-feld leeren } } req.send(); } }
Jetzt sind doch schon ein paar Fragen vorab aufgetaucht. Ich frage lieber bevor ich loslege, damit es nicht an ein paar Typos scheitert
req.open(„GET“, URL+"?" + Name , true);
Müsste es hier nicht heißen:
req.open(„GET“, URL+"?Name=" + Name , true);
Weiterhin sehe ich nicht, wo die Variable „Name“ in JS definiert wird.
Wenn ich mir den obigen Link von Lacta ansehe, müsste dann nicht sowas rein wie:
var Name = document.getElementById(„Name“).value;
Und noch eine Frage:
if(req.responseText==„nein“)
Wie übermittelt php den responseText? Einfach per echo?
Also die Datenbankabfrage und dann sowas wie
echo mysql_affected_rows();
und im Script dann:
if(req.responseText>„0“){
Danke,
Dirk.
function Test(Name){ var req=false; var URL=„URL_zum_script.php“; if (window.XMLHttpRequest){req=new XMLHttpRequest()} else {req=new ActiveXObject(„Microsoft.XMLHTTP“)} if (!req){return false} req.open(„GET“, URL+"?" + Name , true); req.onreadystatechange=function() { if(req.readyState==4 && req.status==200) { //hier wird req.responseText verarbeitet z.B.: if(req.responseText==„nein“){ alert(Name +’ bereits vergeben’); // vielleicht noch das input-feld leeren } } req.send(); } }
Müsste es hier nicht heißen:
req.open(„GET“, URL+"?Name=" + Name , true);
das kannst Du halten, wie Du möchtest …
wie Du mit PHP daran kommst egal
ob mit $_SERVER[„QUERY_STRING“] oder $_GET[‚Name‘]
Weiterhin sehe ich nicht, wo die Variable „Name“ in JS
definiert wird.
wird beim Funktionsaufruf übergeben:
z.B.: Test(‚Erich‘)
Die Funktion Test übernimmt dann in var Name
function Test(Name)
Wenn ich mir den obigen Link von Lacta ansehe, müsste dann
nicht sowas rein wie:
var Name = document.getElementById(„Name“).value;
das kommst darauf an, wann und wie Du die Funktion aufrufst.
geht ja auch z.B. so:
if(req.responseText==„nein“)
Wie übermittelt php den responseText? Einfach per echo?
was echo ausgibt und dementsprechend ausgewertet wird … egal … so wie Du möchtest
Das war ja auch „nur“ der Teil für den Request ans PHP-script!!
Wie das ganze aufgebaut, ausgelöst und verarbeitet wird … ist ja eine ganz andere Sache.
ich habe jetzt mal Nityas Vorschlag umgesetzt und es scheint nicht zu funktionieren - vermutlich hängt es, wie so oft, an irgendeiner Kleinigkeit.
Ich habe folgendes kleines test.html:
function Test(Name){
var req=false;
var URL=„usrcheck.php“;
if (window.XMLHttpRequest){req=new XMLHttpRequest()}
else {req=new ActiveXObject(„Microsoft.XMLHTTP“)}
if (!req){return false}
req.open(„GET“, URL+"?" + Name , true);
req.onreadystatechange=function() {
if(req.readyState==4 && req.status==200) {
//hier wird req.responseText verarbeitet z.B.:
if(req.responseText==„nein“){
alert(Name +’ bereits vergeben’);
// vielleicht noch das input-feld leeren
}
Beides scheint zu funktionieren, wenn ich usrcheck.php?nein aufrufe, wird „nein“ ausgegeben. Wenn ich im html vom ersten Formularfeld zum zweiten wechsel, wird die Function aufgerufen. Und eigentlich müsste doch dann, wenn ich ins erste Formularfeld „nein“ schreibe, die function den Alarm ausgeben. Tut sie aber nicht
Was übersehe ich?
Danke nochmal für die Hilfe…
Mmmh, wenn ich die Klammer rausnehme, dann funktioniert irgendwie gar nichts mehr. Ich sehe den Wald vor lauter Bäumen nicht mehr und es funktioniert immer noch nicht *heul*
Hast Du noch eine Idee?
Alles Liebe,
Dirk.
(…und nicht nur das bin ich, sondern auch jenes…)
P.S. Für alle Interessentierten:
function Test(Name){
if(Name.length<3){alert(„Name zu kurz“);return false}
else{Name=sauber(Name)}
var req=false; var URL=„usrcheck.php“;
if (window.XMLHttpRequest){req=new XMLHttpRequest()}
else {req=new ActiveXObject(„Microsoft.XMLHTTP“)}
if (!req){return false}
req.open(„GET“, URL+"?" + Name , true);
req.onreadystatechange=function() {
if(req.readyState==4 && req.status==200) {
if(req.responseText==„nein“){
alert(Name + " bereits vergeben");
document.getElementById(‚FormsEditField2‘).value="";
}
else{document.getElementById(‚FormsEditField2‘).value=Name;}
}
}
req.send();
}
function sauber(dname){
var nein = new Array(‚ä‘,‚ö‘,‚ü‘,‚ß‘);
var ja = new Array(‚ae‘,‚oe‘,‚ue‘,‚ss‘);
dname=dname.toLowerCase();
for (var i=0; i<nein.length;i++){
var reg = new RegExp(nein[i], ‚g‘);
dname=dname.replace(reg, ja[i]);
}
var patt = new RegExp(’[^.a-z0-9-]’, ‚g‘);
dname=dname.replace(patt, „_“);
return dname;
}
Und in der php wird bei vorhandenem Namen in der DB ein deftiges „nein“ zurück-gegeben per echo.
ich tobe mich grade so richtig aus und freue mich darüber, welche Möglichkeiten es gibt.
Im Augenblick lass ich die Überprüfung bei onkeyup starten und dadurch, dass ich die Skripte auf einem schnellen Server habe wird nahezu in Realtime das Ergebnis angezeigt.
Funktioniert gut mit dem onkeyup.
Noch einen Vorschlag:
die visibility-Änderungen 1x in eine Funktion schreiben
und diese mit der ID (A,B,C oder D) aufrufen.
z.B.: aendern(‚B‘)