Überprüfung ob Benutzername schon existiert

Liebe Gemeinde,
(wie in der Kirche) *lach*

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 :frowning:
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 :smile:

Dirk.

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 :smile:

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 :wink:

Hallo Dirk,

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();
}
}

h♥rzlichen Gruß
Nitya

Ahhh, Du bist ein Engel. Danke Dir :smile:
Werde ich gleich am Montag ausprobieren und dann nochmal posten…

Jetzt sind doch schon ein paar Fragen vorab aufgetaucht. Ich frage lieber bevor ich loslege, damit es nicht an ein paar Typos scheitert
:wink:

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();
}
}

h♥rzlichen Gruß
Nitya

Hallo Dirk,

req.open(„GET“, URL+"?" + Name , true);

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.

h♥rzlichen Gruß
Nitya

Irgendwas übersehe ich…
Hallo,

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
}

}
req.send();
}
}

Und dazu ein kleines usrcheck.php:

<?php $usrcheck=$_SERVER["QUERY_STRING"];<br />echo $usrcheck;
?\>

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 :frowning:
Was übersehe ich?
Danke nochmal für die Hilfe…

Dirk.

Hallo Dirk,

da ist nach req.send() eine schließende Klammer „}“ zuviel.

h♥rzlichen Gruß
Nitya

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?

Dirk.
(Om mani padme hum)

mmmhhh …
die meisten Fehler sind syntax bedingt.
Die Fehlerkonsolen geben hier schon oft den richtigen Hinweis.
(ich schicke Dir per PM einen Link)

h♥rzlichen Gruß
Nitya
(SO HAM)

Oh wahnsinn, es funzt.
Danke Dir :smile:

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.

Hallo Dirk,

das war ja nur ein „Beispiel“ für:
welche Usernamen akzeptiert werden (und mit JS überprüft/konvertiert werden) und wie der Request ausgelöst wird

Tendiere eher dazu die Wahl und Überprüfung des Names vom Registrier-Formular zu trennen und durch den Nutzer auslösen lassen.

Es gibt viele Möglichkeiten … magst Du nehmen, welche Dir beliebt.

h♥rzlichen Gruß
Nitya
(shanti)

Liebe Nitya,

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.

 Zu kurz! 
 Frei! 
 Vergeben! 

und im Skript (z.B. bei „vergeben“):

if(req.responseText=="1"){
// alert(Name + " bereits vergeben");
 document.getElementById('A').style.visibility = "hidden";
 document.getElementById('B').style.visibility = "hidden";
 document.getElementById('C').style.visibility = "hidden";
 document.getElementById('C').style.visibility = "visible";
 document.getElementById('FormsEditField2').value=Name;
 return false;}

Dadurch wird sofort der Status eingeblendet und die bereinigte Variable in die Form eingesetzt.

Hier habe ich es mal testweise hochgesetzt.
http://www.tantra-massage.de/test.html
„namyo“ ist z.B. vergeben.

Dein Script hat mir viel Arbeit gespart und öffnet mir nun alle Möglichkeiten - danke nochmal.

Alles Liebe,
Dirk.

P.S. Wenn Du magst würde ich Dir eine kleine Überraschung per Post schicken. Falls Du also willst, dann schicke mir Deine Postanschrift per PM.

Hallo Dirk,

öhm … habe einen lingam :smile:)

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‘)


function aendern(ID){
document.getElementById(‚A‘).style.visibility = „hidden“;
document.getElementById(‚B‘).style.visibility = „hidden“;
document.getElementById(‚C‘).style.visibility = „hidden“;
document.getElementById(‚D‘).style.visibility = „hidden“;
document.getElementById(ID).style.visibility = „visible“;
}

h♥rzlichen Gruß
Nitya ♂

Jaaa, und?
Ich wollte ja auch nicht Maithuna machen, sondern Dir eine nette Aufmerksamkeit schicken *lach*
Keine Bange - ist keine Anmache :smile:

Dirk.

Hallo Dirk,

das ist ja nett von Dir, aber wirklich nicht nötig.
Bange war mir nicht … nur … ich bin halt keine liebe, sondern ein lieber :smile:)

h♥rzlichen Gruß nach Belzig … auch an die Ölwanne
Nitya

:smile:
*lach*
Wir sind ja sowas von Off-Topic :-\
Liebe Grüße zurück.

Alles Liebe aus BAD Belzig,
Dirk.

*lach* mit

Wir sind ja sowas von Off-Topic :-\

wieso? … ist doch type=„tantra/javascript“

Alles Liebe aus BAD Belzig,

BAD? … rundum Belzig überall Kiefer-Wald :smile:

h♥rzlichen Gruß
Nitya