Ja, maar hoe? Een eventuele return value wordt niet gebruikt, dus ik neem aan dat er een andere manier is. Met exit() kun je een validatie wel stoppen, maar da's niet netjes. Verder kun je nog een exception gebruiken, maar die moet wel ergens worden opgevangen. En dan is ook nog de vraag of je doorgaat met valideren als er een veld ongeldige waarden bevat.quote:Op donderdag 20 mei 2010 02:05 schreef captaintokyo het volgende:
[..]
Dat wordt natuurlijk afgehandeld in deze functies (waarvan hij de implementatie niet toont):
$this->$method($field, $fieldvalue, $value);
ik hou een array met errors bij.quote:Op woensdag 19 mei 2010 23:10 schreef Light het volgende:
[..]
Lijkt me qua opzet helemaal niet verkeerd. Ik zie alleen niet meteen hoe je aangeeft of een validatiepoging gelukt is en wat er gedaan wordt als een validatie mislukt.
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 | /** * checks if field matched a filter * @access private * @param <string> $field * @param <string> $fieldvalue * @param <string> $filter */ private function checkFilter($field, $fieldvalue, $filter) { switch($filter) { case 'email': if(!filter_var($fieldvalue, FILTER_VALIDATE_EMAIL)) { $this->errors[$field] = $this->locale['email']; } break; case 'num': break; case 'alnum': break; case 'date': break; case 'alpha': break; default: if(!preg_match('' . $filter . '', $fieldvalue)) { $this->errors[$field] = $this->locale['regex']; } } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // hierin zit de array met de form velden en aan welke validatie ze moeten voldoen //en deze class extend de form class waarin de validatie code staat. $form = new User_Form_Register(); //a form was submitted if($this->registry->request->isPost()) { //form is valid. continue saving the user if($form->isValid($this->registry->request->getPostVars())) { $this->model->save($form->GetValues()); } //form is not valid. display it again with errors else { $this->registry->view->errors = $form->getErrors(); } } ?> |
1 |
1 |
1 |
En het idee is dat je later makkelijk een nieuw filter kunt bedenken en toevoegen? Dan zou ik die filterfuncties beperken tot de hoofdzaak, namelijk bepalen of de waarde al dan niet geldig is volgens het filter. Dat kan door true of false terug te geven. Dan hoef je, als je later een filter wilt toevoegen, niet meer uit te zoeken welke classvariabelen je moet aanpassen.quote:Op donderdag 20 mei 2010 12:35 schreef hamkaastosti het volgende:
[..]
ik hou een array met errors bij.
[ code verwijderd ]
ik moet hem nog verder afmaken maar dit is het idee voor elke checkFilterNaam
$this->locale is een array uit een geinclude php bestand.
Dus als je een veld password hebt, met als regels dat de lengte tussen 5 en 10 tekens moet zitten en dat er een cijfer en een letter in moet zitten, dan kan ik 4 keer een foutmelding krijgen dat de ingevoerde waarde niet klopt. "stop" -> te kort, min 5 tekens vereist. "chocoladefabriek" -> te lang, max 10 tekens vereist. "geheim" -> fout, moet ten minste 1 cijfer bevatten. "123456" -> fout, moet ten minste 1 letter bevatten. "g3h31m" -> goed!quote:het checken of een form valideert kan heel simpel in je controller
[ code verwijderd ]
Het werkt nu zo dat de validator alle formfields doorloopt. Zodra er in 1 field een error is skipped ie de rest van de validatie eisen voor dat veld en gaat hij door met het volgende veld. in $this->errors zitten dan per veld de eerste error die de validator vond.
Gewoon zorgen dat je alleen de bekenden velden in de database opslaat.quote:werkt als een tiet. moet alleen nog een check inbouwen dat voorkomt dat iemand de velden in de html aan gaat passen. Maar ik weet alle namen van de form velden dus dat moet geen probleem zijn.
Als ik een nieuw filter wil toevoegen dan voeg ik een extra item aan de switch toe en een voeg ik $this->locale['nieuwfilter] toe. dan zou het moeten werken. lijkt me niet al te lastig.quote:Op vrijdag 21 mei 2010 23:24 schreef Light het volgende:
[..]
En het idee is dat je later makkelijk een nieuw filter kunt bedenken en toevoegen? Dan zou ik die filterfuncties beperken tot de hoofdzaak, namelijk bepalen of de waarde al dan niet geldig is volgens het filter. Dat kan door true of false terug te geven. Dan hoef je, als je later een filter wilt toevoegen, niet meer uit te zoeken welke classvariabelen je moet aanpassen.
1 2 3 4 5 6 7 8 9 10 11 12 13 | if(!isset($this->errors[$field])) { if(!method_exists(__CLASS__, $method)) { throw new Framework_Exception($type . ' is not a valid validation type'); } if($this->$method($field, $fieldvalue, $value) == false) { $this->errors[$field] = $this->locale[$type]; } } ?> |
Ik wil graag dat ik per fout de juiste melding krijg te zien. dus veld is te kort, te lang e.d. Geen generieke melding dat het veld niet klopt. Vandaar ook de $this->locale;quote:Als een validatie mislukt, hoef je de rest van de validaties voor dat veld uiteraard niet te doen. En een eventuele melding zou je als derde parameter bij de functie addField() kunnen toevoegen. Mislukt de validatie, dan krijg je die melding te zien. Die check-functies roep je niet zelf aan, dat gaat waarschijnlijk via iets als validateField() en die kan wel zorgen dat de melding in $this->errors[] wordt geplaatst.
[..]
1 2 3 4 5 6 7 8 9 10 11 | $this->locale['required'] = 'Dit is een verplicht veld'; $this->locale['minlength'] = 'Dit veld moet minimaal %s karakters hebben'; $this->locale['maxlength'] = 'Dit veld mag maximaal %s karakters hebben'; $this->locale['equalto'] = 'Dit veld moet hetzelfde zijn'; $this->locale['email'] = 'Een geldig emailadres is vereist'; $this->locale['alnum'] = 'Vul een geldige alphanumerieke waarde in'; $this->locale['num'] = 'Vul een geldig numeriek getal in'; $this->locale['alpha'] = 'Vul enkel letters in'; $this->locale['regex'] = 'Dit veld bevat ongeldige karakters'; ?> |
Op dit moment zou je meerdere keren een foutmelding kunnen krijgen ja omdat het script stopt met valideren zodra bijvoorbeeld het veld te kort is. Ik heb zitten denken om alle fouten te verzamelen en die onder elkaar achter het veld weer te geven na een POST met fouten maar dan krijg je dingen als 'dit veld is verplicht' samen met 'dit veld moet langer dan 3 karakters zijn' en dat lijkt me ook wat krom. Ik ben wel van plan om tooltips te gaan gebruiken met daarin de eisen voor het veld. De bedoeling is dat deze class ook de benodige jquery gaat genereren om clientside validatie te doen.quote:Dus als je een veld password hebt, met als regels dat de lengte tussen 5 en 10 tekens moet zitten en dat er een cijfer en een letter in moet zitten, dan kan ik 4 keer een foutmelding krijgen dat de ingevoerde waarde niet klopt. "stop" -> te kort, min 5 tekens vereist. "chocoladefabriek" -> te lang, max 10 tekens vereist. "geheim" -> fout, moet ten minste 1 cijfer bevatten. "123456" -> fout, moet ten minste 1 letter bevatten. "g3h31m" -> goed!
[..]
dat heb ik inderdaad al gefixed. ik weet alle velden dus als ik over de velden heen loop en het veld bestaat niet dan is er mee gekloot.quote:Gewoon zorgen dat je alleen de bekenden velden in de database opslaat.
1 2 3 4 5 6 7 | //check if the form has been tampered with by altering the input names if(!isset($postvars[$field])) { throw new Framework_Exception('required form field: ' . $field . ' was not found in $_POST.'); } ?> |
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 | CREATE TABLE IF NOT EXISTS `users_groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `lastupdate` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; // tabel voor gebruikers aan een groep koppelen CREATE TABLE IF NOT EXISTS `users_groups_link` ( `user_id` int(10) unsigned NOT NULL, `group_id` int(10) unsigned NOT NULL, `timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, KEY `gebruiker_id` (`user_id`,`group_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; // link voor groepen & rechten CREATE TABLE IF NOT EXISTS `users_groups_rights_link` ( `group_id` int(10) unsigned NOT NULL, `right_id` int(10) unsigned NOT NULL, KEY `groep_id` (`group_id`,`right_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; // tabel voor rechten CREATE TABLE IF NOT EXISTS `users_rights` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `value` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; // link voor rechten die aan een specifieke gebruiker gekoppeld worden. CREATE TABLE IF NOT EXISTS `users_rights_link` ( `user_id` int(10) unsigned NOT NULL, `right_id` int(10) unsigned NOT NULL, `lastupdate` datetime NOT NULL, KEY `gebruiker_id` (`user_id`,`right_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
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 | if(isset($_POST['submit'])) { if (isset($_FILES['foto']) && $_FILES['foto']['error'] == UPLOAD_ERR_OK) { echo "Bedankt voor het uploaden, maar ik doe er even niets mee. Doei!"; } else { echo "Er is helaas iets fout gegaan bij het uploaden. Probeer het nog eens!"; } $temp_map = "/uploads/"; $temp_naam = $_FILES['foto']['tmp_name']; $result = move_uploaded_file($temp_naam, $temp_map); $bestand = $_FILES['foto']; //het bestand list($width,$height,$c,$d) = getimagesize($bestand); //het formaat van dat bestand switch($c) { case 1: //als het een gif is $plaatje = imagecreatefromgif($bestand); //het plaatje openen in $plaatje break; case 2: //jpg $plaatje = imagecreatefromjpeg($bestand); break; case 3: //png $plaatje = imagecreatefrompng($bestand); break; } } ?> |
Een else helemaal onderaan, sorry ik ben echt nog newbie hoor. Meer trial and error, maar ik weet geen opties meer.quote:Op maandag 31 mei 2010 21:32 schreef Roönaän het volgende:
Wat dacht je van exit/return toevoegen in de eerste if?
Je weet zeker dat het <input type="file" name="foto" /> is?quote:Op maandag 31 mei 2010 21:36 schreef boem-dikkie het volgende:
[..]
Een else helemaal onderaan, sorry ik ben echt nog newbie hoor. Meer trial and error, maar ik weet geen opties meer.
En dat het <form action="#" method="post" enctype="multipart/form-data"> is?quote:Op maandag 31 mei 2010 22:36 schreef Trollface. het volgende:
[..]
Je weet zeker dat het <input type="file" name="foto" /> is?
Jups. Sinds wanneer is het een probleem om 30x20 records te hebben in een DB?quote:
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 | <table width="273" border="0"> <tr> <td width="80">Product:</td> <td width="183"><input name="product" type="text" disabled="disabled" id="product" value="<?php echo $row['name']; ?>" readonly="readonly" /></td> </tr> <tr> <td>Naam:</td> <td><input name="naam" type="text" id="naam" /></td> </tr> <tr> <td>E-mail:</td> <td><input name="email" type="text" id="email" /></td> </tr> <tr> <td>Adres:</td> <td><input name="adres" type="text" id="adres" /></td> </tr> <tr> <td>Postcode:</td> <td><input name="postcode" type="text" id="postcode" /></td> </tr> <tr> <td>Plaats:</td> <td><input name="plaats" type="text" id="plaats" /></td> </tr> <tr> <td colspan="2"><input type="submit" name="Submit" value="Verzenden" /></td> </tr> </table> </form> |
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 | $recipient=("mirelmirelmirel@gmail.com"); $subject="QRC besteld"; . $content= $product = $_REQUEST["product"]; $naam = $_REQUEST["naam"]; $email = $_REQUEST["email"]; $adres = $_REQUEST["adres"]; $postcode = $_REQUEST["postcode"]; $plaats = $_REQUEST["plaats"]; $message; mail($recipient, $subject, $content); echo "Uw mail is met succes verstuurd!"; header( "Location: www.link.nl ); ?> |
1 2 3 4 5 6 | $to = "Email adres"; $subject = "Leuk mailtje"; $naam = $_POST['naam']; $adres = $_POST['adres']; ?> |
1 2 3 | mail($to, $subject, $body); |
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 | $to=("mirelmirelmirel@gmail.com"); $subject="QRC besteld"; $product = $_POST["product"]; $naam = $_POST["naam"]; $email = $_POST["email"]; $adres = $_POST["adres"]; $postcode = $_POST["postcode"]; $plaats = $_POST["plaats"]; $body = " Product: $product\n Naam: $naam\n E-mail: $email\n Adres: $adres\n Postcode: $postcode\n Plaats: $plaats\n "; mail($to, $subject, $body); echo "Uw mail is met succes verstuurd!"; <!-- header( "Location: http://www.mirelmasic.nl/info_contact.html" ); --> ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |