Formulardaten erhalten nach Fehler

RuthG

Mitglied
Hallo,

ich arbeite schon seit einiger Zeit an einem Bestellformular.
Wenn gewisse Pflichtfelder nicht ausgefüllt sind, gibt es eine Fehlermeldung in einem eigenem Fenster. Bis jetzt wurden dadurch die Eingaben nicht gelöscht. Jedoch habe ich ein paar zusätzliche Felder hinzugefügt und plötzlich löschen sich alle Angaben.

Was ist denn da passiert? Wie kann ich das verhindern?

Danke, lg Ruth
 
dachte das wäre vielleicht eh ein Standardproblem :)

HTML:
<div id="formular">
                <form action="formular.php" method="post" onSubmit="window.open('about:blank','popup','width=900,height=600'); setTimeout('document.Kontakt.reset();', 1000);return true;" name="Kontakt" target="popup">
                     
                    <p id="first">This is  <input type="radio" class="checkbox" name="what" value="order"/>an <b>order</b> or<input type="radio" class="checkbox" name="what" value="request"/> a <b>request</b></p>     
                  <fieldset>
                  <legend>General Information</legend>
                        <table id="personal">  
                        <tr><td class="imp"><input type="radio" class="checkbox" name="who" value="privat"/>Private person or 
                          <input type="radio"class="checkbox" name="who" value="company"/>
                          Company *</td>
                          <td class="imp">Have you already ordered from us?<input type="radio" class="checkbox" name="customer" value="yes"/>Yes 
                          <input type="radio"class="checkbox" name="customer" value="no"/>
                          No *</td>
                        </tr>    
                          
                        <tr><td><h4><label for="company">Company Name:</label></h4>
                        <p><input class="feld" id="trade" type="text" name="company" size="50" maxlength="150"/></p>
                        <p><input class="feld" id="trade" type="text" name="company_extra" size="50" maxlength="150"/></p></td>
                        
                        <td><h4><label for="number">Customer Number (if available): </label></h4>
                        <p><input class="feld" id="trade" type="text" name="number" size="50" maxlength="150"/></p></td></tr>
                                   
                        
                        <tr><td>
                        <h4 class="imp">Phone Number: *</h4>
                        <p><input class="feld" type="text" name="phone" size="50" maxlength="150" /></p>
                        <h4><label for="fax">Fax Number:</label></h4>
                        <p><input class="feld" type="text" name="fax" size="50" maxlength="150" /></p></td>
                        
                        <td><h4 class="imp">Contact Person: *</h4>
                        <p><input class="feld"  id="name" type="text" name="name" size="50" maxlength="150" /></p>
                        <h4 class="imp">e-mail: *</h4>
                        <p><input class="feld" id="mail" type="text" name="mail" size="50" maxlength="150" /></p></td></tr>
                        
                        <tr><td><h4>Invoice Address:</h4>
                        <p><input class="feld" type="text" name="bill_street" size="50" maxlength="150" value="street name & number" /></p>
                        <p><input class="feld" type="text" name="bill_add" size="50" maxlength="150" value="" /></p>
                        <p><input class="feld" type="text" name="bill_city" size="50" maxlength="150" value="city" /></p>
                        <p><input class="feld" type="text" name="bill_country" size="50" maxlength="150" value="country" /></p>
                        <p><input class="feld" type="text" name="bill_zip" size="50" maxlength="150" value="zip" /></p>
                        <h4 class="imp">VAT (European Customers):*</h4>
                        <p><input class="feld" type="text" name="vat" size="50" maxlength="150"/></p>
                        </td>
                        
            
                       <td><h4>Shipping Address: <small>(if is different to invoice address) </small></h4>
                        <p><input class="feld" type="text" name="ship_street" size="50" maxlength="150" value="street name & number" /></p>
                        <p><input class="feld" type="text" name="ship_add" size="50" maxlength="150" value="" /></p>
                        <p><input class="feld" type="text" name="ship_city" size="50" maxlength="150" value="city" /></p>
                        <p><input class="feld" type="text" name="ship_country" size="50" maxlength="150" value="country" /></p>
                        <p><input class="feld" type="text" name="ship_zip" size="50" maxlength="150" value="zip" /></p></td></tr>
                  </table>
                  </fieldset>   
                         
                         <fieldset>
                         <legend>Order</legend>
                                    
                         
                         <ul id="order"><li class="units">Units</li><li class="article">Article</li><li class="note">Note</li></ul>
                         <div class="clear" >
                                            <input class="feld units" type="text" name="units[]" size="7" maxlength="7" />
                                            <input class="feld article" type="text" name="article[]" size="80" maxlength="100" />
                                            <input class="feld note" type="text" name="note[]" size="60" maxlength="100" />
                                            <input type="button" class="button_zeile" value="+" onClick="clone_this(this)" />
                          </div>
                         
                         
                         
                         
                   		<div id="payment">
                                 <h3 class="abstandvor">Payment Method</h3>
                                 <p><input type="radio" class="checkbox" name="pay" value="creditcard"/>Creditcard 
                                 <input type="radio"class="checkbox" name="pay" value="advanced"/>in advance by banktransfer
                           		 
                                 
                                 <div class="abstandvor"><p>We accept following credit cards</p>
                                 <p class="abstandvor">
                                 <input type="radio" class="checkbox" name="cc" value="visa"/><img src="pic/visa.png"alt="Visa">
                                 <input type="radio" class="checkbox" name="cc" value="mastercard"/><img src="pic/mastercard.png" alt="MasterCard">
                                 <input type="radio" class="checkbox" name="cc" value="amex"/><img src="pic/amex.png" alt="Amex"></p>
                                 
                                 
                                 </div>
                         </div>
                         
                         <div class="abstandvor"><h3>Preferred Currency:</h3>
                         <p> <input type="radio" class="checkbox" name="currency" value="EUR"/>EUR or <input type="radio" class="checkbox" name="currency" value="EUR"/>USD</div>
                                 
                                <div class="abstandvor"><h3>Preferred shipping method</h3>
                                <p>	<input type="radio" class="checkbox" name="deliverer" value="fedex"/>FedEx
                                	<input type="radio" class="checkbox" name="deliverer" value="ups"/>UPS
                                    <input type="radio" class="checkbox" name="deliverer" value="dhl"/>DHL
                                    <input type="radio" class="checkbox" name="deliverer" value="ems"/>EMS
                                    <input type="radio" class="checkbox" name="deliverer" value="parcelpost"/>Parcel Post
                                    <input type="radio" class="checkbox" name="deliverer" value="other"/>Other: <input class="feld" type="text" name="other" size="25" maxlength="100">
                                </p>
                         <p>Account number if available: <input id="shipping" class="feld" type="text" name="account" size="50" maxlength="100"></p></div>
                                 
                         
                                 
                          </fieldset>     
                            
                        <fieldset>
                        <legend class="imp">Message *</legend>
                        <textarea  id="message" class="feld" name="message" rows="5" cols="115" wrap="soft"></textarea>
                        </fieldset>
                        
                        <fieldset>
                       
                        
                        <p class="abstandvor"><input class="checkbox" type="checkbox" name="newsletter" value="accept">Please, click here to get our newsletter.</p>
                        <p class="abstandvor"><input class="checkbox" type="checkbox" name="condition" value="accept">Please, click here to accept the <a href="conditions.pdf">terms and conditions.</a>*</p>
                            
                        <p> <input type="submit" class="button" name="senden" value="Send" />
                           <!-- <input type="reset" class="button" name="reset" value="Reset" /></p>-->
                        </fieldset>
                        
                        </form>
                    </div><!-- Ende Formular -->

