Gebruikerscontrole (ajax) werkt alleen met ongewenste alert()
ik heb een javascriptje geschreven wat moet controleren of een gebruikersnaam al bestaat (ajax).
Nu ben ik zover dat het werkt. Maar het gekke is dat het alleen werkt met een test-alert. Zodra ik deze alert verwijder, werkt het helemaal niet meer.
Misschien iemand een oplossing?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<script>
function validateFormStep1() {
var usertype;
for( i = 0; i < document.registration.usertype.length; i++ ) {
if(document.registration.usertype[i].checked) {usertype = document.registration.usertype[i].value; break;}
}
//var usertype = document.forms["registration"]["usertype"].checked.value;
var username = document.forms["registration"]["login-name"].value;
var usermail = document.forms["registration"]["e-mail"].value;
var password = document.forms["registration"]["password"].value;
var message = "";
//----------------------------------------------------------------------------------------------------------------
//Check if username already exists.
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if (xmlhttp.responseText == "true")
{
message = message + username + " already exists.\n";
//alert(message);
//return false;
}
} //else {alert("status " + xmlhttp.readyState + " http status" + xmlhttp.status);}
}
xmlhttp.open("GET","checkuser.ajax.php?username="+username,true);
xmlhttp.send();
alert("Zodra ik dit weghaal werkt het niet meer");
//Pause
//------------------------------------------------------------------------------------------------
//Username criteria (mandatory).
if (username.length == 0) {message = message + "Login-name is a mandatory field.\n";} //Mark this line to make field optional.
if (username.length != 0) {
if (
!(username.match(/^[0-9a-zA-Z]+$/)) || //Only these characters allowed.
false) {message = message + username + " is not a valid name.\n";}
}
//-------------------------------------------------------------------------------------------------
//E-mail criteria (mandatory).
if (usermail.length == 0) {message = message + "Email is a mandatory field.\n";} //Mark this line to make field optional.
if (usermail.length != 0) {
var apepos = usermail.indexOf ('@',1); //Position of the first apetail and apetail cannot be 1st position.
var dotpos = usermail.lastIndexOf ('.'); //Position of the last dot.
var apenum = (usermail.match(/@/g)||[]).length; //Count apetails.
if (
!(usermail.match(/^[0-9a-zA-Z\&\@\.\-]+$/)) || //Only these characters allowed.
apepos == -1 || //Apetail MUST be present.
dotpos == -1 || //Dot MUST be present.
apenum != 1 || //Apetail must be present only once.
apepos>dotpos || //Apetail may not be after last dot.
usermail.charAt(0) == '.' || //First character may not be a dot.
usermail.charAt(usermail.length-1) == '.' || //Last character may not be a dot.
usermail.charAt(apepos+1) == '.' || //First character after apetail may not be a dot.
usermail.charAt(apepos-1) == '.' || //Last character before the apetail may not be a dot.
false) {message = message + usermail + " is not a valid e-mail address.\n";}
}
//-----------------------------------------------------------------------------------------------------
//Password criteria (mandatory).
if (password.length == 0) {message = message + "Password is a mandatory field.\n";} //Mark this line to make field optional.
if (password.length != 0) {
if (
!(password.match(/^[0-9a-zA-Z]+$/)) || //Only these characters allowed.
password.length < 6 || //Length must be at least 6 characters.
false) {message = message + "Password must be at least 6 characters long and may contain only letters or numbers.\n";}
}
//----------------------------------------------------------------------------------------------------
//Display alert message on screen when one or more field does not match criteria.
if (message.length > 0) {
alert(message);
return false;
} else {
//alert(usertype + "Check succesfull\n");
document.getElementById('step1').style.display = 'none';
document.getElementById('step2').style.display = 'inline';
return true;
}
}
</script>
function validateFormStep1() {
var usertype;
for( i = 0; i < document.registration.usertype.length; i++ ) {
if(document.registration.usertype[i].checked) {usertype = document.registration.usertype[i].value; break;}
}
//var usertype = document.forms["registration"]["usertype"].checked.value;
var username = document.forms["registration"]["login-name"].value;
var usermail = document.forms["registration"]["e-mail"].value;
var password = document.forms["registration"]["password"].value;
var message = "";
//----------------------------------------------------------------------------------------------------------------
//Check if username already exists.
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if (xmlhttp.responseText == "true")
{
message = message + username + " already exists.\n";
//alert(message);
//return false;
}
} //else {alert("status " + xmlhttp.readyState + " http status" + xmlhttp.status);}
}
xmlhttp.open("GET","checkuser.ajax.php?username="+username,true);
xmlhttp.send();
alert("Zodra ik dit weghaal werkt het niet meer");
//Pause
//------------------------------------------------------------------------------------------------
//Username criteria (mandatory).
if (username.length == 0) {message = message + "Login-name is a mandatory field.\n";} //Mark this line to make field optional.
if (username.length != 0) {
if (
!(username.match(/^[0-9a-zA-Z]+$/)) || //Only these characters allowed.
false) {message = message + username + " is not a valid name.\n";}
}
//-------------------------------------------------------------------------------------------------
//E-mail criteria (mandatory).
if (usermail.length == 0) {message = message + "Email is a mandatory field.\n";} //Mark this line to make field optional.
if (usermail.length != 0) {
var apepos = usermail.indexOf ('@',1); //Position of the first apetail and apetail cannot be 1st position.
var dotpos = usermail.lastIndexOf ('.'); //Position of the last dot.
var apenum = (usermail.match(/@/g)||[]).length; //Count apetails.
if (
!(usermail.match(/^[0-9a-zA-Z\&\@\.\-]+$/)) || //Only these characters allowed.
apepos == -1 || //Apetail MUST be present.
dotpos == -1 || //Dot MUST be present.
apenum != 1 || //Apetail must be present only once.
apepos>dotpos || //Apetail may not be after last dot.
usermail.charAt(0) == '.' || //First character may not be a dot.
usermail.charAt(usermail.length-1) == '.' || //Last character may not be a dot.
usermail.charAt(apepos+1) == '.' || //First character after apetail may not be a dot.
usermail.charAt(apepos-1) == '.' || //Last character before the apetail may not be a dot.
false) {message = message + usermail + " is not a valid e-mail address.\n";}
}
//-----------------------------------------------------------------------------------------------------
//Password criteria (mandatory).
if (password.length == 0) {message = message + "Password is a mandatory field.\n";} //Mark this line to make field optional.
if (password.length != 0) {
if (
!(password.match(/^[0-9a-zA-Z]+$/)) || //Only these characters allowed.
password.length < 6 || //Length must be at least 6 characters.
false) {message = message + "Password must be at least 6 characters long and may contain only letters or numbers.\n";}
}
//----------------------------------------------------------------------------------------------------
//Display alert message on screen when one or more field does not match criteria.
if (message.length > 0) {
alert(message);
return false;
} else {
//alert(usertype + "Check succesfull\n");
document.getElementById('step1').style.display = 'none';
document.getElementById('step2').style.display = 'inline';
return true;
}
}
</script>
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Alvast bedankt!
Alvast bedankt!
Gewijzigd op 30/01/2014 12:05:42 door - Ariën -
Leg eens uit wat 'werkt niet meer' inhoudt. Doet het helemaal niets meer, nog maar een deel, etc?
Als ik de // voor de else (status controle) weghaal, moet ik 4x klikken voordat ik status 4 krijg.
Zou het script te snel gaan? Of iets in verkeerde volgorde? Heb het voorbeeld van w3c.
Maar als de alert() er in staat werkt alles perfect, alleen natuurlijk niet zo handig voor de gebruiker he.
Sorry Aar, ik war er speciaal naar aan het zoeken maar was weer vergeten dat het <code> was.
Er staan wel knopjes voor bv. link en zo maar niet voor <code>. Ik d8 dat het <script> was.
Misschien even erbij zetten in tekst???
Oplossing:
1) zorg dat al je code die afhankelijk is van het resultaat van de ajax call pas wordt aangeroepen vanuit de succes functie (zeg maar op regel 28)
2) zorg dat je OOK op de server alle checks uitvoert. Als jij zegt dat je opeens wel een dubbele naam kunt invoeren dan voer je die check dus niet op de server uit en dat is altijd verkeerd. Iemand die namelijk willens en wetens javascript uitzet in zijn browser (of uberhaupt probeert je dwars te zitten) komt er dan ook niet voorbij.
Gewijzigd op 30/01/2014 12:39:09 door Erwin H
Maar heb dan aleen in dit geval een logica probleem.
Als ik dan e-mail of ww veld leeg laat wordt deze als de naam NIET dubbel is ook niet gecontroleerd of deze leeg is.
Maar ik begin nu wel te begrijpen waar het probleem zit.
Bedankt Erwin
== Update ==
Gelukt heb de overige code tussen de juiste accolades gezet.
==== By the way ===
Als de users javascript uitschakelen is het ook onmogelijk om bij de uiteindelijke verzendknop te komen.
Aangezien via javascript ook de bstaande stap uitgeschakeld worden en de volgende stap wordt ingeschakeld.....
Gewijzigd op 30/01/2014 14:00:15 door Rene Wennekes
De 'by the way' is relevant voor mensen die alleen javascript uitzetten, maar verder geen kwaad in zin hebben. Mensen die je database willen verneuken laten zich daar ook niet door afschrikken, nog steeds serverside checken dus.
In ieder geval werkt alles perfect nu.