Reset knop wiegert te functioneren

Status
Niet open voor verdere reacties.

antonwas

Gebruiker
Lid geworden
11 nov 2006
Berichten
254
Beste lezers,

Ik heb de volgende code geschreven. Het is een formulier waarbij bezoekers hun naam, een e-mailadres en een boodschap in kunnen vullen. De werking van het formulier is eigenlijk drieledig.

- In het eerste gedeelte vult de bezoeker alle gegevens in.
- In het tweede gedeelte worden alle velden van het formulier gecontroleerd. Zijn alle velden ingevuld?
- In het derde gedeelte krijgt de bezoeker de gelegenheid om de ingevulde gegevens te controleren, evt. te corrigeren en om de tekst te versturen.

Code:
<?php

// Variabelen maken
$submit = $_POST["submit"];
$voornaam = $_POST["voornaam"];
$achternaam = $_POST["achternaam"];
$mail = $_POST["mail"];
$opinie = $_POST["opinie"];
$herstellenknop = $_POST["herstellen"];

echo "<h1>Een opinieformulier opmaken</h1><hr>";

// Controleren of er nog NIET op de submit knop is gedrukt. Oftwel dat er nog niet verzonden is.
if (empty($submit)) {
  echo "<h3>1. Gelieve uw gegevens in te vullen</h3>";
  echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">";
  echo "Voornaam: <input type=\"text\" name=\"voornaam\" value=\"\"><br><br>";
  echo "Achternaam: <input type=\"text\" name=\"achternaam\" value=\"$achternaam\"><br><br>";
  echo "E-mailadres: <input type=\"text\" name=\"mail\" value=\"$mail\"><br><br>";
  echo "<h3>Wat vindt u van deze cursus PHP?</h3><br><br>";
  echo "<textarea name=\"opinie\" cols=\"50\" rows=\"5\" wrap=\"soft\">";
  echo "</textarea><br><br>";
  echo "<input type=\"reset\" name=\"reset\" value=\"Alles wissen\">";
  echo "<!-- belangrijk, noem de verzendknop submit! -->";
  echo "<input type=\"submit\" name=\"submit\" value=\"OK - Verzenden!\">";
  echo "</form>";
}
// Als er wel op de submitknop gedrukt is...
else {
  // Loop alle velden van het formulier na
  foreach($_POST as $key => $value) {
    // Kijk of ��n van de velden leeg is.
    if (empty($value)) {
      echo "<h3>1. Gelieve uw gegevens in te vullen</h3>";
      echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">";
      echo "Voornaam: <input type=\"text\" name=\"voornaam\" value=\"$voornaam\"><br><br>";
      echo "Achternaam: <input type=\"text\" name=\"achternaam\" value=\"$achternaam\"><br><br>";
      echo "E-mailadres: <input type=\"text\" name=\"mail\" value=\"$mail\"><br><br>";
      echo "<h3>Wat vindt u van deze cursus PHP?</h3><br><br>";
      echo "<textarea name=\"opinie\" cols=\"50\" rows=\"5\" wrap=\"soft\">";
      echo $opinie;
      echo "</textarea><br><br>";
      /* Het probleem zit bij deze restknop. Wanneer je daar op klikt worden er geen velden leeg gemaakt en verdwijnt ook de tekst "Gelieve alle gegevens inte vullen!" niet.
      Dat is wel de bedoeling */
      echo "<input type=\"reset\" name=\"herstellen\" value=\"Alles wissen\">";
      echo "<!-- belangrijk, noem de verzendknop submit! -->";
      echo "<input type=\"submit\" name=\"submit\" value=\"OK - Verzenden!\">";
      echo "</form>";
      echo "Gelieve alle gegevens in te vullen!";
      exit;
      }
    }  
  
  // Gebruiker controleert de ingevulde gegevens      
  echo "<h3>2. Gelieve de gegevens na te zien</h3><br>";
  echo "<p>Uw naam: <strong>$voornaam $achternaam!</strong><br>\n";
  echo "<p>Uw e-mailadres is <strong>$mail</strong>!</p>\n";
  echo "<p>U schreef:</p>\n";
  echo "<i>" . stripslashes(nl2br($opinie)) . "</i><br><br>\n";
  echo "<p>Zijn de gegevens correct?</p><br>\n";
  
  $message = "$voornaam $achternaam, $mail heeft geschreven\n $opinie";
  $message = htmlspecialchars($message);
  
  // Gebruiker krijgt de mogelijkheid om terug te keren naar het formulier (om evt. correcties door te voeren) of de tekst te verzenden naar een e-mailadres.
  echo "<form action=\"mail.php\" method=\"post\">\n";
  echo "<input type=\"hidden\" name=\"mail\" value=\"$mail\">\n";
  echo "<input type=\"hidden\" name=\"message\" value=\"$message\">\n";
  echo "<input type=\"button\" value=\"Nee\"";
  echo "onclick=\"javascript:history.back()\">\n";
  echo "<noscript>Gebruik de knop Vorige van de browser om naar de vorige pagina terug te keren!</noscript>\n";
  echo "<input type=\"submit\" name=\"mail versturen\" ";
  echo "value=\"Alles is correct\"></form>\n";
}
?>

Het probleem zit bij de 'tweede' reset knop. Wanneer de bezoeker een veld vergeet in te vullen krijgt hij de melding dat alle velden ingevuld dienen te worden. Daar zit ook het formulier gewoon bij inclusief een reset knop. Net als bij de eerste keer wanneer een bezoeker de pagina te zien krijgt en er uiteraard nog helemaal geen veld is ingevuld. Dan werkt de reset knop wel.

Het is een beetje een lang verhaal, maar ik denk dat het probleem wel duidelijk is. Zou iemand misschien een oplossing hiervoor weten?

Groetjes,

Anton
 
RESET is om de standaardwaarden terug te zetten, niet om de velden te legen. Als je velden wilt legen moet je een eigen script ervoor maken.
Een javascrippie en een button om het aan te roepen.

Code:
function resetForm(sender) {
	alert('a');
	var frm_elements = sender.form.elements;
	for (i = 0; i < frm_elements.length; i++) {
		field_type = frm_elements[i].type.toLowerCase();
		switch (field_type) {
			case "text":
			case "password":
			case "textarea":
			case "hidden": frm_elements[i].value = "";
		}
	}
}

En als button :

Code:
<input type="button" value="Reset" onclick="resetForm(this);"/>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan