Skie
22.07.2008, 20:12:40
Witam,
Mam prosty formularz rejestracyjny na stronie, którego pola są sprawdzane za pomocą JS. I schodki zaczynają się w przypadku sprawdzania nicka usera. Nie mam zielonego pojęcia jak wprowadzić do mojego skryptu funkcję która by sprawdzała czy dany nick istniaje już w bazie danych czy też nie. Jak Wy rozwiązaliście ten problem?
vokiel
23.07.2008, 08:08:34
Np sprawdzając w bazie czy jest już taki login zwykłym selectem (SELECT `ID` FROM `USERS` WHERE `LOGIN`=$login;), albo poprzez insert i sprawdzenie wyniku działania: jeśli wstawił - takigo loginu nie było, a jeśli nie - to sprawdzenie czy pojawił się błąd typu 'Duplicate entry for key...' (oczywiście musisz mieć założony unikat na kolumne login)
Jeśli sprawdzasz formularz javascriptem, to możesz użyć ajaxa, który po opuszczeniu pola z loginem sprawdzi czy już taki jest w bazie.
webasek
23.07.2008, 08:13:23
Metodą najlepszą jest użycie ajaxa jednak jeśli nie umiesz to wczytaj do tablicy w js nicki z twojej tabeli a potem przeszukaj tabelę w js za pomocą prostego for i if. Jednak mało efektywna taka funkcja przy dużej liczbie userów.
Skie
23.07.2008, 13:37:07
Myślałem nad tym by zrobić to w taki sposób:
Ajaxem uruchomić plik PHP, który sprawdziłby czy dany nick jest już w bazie. Jeżeli tak to tworzyłby niewidoczny div o zawartości true, albo jeżeli nie to zawartość byłaby false. Potem Ajax by sprawdzał zawartość tego div'a i generował odpowiedni komunikat. Czy jest to dobre wyjście?
mike
23.07.2008, 13:49:36
Hmm, czyli
ajax sprawdza bazę -> generuje diva -> sprawdza jego zawartość -> wyświetla komunikatlub
ajax sprawdza bazę -> wyświetla komunikat?
To teraz sam pomysl co lepsze
Skie
23.07.2008, 16:05:00
No tak, ale jak pobrać do Ajaxa wynik działania PHP inaczej niż przez stworzenie niewidocznego diva? ;p
I dokładnie rzecz biorąc to byłoby tak:
Ajax otwiera plik PHP -> [PHP] sprawdza dostępność nicka -> [PHP] generuje diva o zawartości true/false -> [AJAX] pobiera zawartość diva -> [AJAX] wyświetla odpowiedni komunikat
vokiel
24.07.2008, 08:48:43
Po prostu:
Ajax otwiera plik PHP -> [PHP] sprawdza dostępność nicka i zwraca true/false -> [AJAX] (funkcja zwrotna js) wyświetla odpowiedni komunikat w zależności od tego co zwraca PHP
Trojan
16.08.2008, 21:28:22
Właśnie zrobiłem sobie taki formularz u mnie wygląda to tak (tak jak napisał vokiel ):
<script type="text/javascript">
//bez tego niedziała na IE :/
var ObiektXMLHttp = false;
if (window.XMLHttpRequest){
ObiektXMLHttp = new XMLHttpRequest();
}else if(window.ActiveXObject){
ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
//Sprawdzanie Loginu (1-login zajety) (0-login wolny)
function sprawdz(wartosc){
if(ObiektXMLHttp){
//pobieranie danych
ObiektXMLHttp.open("GET", 'sprawdz.php?wartosc='+wartosc);
ObiektXMLHttp.onreadystatechange = function(){
if(ObiektXMLHttp.readyState == 4){
var i = ObiektXMLHttp.responseText;
//gdy dane pobrane
if(parseFloat(i) == 1){
alert('Login '+wartosc+' zajęty');
}else if(parseFloat(i) == 0){
alert('Login '+wartosc+' wolny');
}
}
}
ObiektXMLHttp.send(null);
}
}
</script>
<input name="login" type="text" onblur="sprawdz(this.value);">
<?php
//zawartosc pliku sprawdz.php
$wartosc = $_GET['wartosc'];
$db_baza = '******';
$db_user = '******';
$db_pass = '******';
$db_host = '******';
?>
mam nadzieje ze pomogłem (o ile problem nie został już rozwiązany)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.