PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL und JavaScript???



Swola4
25.04.2009, 19:09
Hallo, ich komme bei einem Problem leider nicht weiter...
Ich bin gerade dabei eine Registrationsseite zu erstellen.
Ich möchte, dass wenn man bei nickname, seinen nickname einträgt direkt überprüft wird, ob so ein nickname schon bereitz vorhanden ist oder nicht. Falls dieser vorhanden sein sollte, soll eine Error-Message ausgegeben werden.

ich habe schon ein bischen rumgeguckt und habe eine seite gefunden, bei der es so ist, wie ich es auch haben möchte...
http://diestaemme.de/register.php

habe natürlich bei denen im quellcode ein bischen rumgeguckt und folgendes script gefunden
function checkInput(type, value) {
var url = 'register.php?ajax=check_input';
var jSonRequest = new Request.JSON({url: url, onComplete: function(data) {
$(type + '_error').set('text', data.status == 'OK' ? '' : data.message);
}}).post({json: JSON.encode({type:type, value:value})});
}


Leider werde ich da nicht so ganz schlau raus.

Kann mir bitte jemand zumindest einen Tipp geben, wo ich ansetzten kann?
Und ist das mit javascript überhaupt möglich ? oder muss ich da auch auf ajax ausweichen ?

Hoffe ihr habt verstanden wo mein Problem liegt :)

Schon mal danke im Vorraus, falls jemand helfen kann

GregorSamsa
25.04.2009, 19:20
Das Script hängt mit dem JSON Javascript Framework zusammen - primär brauchst du SQL und kein JS zum überprüfen

Swola4
25.04.2009, 19:29
Ich habe jetzt gedacht,mit der funktion OnChange lässt man ein Script starten, welches eine Select-Abfrage mit einer Bedingung wo Username == $username ist macht. Wenn etwas gefunden wird dann soll der die error msg. ausgeben wenn nicht, dann halt nicht.
Aber wie kann ich mit javascript zu meiner Datenbank verbinden ??
Außerdem würde man dann doch die Datenbank-Daten sehen, was nicht gerade zur Sicherheit der Seite beitragen würde ^^

VeN0m
25.04.2009, 19:35
Das ist AJAX. Also Javascript + XML. Du sendest einen Request per AJAX an ein PHP-Script, welches sich etwas aus der Datenbank sucht und das Ergebnis dann dem Javascript mitteilt, welches wiederrum sein Ergebnis auswertet auf die Weise, wie Du es möchtest. Ich habe auf einer Seite ein Script laufen, welches es erlaubt News zu bewerten. Beim Klick auf einen Stern werden die Berechnungen und Abfragen im Hintergrund ausgeführt. Nach wenigen Millisekunden ist das Ergebnis berechnet und die Anzahl der Sterne und die Anzahl der Wähler berechnet sich neu. Ohne die Seite neu zu laden...

Siehe mal dieses Tutorial (http://ajax.frozenfox.at/ajax_001.html) an dann weißt Du, was ich meine. In dem PHP-Script wird aber eine Anfrage ausgeführt an MySQL und kein strtoupper(), wie im zweiten Beispiel des Tutorials. Auch muss die URL etc. angepasst werden. Aber das Script ist nahezu perfekt.
Ach... Nimm das Script aus Beispiel 2. Das erste ging bei mir nicht.

Swola4
25.04.2009, 19:45
Alles klar, vielen Dank...
Ich schaue es mir gleich mal an und versuche es mal
:)

VeN0m
25.04.2009, 20:00
Ich habs schon und es geht. Habs spaßeshalber mal gebastelt...

check.js:




<!--

function lookfor(value) {
// Request erzeugen
if (window.XMLHttpRequest) {
request = new XMLHttpRequest(); // Mozilla, Safari, Opera
} else if (window.ActiveXObject) {
try {
request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
} catch (e) {}
}
}

// überprüfen, ob Request erzeugt wurde
if (!request) {
alert("Kann keine XMLHTTP-Instanz erzeugen");
return false;
} else {
var url = "check.php";
// Request öffnen
request.open('post', url, true);
// Requestheader senden
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Request senden
request.send('para='+value);
// Request auswerten
request.onreadystatechange = interpretRequest;
}
}

// Request auswerten
function interpretRequest() {
switch (request.readyState) {
// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
case 4:
if (request.status != 200) {
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
} else {

var content = request.responseText;
// den Inhalt des Requests in das <div> schreiben
document.getElementById('1').innerHTML = content;

}
break;
default:
break;
}
}


//-->



Bei der zweiten Funktion, interpretrequest wird in das DIV mit der ID 1 das geschrieben, was die check.php dem JS mitteilt (request.responseText).
Abgeändert werden müsste ggf. die Div-ID und die URL weiter oben, an die der Request gehen soll. Ein Div ist übrigens nicht nötig: Es kann auch font, p etc. sein.

look.php (enthält das Inputfeld):




<?php

print "<script src=\"check.js\"></script>";

print "<div id=\"1\">&nbsp;</div><form><input type=\"text\" onKeydown=\"lookfor(this.value)\"></form>";

?>



Muss natürlich angepasst weden... Die Funktion prüft, ob das, was in dem Feld steht in der Userstabelle gefunden wird. Das ganze geht per onKeydown (wenn eine Taste gedrückt wird). Dafür wird lookfor(this.value) verwendet. Also ziemlich einfach.

check.php (die Auswertung und der Empfang des Requests):




<?php

header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0');


$para = $_POST['para'];
$query = "SELECT user_id FROM `users` WHERE `users`.`user_name` LIKE '".$para."'";

if(mysql_query($query)) {

print "username existiert bereits!";

} else {

print "";

}

?>



Wie man sieht sehr einfach. Wenn die Mysql-Anfrage erfolgreich ist wird per print "" ein Fehler ausgegeben. Wenn nicht halt garnichts. Ob die oben genannte onKeydown-Methode so gut ist weiß ich nicht. Weil leider wird das ganze erst erkannt, wenn man noch ein weiteres Zeichen eingibt. Vielleicht ist onChange besser. Die Mysql-Daten müssen natürlich angepasst werden bzw. erstmal eine Verbindung hergestellt werden.

Natürlich muss das ganze angepasst werden an Dein System. Aber immerhin... ;) Viel Spaß damit :).

PS.: Bedenke: Das ganze bedeutet einen Query pro Tastendruck! Also ziemlich viel. Aber es ist sicher hilfreich. Man registriert sich ja nicht so oft... ;)

Swola4
25.04.2009, 20:06
Wow, danke schön... hast mir echt sehr geholfen ;)

VeN0m
25.04.2009, 20:13
Absoulut kein Problem. Hauptsache es geht. Ich hatte es an einem E107-System getestet, wo ich die Verbindungsdaten nicht extra ziehen wollte. Daher hoffe ich mal, dass die Auswertungsdatei noch korrekt ist. Alles andere sicherlich, dafür kann ich garantieren ;).
Viel Spaß damit.

K1ngC0bra
29.04.2009, 15:22
Power-Sven (http://free-hack.com/member.php?u=52873)'s Mehtode ist wirklich sehr gut, verwende solch eine Methode sehr oft auf verschiedenen Websites (Stichwort: Ajax)

Alles geklärt => Close <= Bei Fragen PM