login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Ajax form check (Opgelost)

Offline aapjuh - 24/05/2009 22:56 (laatste wijziging 25/05/2009 23:25)
Avatar van aapjuhLid Goedenavond,

Ik heb een leuk contact formuliertje gemaakt, allemaal leuk en aardig maar wat saai. Dus wil ik er met AJAX voor zorgen dat ik onmiddelijk kijk of de ingevulde waardes goed zijn.
  1. function check_field($input, $field) {
  2. if (strlen($input) < 3) {
  3. global $error, $send;
  4. $msg = "Your ".$field." should be atleast 3 characters long.";
  5. $error .= "<br>* ".$msg;
  6. $send = false;
  7. return $msg;
  8. }
  9. else {
  10. $msg = "This field is filled in correctly.";
  11. return $msg;
  12. }
  13. }
  14. if ($_POST['ajax'] == "true") {
  15. echo check_field($_POST['input'], $_POST['field']);
  16. }
  17. elseif ($_POST['send'] == "true") {

Dit is de relevante php code, en dan nu het javascript gedeelte:
  1. function newRequest() {
  2. var req;
  3. if (window.XMLHttpRequest) {
  4. req = new XMLHttpRequest();
  5. }
  6. else if (window.ActiveXObject) {
  7. req = new ActiveXObject("Microsoft.XMLHTTP");
  8. }
  9. else {
  10. alert('Problem creating the XMLHttpRequest object');
  11. }
  12. return req;
  13. }
  14. function CheckField(query, name) {
  15. http = newRequest();
  16. http.open('POST', '/Steven/contact.php', true);
  17. http.onreadystatechange = ShowValidation(name);
  18. http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  19. http.send(query);
  20. }
  21. function ShowValidation(name) {
  22. if (http.readyState == 4 && http.status == 200) {
  23. document.getElementById('valid'+name).innerHTML = http.responseText;
  24. }
  25. }


Het is misschien wat veel, sorry hiervoor. Kleine toelichting:
Met check_field valideer ik het veld, met een succes of error message als return.
Daaronder kijk ik of de post['ajax'] geset is, zoja: dan vraagt ajax een check op, en dan krijgt hij die.
Anders zal de gebruiker waarschijnlijk koppig op submit hebben gedrukt, en check ik alles.

Bij de input van mijn formulier staat:
onkeyup="CheckField(ajax=true&input=this.value&field=this.name,this.name);"

hiermee stuur ik dus $_POST['ajax'] = true etc naar contact.php
Teminste als alles goed zou gaan, maar dat gaat het dus niet.

Verder kan ik met firebug geen errors vinden (hoewel ik firebug nog niet echt werkend heb gezien met javascript).

Hoop dat iemand me kan helpen met deze lange post, mijn dank is groot.

Een live voorbeeld is trouwens hier te zien.

4 antwoorden

Gesponsorde links
Offline MiST - 24/05/2009 22:59
Avatar van MiST Lid waarom ajax gebruiken als JavaScript validatie methodes heeft? 

Je kan toch veel makkelijker gwn client-sided checken op geldigheid?

Regular expressions, truecases, lengtes, you name it...
Offline aapjuh - 24/05/2009 23:11 (laatste wijziging 25/05/2009 13:29)
Avatar van aapjuh Lid Nja het is veelal omdat ik het AJAX gebeuren wil leren begrijpen.
Mijn volgende stap is om te kijken of de naam van de gebruiker voorkomt in een database, etc etc.

Een (... < 3) check is inderdaad makkelijk zat met gewoon js op te lossen. Dat snap ik =P

Ik heb al een foutje gevonden: aangezien ik een external js bestand gebruik moest ik javascript: voor CheckField zetten, dit heb ik nu gedaan. Helaas doet het script het nog steeds niet.

Ondertussen heb ik ook niet stil gezeten:

Ik heb het even geprobeerd door middel van http.open('GET', 'contact.php?'+query);

En als ik nu handmatig naar bijv de check ga dan werkt de php code verder fijn (Hij echo'd nu wel even debug).

Heb ook wat alertjes in het javascript gedeelte geplaats, en het lijkt erop dat hij niet eens bij CheckField komt :x
Offline Threetimes - 25/05/2009 14:13
Avatar van Threetimes PHP beginner
Citaat:
Fatal error: Call to undefined function getip() in /home/w4958582/domains/stevenhack.nl/public_html/Steven/contact.php on line 55
Waar wordt die functie gedefinieerd?
Worden de juiste bestanden wel/niet geincluded?
Wat doet die functie?
Post die code eens...
Offline aapjuh - 25/05/2009 14:29
Avatar van aapjuh Lid hmm, dat wordt geinclude op mijn index.php:
  1. <?php
  2. include("Steven/dbconnect.php");
  3. include("Steven/functions.php");
  4. ?>

Dus vraag me af waar je dat krijgt? Als ik alles goed invult krijg ik gewoon:
Contact
Your message has been sent.

Misschien was ik net bezig met het verplaatsen, maar lijkt me sterk want heb daar niets veranderd.

In ieder geval wordt die functie gebruikt om het ip te achterhalen, die ik meestuur in mijn bericht. Zodat ik met eventueel misbruik acties kan ondernemen.

Gewoon een standaard ip get functie dus.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.447s