PHP:
<?php
$fehler ="";
$nz = chr(13);
$who = $_POST['who'];
$customer= $_POST['customer'];
$company = $_POST['company'];
$company_extra = $_POST['company_extra'];
$name= $_POST['name'];
$number= $_POST['number'];
$phone= $_POST['phone'];
$fax= $_POST['fax'];
$mail= $_POST['mail'];
$bill_street= $_POST['bill_street'];
$bill_city= $_POST['bill_city'];
$bill_add= $_POST['bill_add'];
$bill_country= $_POST['bill_country'];
$bill_zip= $_POST['bill_zip'];
$ship_street= $_POST['ship_street'];
$ship_city= $_POST['ship_city'];
$ship_add= $_POST['ship_add'];
$ship_country= $_POST['ship_country'];
$ship_zip= $_POST['ship_zip'];
$vat= $_POST['vat'];
$cc= $_POST['cc'];
$currency= $_POST['currency'];
$deliverer= $_POST['deliverer'];
$other= $_POST['other'];
$account= $_POST['account'];
$units= $_POST['units'];
$article= $_POST['article'];
$note= $_POST['note'];
$message= $_POST['message'];
$pay= $_POST['pay'];
$shipping= $_POST['shipping'];
$what= $_POST['what'];
$newsletter= $_POST['newsletter'];
$condition= $_POST['condition'];



if (empty($who)) $fehler .= "<li>Please, fill if you are a private person or a company. </li>";
if (empty($customer)) $fehler .= "<li>Please, check if you have already ordered from us.</li>";
if (empty($name)) $fehler .= "<li>Please, fill in your name. </li>";
if (empty($phone)) $fehler .= "<li>Please, fill in your phone number. </li>";
if (empty($mail)) $fehler .= "<li>Please, fill in your mail adress. </li>";
if (empty($message)) $fehler .= "<li>Please, tell us how we can help you. The Messagebox is empty. </li>";
if (empty($what)) $fehler .= "<li>Please, tell us if this is a order or a request. </li>";
if (empty($condition)) $fehler .= "<li>Please, read our conditions and check the box. </li>";
if (empty($fehler)) {


if(is_array($_POST['units'])){
  $units = "";
  for($i=0; $i<count($_POST['units']); $i++){
    $units .= "- " . $_POST['units'][$i] . " Einheiten " . $_POST['article'][$i] . " (" . $_POST['note'][$i] . ")<br />";
  }
}else{
  $units= "- " . $_POST['units'] . " Einheiten " . $_POST['article'] . " (" . $_POST['note'] . ")";
}





	$an = "test@localhost";
	$betreff = "Subject: " .$what .", " .$company ." " .$name;
	$from = "From: " .$company ." " .$name  ."<" .$mail .">\n";
	$from .= "Reply-To: " .$mail ."\n";
	$from .= "Content-Type: text/html\n";
	$datum = "Datum: ".date("j.n.Y");
	$zeit = "Zeit: ".date("H:i").$nz;
	$von = "Von: ".$name."<".$mail.">".$nz;
	$bill_adress = "<td><b>Billing Adress:</b><p>" .$bill_street ." </p><p>" .bill_add ." </p><p>" .$bill_city ." </p><p>" .$bill_country ." </p><p>" .$bill_zip ."</p></td>";
	$ship_adress = "<td><b>Shipping Adress:</b><p>" .$ship_street ." </p><p>" .ship_add ." </p><p>".$ship_city ." </p><p>" .$ship_country ." </p><p>" .$ship_zip ."</p></td>";
	$message = "<p><b>Message:</b> " .$message ."</p>";
	$what = "<p><b>Order or Request:</b> " .$what ."</p>";
	$condition = "<p><b>Condition:</b> " .$condition ."</p>";
	$personal = "<td><b>Company or Privat: </b>" .$who ."</td> <td><b>Already customer?</b> ".$customer ."</td></tr><tr><td><b>Customer Number:</b> " .$number ."</td></tr><tr><td><b>Company: </b>" .$company ." (" .$company_extra .")" ."</td><td><b>Name:</b> " .$name ."</td></tr><tr><td><b>Mail:</b> " .$mail ."</td> <td><b>Phone:</b> " .$phone ."</tr><tr></td> <td><b>Fax:</b> " .$fax ."</td></tr><tr>" .$bill_adress .$ship_adress ;
	$order = "<b>Order:</b> <p>" .$units ."</p>";
	$text='<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 Transitional//EN">';
    $text.='<html>';
    $text.='<head>';
	$text.="<style>	body {	font-family: Verdana, Georgia, Arial, Helvetica, sans-serif;	font-size: 1em;	text-align:left;	line-height:140%}

	p {margin:0px}
	
	table {
	font-size: 1em; margin-top:10px}
	
	table tr {margin-top: 10px}
	table td { width:400px}
	
	</style>";
    $text.='</head>';
    $text.='<body>';
    $text.= "<p><td>$datum, $zeit </p>";
	$text.= "<table><tr>$personal</tr>";
	$text.= "<tr><td><b>VAT: </b>$vat</td></tr>";
	$text.= "<tr><td><b>Payment: </b>$pay</td><td><b>Creditcard: </b>$cc</td></tr>";
	$text.= "<tr><td><b>Currency: </b>$currency</td></tr>";
	$text.= "<tr><td><b>Deliverer: </b>$deliverer </td><td> $other</td></tr>";
	$text.= "<tr><td><b>Account Number: </b>$account </td></tr>";
	$text.= "<tr><td colspan=\"2\">$message <td></tr>";
	$text.= "<tr><td> $order </td></tr>";
	$text.= "<tr><td> <b>Newsletter:</b> $newsletter </td></tr>";
	$text.= "</table>";
	$text.='</body>';
    $text.='</html>'; 
	$titel = "Thank you for your Mail. You will get a confirmation within the next days.";
	
	mail($an,$betreff,$text,$from);

	mail($mail,$betreff,$text,$from);
	} else  $titel = "Sorry, but there is a mistake.";
	?>





