login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Form valideren dmv javascript en php

Offline Ultimatum - 06/10/2008 12:04
Avatar van UltimatumPHP expert Ey, ik ben nu bezig met een formulier dat dmv javascript gevalideerd moet worden. Ik gebruik het framework mootools maar als iemand een oplossing weet zonder mootools of met een ander framework dan is dat ook welkom.

Wat ik probeer is om een formulier te submitten dmv ajax wat me ook lukt, ik heb een php pagina waar ik alle validaties doe en die stop ik een array met 2 keys, de eerste is het "hoofdstuk" en de 2de key is de naam van het veld. Nu genereer ik dmv mootools een div onder de textbox maar daar moet nu de fout die in de array staat als text in die div komen te staan, maar hoe doe ik dat? Ik weet dus niet hoe ik de php array in de javascript file ga kunnen gebruiken.

Hopelijk kan iemand me helpen.

11 antwoorden

Gesponsorde links
Offline Erwt - 06/10/2008 12:12
Avatar van Erwt PHP beginner Post de relevante code even op plaatscode als je wilt. Verder, ik ben niet bekend met mootools maar wanneer je van ajax de waardes terug krijgt zou je met een meegegeven id gewoon het volgende kunnen doen toch:

  1. var reponse = XMLHttp.responseText;
  2. document.getElementById("divnaam").innerHTML = response;


Hier ga ik ervan uit dat je het AJAX object XMLHttp hebt genoemd.
Je zou de php pagina de div kunnen laten echo'en met de bepaalde foutcode..

Of snap ik je niet? 
Offline Ultimatum - 06/10/2008 13:07 (laatste wijziging 06/10/2008 13:07)
Avatar van Ultimatum PHP expert Hoe kan ik dan de div op precies de goede plaats in het formulier laten zien?

Verder ziet de javascript er niet boeiend uit, ik het dit nu:
  1. $('intakeform').addEvent('submit', function(event) {
  2. //Prevents the default submit event from loading a new page.
  3. // Dit stuk komt van de demo site op mootools zelf
  4. event.stop();
  5. //Empty the log and show the spinning indicator.
  6. var log = $('log_res').empty().addClass('ajax-loading');
  7. //Set the options of the form's Request handler.
  8. //("this" refers to the $('myForm') element).
  9. this.set('send', {url: 'intake.php', method: 'post', onComplete: function(response) {
  10. log.removeClass('ajax-loading');
  11. log.set('html', response);
  12. }});
  13.  
  14. //Send the form.
  15. this.send();
  16. //Hier genereer ik nieuwe div en gooi een img achter de textbox
  17. $('aanmelder-tussenvoegsel').adopt(new Element('img', {src: '/resources/img/exclamation.gif', alt: 'exclamation'}));
  18. var error = new Element('div', {class: 'error', text: 'Test'}).setStyle('display', 'block').inject('aanmelder-tussenvoegsel', 'after');
Offline Erwt - 06/10/2008 13:18 (laatste wijziging 06/10/2008 13:30)
Avatar van Erwt PHP beginner Wat je kan doen is een 'naam of id' meegeven. Stel je voor dat de naam of id van de verkeerde is: emailfout.

Als je in je formulier een divje maakt met de naam emailfout die gewoon leegblijft en die je dus later vult met innerHTML bijv..
Offline Ultimatum - 06/10/2008 13:30
Avatar van Ultimatum PHP expert Die div heb ik al, maar HOE kan ik die div vullen met een value van de array uit de php pagina? Dat is mijn probleem die ik niet kan oplossen .
Offline Erwt - 06/10/2008 13:36 (laatste wijziging 06/10/2008 13:43)
Avatar van Erwt PHP beginner Je stuurt met ajax de naam van het verkeerde divje mee en wat er in dat divje moet staan, je zou dan het volgende kunnen echo'en:

emailfout,Dit is geen juist e-mail adres.

Later kan je dan in javascript hem uit elkaar trekken met arrays.. dat werkte met .split maar dat zou je even na moeten zoeken.

oftewel:

  1. echo $_GET["naam_van_foute_input"] . "," . $omschrijving_van_fout;


en dan bij het stukje van je ajax:

  1. xmlHttp.onreadystatechange=function()
  2. {
  3. if(xmlHttp.readyState==4)
  4. {
  5. // hier even xmlHttp.responseText splitten naar een array.
  6. document.getElementById(array[0]).innerHTML = array[1];
  7. }
  8. }
Offline Ultimatum - 06/10/2008 13:42 (laatste wijziging 06/10/2008 13:43)
Avatar van Ultimatum PHP expert Ik snap je nog niet helemaal, zou je misschien iets van een voorbeeld ofzo kunnen maken. Dit is een stuk van mijn php file die alles valideert:
  1. <?php
  2. # [================================================================================================================] #
  3. if(!empty($_POST['aanmelder-voornaam']) && preg_match('/^[a-zA-Z0-9]+$/', $_POST['aanmelder-voornaam'])) {
  4. return true;
  5. } else {
  6. $aErrors['aanmelder']['voornaam'] = 'Het veld `voornaam` is verplicht en mag alleen uit letters en cijfers bestaan.';
  7. }
  8.  
  9. # [================================================================================================================] #
  10. if(!empty($_POST['aanmelder-achternaam']) && preg_match('/^[a-zA-Z0-9]+$/', $_POST['aanmelder-achternaam'])) {
  11. return true;
  12. } else {
  13. $aErrors['aanmelder']['achternaam'] = 'Het veld `achternaam` is verplicht en mag alleen uit letters en cijfers bestaan.';
  14. }
  15.  
  16. # [================================================================================================================] #
  17. if(!empty($_POST['aanmelder-voorletters']) && preg_match('/^[a-zA-Z0-9]+$/', $_POST['aanmelder-voorletters'])) {
  18. return true;
  19. } else {
  20. $aErrors['aanmelder']['voorletters'] = 'Het veld `voorletters` is verplicht en mag alleen uit letters en cijfers bestaan.';
  21. }
  22. ?>


En dit is de html die ik heb
  1. <div class="left">Voornaam:</div>
  2. <div class="right"><input type="text" name="aanmelder-voornaam" class="naam" value="" /></div>
  3. <div class="error" id="aanmelder-voornaam"></div>
  4.  
  5. <div class="left">Tussenvoegsel:</div>
  6. <div class="right"><input type="text" name="aanmelder-tussenvoegsel" class="naam" value="" /></div>
  7.  
  8. <div class="left">Achternaam:</div>
  9. <div class="right"><input type="text" name="aanmelder-achternaam" class="naam" value="" /></div>
  10. <div class="error" id="aanmelder-achternaam"></div>
  11.  
  12. <div class="left">Voorletter(s):</div>
  13. <div class="right"><input type="text" name="aanmelder-voorletters" class="naam" value="" /></div>
  14. <div class="error" id="aanmelder-voorletters"></div>


Dus als je me een opzetje zou kunnen geven zou ik je erg dankbaar zijn .
Offline Erwt - 06/10/2008 13:52
Avatar van Erwt PHP beginner Zowieso kan ik nu geen hele verhalen gaan typen i.v.m mijn stage maar ben zeker bereid te helpen hoor.. ik ben namelijk ook bij hetzelfde punt als jij en was ook hulp nodig.

je div naam heeft als id: aanmelder-voornaam

Nu moet je met AJAX die NAAM + VALUE meegeven. dus dan wordt de link van de get bijvoorbeeld:

  1. decode.php?aanmelder-voornaam=document.getElementById("aanmelder-voornaam").value;


Dus nu krijgt het php bestand beidde informatie mee.

In het php bestand check je bij je aanmelder-voornaam of deze juist is. Als deze NIET juist is moet hij het volgende echo'en:

  1. echo "aanmelder-voornaam,de foutmelding";


nu krijgt javascript dit binnen via xmlHttp.responseText.. en dan trek je het uit elkaar en schrijf je het met innerHTML.

Het is nogal lastig hoe ik het formuleer.. het moet hier even snel snel en daarom wordt het een beetje een bende.
Offline jvs - 06/10/2008 14:08 (laatste wijziging 06/10/2008 14:09)
Avatar van jvs HTML beginner Voor dit soort problemen kan je beter gebruik maken van JSON response ipv html response. Hierdoor genereer je met php een soort van array die je met JS kan uitlezen. Ik weet niet hoe het exact in zijn werk gaat, dat zal je even zelf moeten uitvogelen.

Veel succes iig!
Offline Ultimatum - 06/10/2008 14:18
Avatar van Ultimatum PHP expert @jvs, hoezo kan ik beter json dan gebruiken, wat is het voordeel?
@Erwt, bedankt voor je antwoord, maar ik heb ruim 30 velden en er is zijn ook blokken die net zo vaak dynamsich aangemaakt kunnen worden als dat de gebruiker nodig heeft dus kan ik niet statisch de get vullen.
Offline Erwt - 06/10/2008 14:24
Avatar van Erwt PHP beginner Tjah ok, hier is dan ook wel weer een oplossing voor maar hier zou ik zelf eerst naar moeten kijken ben op 't moment nog een beetje druk met mijn eigen probleem.

Veel succes nog en als er nog iets anders is of je bent iets verder dan hoor ik het graag van je.
Offline jvs - 06/10/2008 16:11
Avatar van jvs HTML beginner Als je JSON gebruikt heb je meteen een array waar JS iets mee kan doen. Dus hoef je niet eerst nog split te gebruiken om er dan arrays van te maken. Ik dacht ook dat JSON response een pak sneller was dan een html response maar ik kan me vergissen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.239s