login  Naam:   Wachtwoord: 
Registreer je!
 Forum

php formulier

Offline elian - 17/09/2016 08:46 (laatste wijziging 17/09/2016 08:48)
Avatar van elianLid Ik heb hier een formulier gemaakt, dit werkt perfect zoal het nu is.
nadeel, er moet 2 maal hetzelfde mailadres ingevuld worden.
Dit nazicht gebeurd nu op de verwerking.php, maar als het fout is, word je teruggestuurd naar het formulier met als nadeel dat alle velden in het form
leeg zijn en je terug alles moet invullen.
Ik heb al meerdere tuts en zo gelezen maar vind de oplossing niet.
Wat ik wel had gevonden en die ik eventueel kon aanpassen en gebruiken is:

  1. <?php
  2. if (!empty($_POST))
  3. {
  4. //formulier is verzonden
  5. //controleer velden:
  6. if (empty($_POST['naam'])) $veldfout['naam'] = TRUE;
  7. if (empty($_POST['email'])) $veldfout['email'] = TRUE;
  8.  
  9. echo $veldfout;
  10.  
  11. }
  12. else {
  13. //formulier niet verzonden
  14. $nietverzonden = TRUE;
  15. echo $nietverzonden,'<br>';
  16. }
  17.  
  18. if (!empty($veldfout) || ($nietverzonden == TRUE)) {
  19. //formulier niet verzonden of fout, laat formulier zien:
  20. ?>
  21. <form method="post">
  22. <?php if ($veldfout['naam'] == TRUE) echo 'Naam verplicht:<br>'; ?>
  23. Naam: <input type="text" name="naam" <?php if (!empty($_POST['naam'])) echo 'value="'.htmlspecialchars($_POST['naam']).'" '; ?>><br>
  24. <?php if ($veldfout['email'] == TRUE) echo 'Email verplicht:<br>'; ?>
  25. Email: <input type="text" name="email" <?php if (!empty($_POST['email'])) echo 'value="'.htmlspecialchars($_POST['email']).'" '; ?>><br>
  26. <input type="submit" value="Verzenden">
  27. </form>
  28. <?php
  29. }
  30.  
  31.  
  32. ?>

Maar dit geeft errors:
Undefined variable: veldfout
variable: nietverzonden

kan me iemand op weg helpen aub?

Met dank

5 antwoorden

Gesponsorde links
Offline nielsvdwal - 17/09/2016 12:15
Avatar van nielsvdwal PHP gevorderde Kan je ook je eigen code plaatsen, zodat we je daarbij kunnen helpen?
Offline elian - 17/09/2016 13:51 (laatste wijziging 17/09/2016 13:53)
Avatar van elian Lid dat heb ik:

formulier.php :

  1. <p>
  2. <label for="mail">* Mail adres</label>
  3. <input type="text" name="mail" id="8" size="50"/>
  4. </p>
  5. <p>
  6. <label for="mailherhaal">* Herhaal mail adres</label>
  7. <input type="text" name="herhaal" id="9" size="50"/>
  8. </p>


verwerk.php :

  1. $mail = addslashes($_POST['8']);
  2. $mailherhaal = addslashes($_POST['9']);
  3.  
  4. if ( $mail != $mailherhaal )
  5. {
  6.  
  7. echo "<font face=verdana size=18>U heeft een fout in de mailadressen gemaakt.</font>";
  8.  
  9. echo '<meta http-equiv="refresh" content="5; URL= index1.html">';
  10.  
  11. }


over dit stuk gaat het dus.
Offline Jointjeff - 19/09/2016 11:36 (laatste wijziging 19/09/2016 11:39)
Avatar van Jointjeff HTML interesse Ik begrijp niet direct waarom addslashes gebruikt wordt in jouw code. :/

De 'undefined errors' ontstaan omdat je niet eerst controleert of de elementen die je echo'd een waarde hebben.

In plaats van het formulier naar verwerk.php te submitten, zou je dit alles ook in één pagina kunnen afvangen. Je kan dan de $_POST waarden in de input-velden zetten zodat je bij errors niet steeds het formulier opnieuw hoeft in te vullen

Een héél simpel voorbeeld hiervan (formulier.php):
  1. <?php
  2. // eerst controleren of het formulier is gesubmit
  3. if ( isset( $_POST['submit'] ) ) {
  4.  
  5. // valideren
  6. // bij het niet valideren zetten we een error in de errors array
  7.  
  8. if ( empty( $_POST['name'] ) ) {
  9. $errors['name'] = 'Je moet een naam invullen';
  10. }
  11.  
  12. if ( empty( $_POST['email'] ) ) {
  13. $errors['email'] = 'Je moet een e-mail invullen';
  14. } else {
  15. if ( ! filter_var( $_POST['email'], FILTER_VALIDATE_EMAIL ) ) {
  16. $errors['email'] = 'Je email is ongeldig';
  17. }
  18. }
  19.  
  20. // controleren of er errors zijn
  21. if ( empty( $errors ) ) {
  22. // mail versturen
  23. }
  24.  
  25. }
  26. ?>
  27. <!DOCTYPE html>
  28. <head>
  29. <meta charset="UTF-8">
  30. <title>Voorbeeld formulier</title>
  31. </head>
  32. <body>
  33.  
  34. <form method="post" action="formulier.php">
  35.  
  36. <label for="name">Naam:</label><br>
  37. <input type="text" name="name" id="name" value="<?php echo filter_input( INPUT_POST, 'name', FILTER_SANITIZE_STRING ); ?>"><br>
  38. <?php if ( ! empty( $errors ) && ! empty( $errors['name'] ) ) { ?>
  39. <span style="color: red;"><?php echo $errors['name']; ?></span><br>
  40. <?php } ?>
  41.  
  42. <label for="email">E-mail:</label><br>
  43. <input type="email" name="email" id="email" value="<?php echo filter_input( INPUT_POST, 'email', FILTER_SANITIZE_EMAIL ); ?>"><br>
  44. <?php if ( ! empty( $errors ) && ! empty( $errors['email'] ) ) { ?>
  45. <span style="color: red;"><?php echo $errors['email']; ?></span><br>
  46. <?php } ?>
  47.  
  48. <input type="submit" name="submit" value="Verstuur">
  49.  
  50. </form>
  51.  
  52. </body>
  53. </html>

Offline elian - 20/09/2016 10:03
Avatar van elian Lid als ik zoals in het voorbeeld het volgende zou gebruiken:

  1. if ( ( $_POST['name'] ) != ( $_POST['email'] ) ) {
  2. $errors['gelijk'] = 'Je moet hetzelfde invullen invullen';
  3. }

dan zou ik dit als vergelijking kunnen gebruiken?

met dank
Offline Jointjeff - 20/09/2016 10:39
Avatar van Jointjeff HTML interesse Je zou dan dan een extra input kunnen toevoegen met als naam 'email_repeat' of iets dergelijks.

Vervolgens kun je daar dan op valideren. B.v. door zoiets:

  1. if ( empty( $_POST['email_repeat'] ) ) {
  2. $errors['email_repeat'] = 'Herhaal het e-mailadres';
  3. } else {
  4. if ( ! $_POST['email'] == $_POST['email_repeat'] ) {
  5. $errors['email_repeat'] = 'Ingevulde e-mail komt niet overeen';
  6. }
  7. }
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2019 Sitemasters.be - Regels - Laadtijd: 0.257s