<html>
	
	<style type="text/css">
	body {
	font-family: Verdana, Georgia, Arial, Helvetica, sans-serif;
	font-size: 0.85em;
	text-align:left;
	line-height:140%}

	p {margin:0px}
	
	table {
	font-size: 1em; margin-top:10px}
	
	table tr {margin-top: 10px}
	table td { width:400px}
	
	</style>
    
	<head>
	<title><?=$titel?></title>
	</head>
    
	<body>
	<?php
		if (empty($fehler)) {
		$text = strip_tags($text);
		$text = htmlentities($text);
		$text = str_replace($nz,"<br>",$text);
		echo "<p><b>Thank you for your Mail. You will get a confirmation within the next days.</b></p>";
		echo "<p><td>$datum, $zeit </p>";
		echo "<table><tr>$personal</tr>";
		echo "<tr><td><b>VAT: </b>$vat</td></tr>";
		echo "<tr><td><b>Payment: </b>$pay</td><td><b>Creditcard: </b>$cc</td></tr>";
		echo "<tr><td><b>Currency: </b>$currency</td></tr>";
		echo "<tr><td><b>Deliverer: </b>$deliverer </td><td> $other</td></tr>";
		echo "<tr><td><b>Account Number: </b>$account </td></tr>";
		echo "<tr><td colspan=\"2\">$message <td></tr>";
		echo "<tr><td> $order </td></tr>";
		echo "<tr><td> <b>Newsletter:</b> $newsletter  </td></tr>";
		echo "</table>";
	}	else {
		echo "<p>Sorry, your message could not be send:";
		echo "<ul>$fehler</ul>";
		echo "</p>";
		
	}
	?>
	
	</body>
	</html>
 
Ich hab den Code zwar nur überflogen aber ich verstehe ehrlich gesagt nicht warum die Inhalte nicht gelöscht werden sollten.
Immerhin hast du "ihn" ja explizit dazu aufgefordert :
Javascript:
setTimeout('document.Kontakt.reset();', 1000);
 
Moin, hab den Code nur mal kurz überflogen, mir sind aber direkt nen paar Sachen ins Auge gesprungen:

Die übergebenen Daten werden in keinster Art und Weise gefiltert - es folgt ja lediglich eine Prüfung, ob die Werte nicht leer sind.
Vor allem was den Mail-Header angeht, kann man da jede Menge Unfug mit treiben und dein Skript kann zum Spammen misbraucht werden.
siehe http://de.wikipedia.org/wiki/E-Mail-Injection

Eventuell ist später mal angedacht die Daten in einer Datenbank zu hinterlegen, dadurch sind SQL-Injections (siehe http://de.wikipedia.org/wiki/SQL-Injection) möglich.

Ich empfehle daher dringend, dass du da noch Anpassungen vornimmst. Filterung der Daten ist zb mit Regulären Ausdrücken möglich und eigentlich auch nicht allzu schwer.

mfg
 
ahhhh Angst!!

Wie meinst du das mit Filterung der Daten? Ist damit gemeint das zb bei einer Telefonnummer nur Zahlen sein dürfen?
Hilft so ein Prüffeld wo man dann einen Text von einem Bild abschreiben muss?
 
Hi, nur ein Feld wo man Text von einem Bild (nennt sich Captcha) abschreiben muss reicht leider nicht aus.

zum prüfen von Telefonnummern kann man beispielsweise folgenden Code benutzen:
PHP:
if (preg_match("/[\d\/\- ]/", $_POST['telefon'], $match)) {
 // akzeptiert nur Zahlen, Leerzeichen, Trennstriche und Bindestriche, folgende Eingaben wären also korrekt:
 // 01234-567890
 // 01234 56 78 90
 // 01234/56789 - 0
 echo "korrekte Telefonnummer: ".$match[0]."<br />";
} else {
 // folgende Eingaben wären falsch:
 // 01234_567890
 // 01234 56789a0
 echo "Telefonnummer nicht korrekt, darf nur Zahlen, Leerzeichen, Trennstriche und Bindestriche enthalten";
}

Das ganze kann man auch für alle anderen Formularfelder anpassen, ist zwar mit etwas Arbeit verbunden aber heutzutage unumgänglich.

mfg
 
Hallo,

Schreibt man das dann direkt in die Datei des Formulars, oder? Also and die Stelle wo das echo dann ausgegeben werden soll?
Hab's jetzt direkt in mein Formular unterhalb des Eingabefeldes eingefügt. Scheinbar hab ich was falsch gemacht, weil mir automatisch das else echo (Telefonnummer nicht korrekt) gepostet wird :(

Wie geht's dann weiter? Kann man dann, wenn eine falsche Eingabe erfolgt, das Formular nicht absenden?

Danke, LG Ruth
 
Moin, du musst die Skriptlogik deines Skripts etwas abändern und darauf basierend dann auch die Prüfung integrieren:
PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
 // wird nur nach dem Abschicken des Formulares ausgeführt
 $errors = array(); // leeres Array für die späteren Fehlermeldungen
 $fehler = false; // es gibt ja noch keine Fehler
 if (preg_match("/[\d\/\- ]/", $_POST['telefon'], $match)) {
  // weitere Verarbeitung des Telefoneintrages
 } else {
  $fehler = true; // es ist ein Fehler aufgetreten
  $errors['telefon'] = "Telefonnummer nicht korrekt, darf nur Zahlen, Leerzeichen, Trennstriche und Bindestriche enthalten";
 }
 // ... Prüfung weiterer Formularfelder ...
 if ($fehler !== true) {
  // Speicherung der Daten, wenn keine Fehler aufgetreten sind
  // Weiterleitung auf die Zielseite oder ähnliches
  unset($_POST); // alle Formularwerte löschen
 }
}
?>
<!-- dein Formular HTML -->
...
<?php
if ($fehler === true) {
 echo "Es sind Fehler aufgetreten!";
 // Ausgabe, das Fehler aufgetreten sind
}
?>
<form ...>
 <input type="text" name="telefon" value="<?php echo $_POST['telefon']; ?>" /><?php echo $errors['telefon']; ?>
 <!-- in value wird der ursprünglich eingetragene Text wieder angezeigt, falls ein Fehler auftrat, ansonsten bleibt er leer und es steht die Fehlermeldung dahinter -->
</form>
...

Das ganze kann man natürlich noch viel weiter ausbauen, es soll dir nur vor Augen führen, wie das ganze funktionieren soll.

mfg
 
Zurück