login  Naam:   Wachtwoord: 
Registreer je!
 Forum

controleren op invoer

Offline lau - 15/08/2006 22:36 (laatste wijziging 15/08/2006 22:45)
Avatar van lauHTML interesse Op http://as.4dimension.nl/SITE3/voorbeeld/smulti.php zie je dus een stukje voorbeeld van mijn probleem.
Stel je voert wel gegevens in bij 'Naam product' en 'Beschrijving', maar laat vervolgens 'Maat' en 'Artikel' leeg (zeg maar per ongeluk vergeten in te vullen). Bij het uitvoeren van het script wordt die lege maat en artikel wel toegevoegd in de database (let op.. dit is een voorbeeld en maakt NOG niet gebruik van een database).
Het probleem gaat ook verder als je op +onderdeel klikt en je vult vervolgens niks in. In beide gevallen voegt hij het wel toe.

Onderstaande PHP code is wat ik nu heb in dit script (javascript code kan je aflezen in broncode):
  1. <?php
  2. if(isset($_POST['verzenden'])) {
  3.  
  4. echo "<pre>\n";
  5. print_r( $_POST );
  6.  
  7. echo '<div>'.$_POST['naam'].'</div>';
  8. echo '<div>'.$_POST['beschrijving'].'</div>';
  9. echo '<div class="pro_container">';
  10. $a = 0;
  11. for ($i = 0; $i < count(!empty($_POST['maat'])); $i++) {
  12. $pro = ($a++ % 2) ? 'pro_oneven' : 'pro_even';
  13. echo '<div class="'.$pro.'">';
  14. echo '<div class="pro_naam">'.$_POST['maat'][$i].'</div>';
  15. echo '<div class="pro_artnr">'.$_POST['artikelnummer'][$i].'</div>';
  16. echo '<div style="clear:both;"></div>';
  17. echo '</div>';
  18. }
  19. echo '</div>';
  20.  
  21. } else {
  22. ?>
  23. (formulier)
  24. <?php
  25. }
  26. ?>


Ik dacht, ik laat 'em door middel van
  1. !empty($_POST['maat'])
controleren of er wel iets ingevoegd is, maar het werkt niet.

Wat hij dus uiteindelijk moet doen is, controleren of er iets ingevuld bij maat (verplicht dus, aan de hand van maat wordt er geteld). En dan tellen hoeveel er zijn om die uitvoer te laten lussen met for();

4 antwoorden

Gesponsorde links
Offline CDNC - 15/08/2006 22:55
Avatar van CDNC PHP ver gevorderde
  1. <?
  2. if(isset(...))
  3. {
  4. $r = '';
  5.  
  6. # foutmeldinegn voor als iets ni is ingevuld
  7. if(empty($_POST['iets']) || empty($_POST['iets_anders']))
  8. {
  9. $r .= 'je moet alles invullen';
  10. }
  11.  
  12. if(!empty($r))
  13. {
  14. echo $r;
  15. }
  16. else
  17. {
  18. // verwerk gegevens
  19. // prop in de db
  20. }
  21.  
  22. ?>
Offline xSc - 16/08/2006 08:29 (laatste wijziging 16/08/2006 08:31)
Avatar van xSc Onbekend De oplossing ligt dichtbij.

Je weet van te voren niet hoeveel elementen er zijn: dus gebruik je een arry.

Hoe?
<input type="text" name="aProduct[]" />

Je kunt dus elke input, waarvan je de inhoud wilt controleren, dezelfde naam geven. Dat er geen key tussen de blokhaken staat, houdt in dat het aan het einde van de array komt.

Na het posten heb je in php dus een array:

Doe dit maar eens: print_r($_POST['aProduct']);

Wil je controleren of er lege velden zijn?

  1. <?php
  2.  
  3. (array) $aProduct = array_map('trim', $_POST['aProduct']);
  4.  
  5. if (in_array('', $aProduct))
  6. {
  7.  
  8. // Er is een veld niet ingevuld
  9.  
  10. }
  11.  
  12. ?>
Offline lau - 16/08/2006 19:36
Avatar van lau HTML interesse Dit is niet helemaal wat ik bedoelde. Ik weet wel dat je met file[] meerdere kan toevoegen en ophalen.
Maar hij moet juist controleren hoeveel ingevulde velden er zijn van bijvoorbeeld file. In dit geval neemt hij alle velden mee, ook lege velden.
Offline Thomas - 17/08/2006 10:23
Avatar van Thomas Moderator Als je puur wilt controleren of een veld "inhoud" heeft:

  1. // aanname - het veld 'field' bestaat
  2. if(trim($_POST['field']) == "")
  3. {
  4. echo "foute boel";
  5. }


Ik heb hier een functie voor in het leven geroepen die automatisch controleert of een veld bestaat, en tevens een aantal bewerkingen uitvoert (zoals strip- of addslashes, htmlentities and all that):

  1. function form_data($field, $index=-1, $preset=0)
  2. {
  3. $ret = "";
  4.  
  5. // default - voor het verwerken van formulieren met als doel deze in database op te slaan
  6. if($preset == 0)
  7. {
  8. $add = 1;
  9. $strip = 0;
  10. $trim = 1;
  11. $safe = 0;
  12. }
  13.  
  14. // voor het verwerken van formulieren met als doel deze ergens direct in te verwerken, bijvoorbeeld in een e-mail
  15. if($preset == 1)
  16. {
  17. $add = 0;
  18. $strip = 0; // verwijdert anders slashes uit het oorspronkelijke bericht
  19. $trim = 1;
  20. $safe = 1;
  21. }
  22.  
  23. if($index > -1)
  24. {
  25. if(isset($_POST[$field][$index]))
  26. {
  27. $ret = $_POST[$field][$index];
  28. }
  29. }
  30. else
  31. {
  32. if(isset($_POST[$field]))
  33. {
  34. $ret = $_POST[$field];
  35. }
  36. }
  37.  
  38. $ret = ($add) ? addslashes($ret) : $ret;
  39. $ret = ($strip) ? stripslashes($ret) : $ret;
  40. $ret = ($trim) ? trim($ret) : $ret;
  41. $ret = ($safe) ? htmlentities($ret) : $ret;
  42.  
  43. return $ret;
  44. }


Hier kun je bijna alles mee doen (ook werken met velden van de vorm field[], je geeft dat dan met de parameter $index aan welke index je wilt hebben).

Een controle of een veld niet-leeg is wordt dan:
  1. if(form_data("field") == "")
  2. {
  3. echo "woops";
  4. }
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.24s