Gebruikerscontrole (ajax) werkt alleen met ongewenste alert()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rene Wennekes

Rene Wennekes

30/01/2014 11:54:03
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<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!
Gewijzigd op 30/01/2014 12:05:42 door - Ariën -
 
PHP hulp

PHP hulp

19/04/2024 21:57:58
 
Erwin H

Erwin H

30/01/2014 12:12:04
Quote Anchor link
Leg eens uit wat 'werkt niet meer' inhoudt. Doet het helemaal niets meer, nog maar een deel, etc?
 
Rene Wennekes

Rene Wennekes

30/01/2014 12:19:53
Quote Anchor link
Dan controleert ie niet meer of de gebruiker bestaat. Ik kan dan een gebruiker toevoegen met dezelfde naam.
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???
 
Erwin H

Erwin H

30/01/2014 12:37:53
Quote Anchor link
Dat dacht ik inderdaad al. Het probleem zit hem dan in de a van ajax. Die eerste a staat voor 'asynchronous', oftewel asynchroon. Javascript wacht dus niet op de uitkomst van de ajax call. Als jij dus op regel 35 de ajax call verstuurt, dan wordt direct daarna 36 t/m 85 uitgevoerd en pas een fractie van een seconde later zal je reply van de server aankomen. De alert echter zorgt er wel voor dat het script wordt onderbroken tot jij op de ok knop klikt. Aangezien de server waarschijnlijk sneller is werkt het dan wel.

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
 
Rene Wennekes

Rene Wennekes

30/01/2014 13:40:00
Quote Anchor link
Heb het geprobeerd. Hij checkt dan inderdaad de naam.
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
 
Erwin H

Erwin H

30/01/2014 14:30:03
Quote Anchor link
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.
 
Rene Wennekes

Rene Wennekes

30/01/2014 14:33:52
Quote Anchor link
ok zal ik doen ;-)

In ieder geval werkt alles perfect nu.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.