PHP-Formulare auswerten bzw. an ne Mail-Addi schicken ?!

Desertdelphin

Grand Admiral Special
Mitglied seit
23.10.2002
Beiträge
4.395
Renomée
185
Also hab jetzt ne php Seite gemacht mit meinen gewünschten Eingabefeldern etc...

sieht so aus (nur zum testen)

<?php
if(isset($abschicken)==0){
?>
<form name="test" action="test.php" method="get">

Größe: <select name=größe>
<option value=1 selected>M</option>
<option value=2>L</option>
<option value=3>XL</option>
<option value=4>XXL</option>
</select>
<br>
<br>
Farbe: <select name=farbe>
<option value=1 selected>weiß</option>
<option value=2>gelb</option>
</select>
<br>
<br>
T-Shirt Text: <textarea name=shirt-text rows=3>Tragen sie hier ihren Text ein</textarea><br><br><br><br>

Vorname: <input type=text name=vorname><br><br>
Straße & Hausnummer: <input type=text name=straße><br><br>
PLZ: <input type=text name=plz><br><br>
Ort: <input type=text name=ort><br><br>
<input type=submit name=abschicken>
</form>
<?php
} else {
echo "Danke für ihre Bestellung Herr $vorname $nachname ";
}
?>




Jetzt ist die frage: Wie kann ich die an meine mail-Adresse senden??? Ich hab bei google gesucht aber da gibts nur fertig-Scripts und Seiten bei denen ich was zahlen muss wenn ich die anleitung will :/

Danke schonmal ... ICh mach in der Zeit bissel am design weiter
 
Also du kannst ja in deiner test.php per $_GET["namedeinesformularelements"] die Daten auslesen und in eigene Variablen speichern.
Später kannst du dann mit der mail() - Funktion das Ganze als eMail versenden :)
 
so hab mal bissel gesucht (hatte letzten wochen keine zeit) und das ist bei rausgekommen (ganz unten der mail anhang bzw das was es machen SOLLTE das es mir die farben an meine mail sendet)

Leider sagt es das da ein fehler ist... Kann mir wer auf die sprünge helfen?

Weil da unten der teil der macht ja, wenn alles ausgefüllt ist, das es dann sagt "danke für ihre bestelltung herr "variable name" "variable nachname". Also hab ich da auch den Mail anhang reingesetzt das es neben dem dankeschön auchnoch das ganze als mail sendet. nur irgendwas ist da falsch?!?



<?php
if(isset($abschicken)==0){
?>
<form name="test" action="test.php" method="get">

Größe: <select name=größe>
<option value=1 selected>M</option>
<option value=2>L</option>
<option value=3>XL</option>
<option value=4>XXL</option>
</select>
<br>
<br>
Farbe: <select name=farbe>
<option value=1 selected>weiß</option>
<option value=2>gelb</option>
</select>
<br>
<br>
T-Shirt Text: <textarea name=shirt-text rows=3>Tragen sie hier ihren Text ein</textarea><br><br><br><br>

Vorname: <input type=text name=vorname><br><br>
Straße & Hausnummer: <input type=text name=straße><br><br>
PLZ: <input type=text name=plz><br><br>
Ort: <input type=text name=ort><br><br>
<input type=submit name=abschicken>
</form>
<?php
} else {
echo "Danke für ihre Bestellung Herr $nachname $vorname";
mail("Christoph_hotmail@yahoo.de", "farbe", $_POST['farbe'], "Christoph_hotmail@yahoo.de");
}
?>
 
Hmm is vielleicht nicht 100% richtig, müsste so aber gehen.
Vielleicht hab ich was vergessen, aber das mit der Nachricht, das das erfolgreih entgegengenommen ist, geht so auf jedenfall ;)


PHP:
<?php




  $ip = getenv('REMOTE_ADDR');
  $datum = date('d-m-Y');
  $zeit = date('H:i:s');

if ($sent==1)

{
$t1=chr(10);
$nachricht=str_replace($t1,'<br>',$nachricht);

echo "Ihr Vorname ist <br>$vorname <br>";
echo "Ihr Nachname ist <br>$nachname <br>";
echo "Ihre E-Mail-Adresse ist <br>$email <br>";
echo "Ihre Nachricht ist <br>$nachricht <p>";



if (!$vorname) {echo '<font color=red><b>Bitte geben Sie Ihren Vornamen ein</b></font> <br>';unset($sent);}
if (!$nachname) {echo '<font color=red><b>Bitte geben Sie Ihren Nachnamen ein</b></font> <br>';unset($sent);}
if (!$plz) {echo '<font color=red><b>Bitte geben Sie Ihre PLZ an</b></font> <br>';unset($sent);}
if (!$ort) {echo '<font color=red><b>Bitte geben Sie Ihren Wohnort an</b></font> <br>';unset($sent);}
if (!$text) {echo '<font color=red><b>Bitte geben Sie einen T-Shirt text ein</b></font> <p>';unset($sent);}


if($vorname AND $nachname AND $nachname AND $plz AND $ort AND $text)
{

$message="<html><body>";
$message.="<p>Vorname: ";
$message.=$vorname;
$message.="<br>Nachname: ";
$message.=$nachname;
$message.="<br>PLZ: ";
$message.=$plz;
$message.="<br>Ort: ";
$message.=$ort;
$message.="<br>T-Shirt text";
$message.="$text";
$message.="<br><br>Bestellung vom $datum um $zeit:<br><br>";
$message.="IP-Adresse von $vorname $nachname: $ip";
$message.="</p></body></html>";

$header = "T-Shirt bestellung";
$header .= "Content-Type: text/html\n";

if(mail("Christoph_hotmail@yahoo.de","Farbe:",$_POST['farbe'],"Christoph_hotmail@yahoo.de"))
{

echo "<br><b>Vielen Dank, Ihre Bestellung wird in Kürze bearbeitet.</b>";

echo "<br>Ihre Informationen wurden übermittelt";

echo "<br><br><a href=\"$startseite\">Zurück zur Startseite</a>";

}
else
{

echo "<br>Die Informationsübermittelung ist fehlgeschlagen, bitte versuchen Sie es Später noch einmal.";

echo "<br><br><a href=\"$startseite\">Zurück zur Startseite</a>";

unset($sent);
}
}
}

if(!$sent)

{

?>

<form action="test.php" method=post>
<input type=hidden name=sent value=1>
Vorname <br><input type=Text name="vorname" value"<?php echo $vorname; ?>" size="20" maxlength="20"><br>
Nachname <br><input type=Text name="nachname" value"<?php echo $nachname; ?>" size="20" maxlength="20"><p>
PLZ <br><input type=Text name="email" value"<?php echo $plz; ?>" size="7" maxlength="5"><p>
Ort <br><input type=Text name="email" value"<?php echo $ort; ?>" size="30" maxlength="30"><p>
T-Shirt Text <br><textarea name='nachricht' rows='5' cols='15' wrap="virtual">
<?php $nachricht=str_replace('<br>',$t1,$nachricht); echo $nachricht; ?>
</textarea><p>
<form name="test" action="test.php" method="get">

Größe: <select name=größe>
<option value=1 selected>M</option>
<option value=2>L</option>
<option value=3>XL</option>
<option value=4>XXL</option>
</select>
<br>
<br>
Farbe: <select name=farbe>
<option value=1 selected>weiß</option>
<option value=2>gelb</option>
</select>

<input type=submit name="submit" value="Abschicken">
</form>
 
Cool danke ich probiers gleich aus wenn ich wieder von der arbeit komme !!!

Ciao ;-)

Haltet euch für neue Fragen bereit denn ich bin recht lahm im kapieren *G*
 
Der sagt mir das in Zeile 104 (die letzte Zeile in der nur </form> steht) ein Fehler wäre...

Soll ich den ganzen Code den du mir gemacht hast (nochmal viiieeeelen dank!!! auch von den mädels meiner klasse) kopieren oder nur den oberen teil ???

Will erstmal ne T-Shirtseite machen für den Jahrgang auf Wunsch der Mädchen bei der sich jeder seine größe etc eintragen soll.. Wenns läuft mach ich noch mehr.

Leider ist das z.Z. der Haken an der ganzen Sache :/
 
Musst du nur noch die Formularfelder anpassen:

PHP:
<?php  # Adresse, an die die Formulardaten gesendet werden sollen:  $mailto = "XXXX@xxxxx.de";  ?>


<?php
if (isset($_POST["form_submitted"]))
 {
  // übergebene Variablen ermitteln:
  $name = $_POST['name'];
  $email = $_POST['email'];
  $subject = $_POST['subject'];
  $text = $_POST['text'];

  // Überprüfungen der Daten:
  unset($errors);
  if ($email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/", $email)) $errors[] = "die E-Mail-Adresse sieht nicht richtig aus";
  if ($text == "") $errors[] = "es wurde kein Text eingegeben";

  if (empty($errors))
   {
    if ($name != "") $mail_name=$name; else $mail_name="unbekannt";
    if ($subject != "") $mail_subject = $subject; else $mail_subject = "kein Betreff";
    if ($email != "") $mail_email = $email; else $mail_email = "email@unknown.xyz";
    $ip = $_SERVER["REMOTE_ADDR"];
    $text = stripslashes($text);
    $header= "From: ".$mail_name." <".$mail_email.">\n";
    $header .= "Reply-To: ".$mail_name." <".$mail_email.">\n";
    $header .= "X-Mailer: PHP/" . phpversion(). "\n";
    $header .= "X-Sender-IP: $ip\n";
    $header .= "Content-Type: text/plain";
    if (@mail($mailto, $mail_subject, $text, $header)) { $sent = true; } else { $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen"; }
    // Kopie an Absender:
    if (isset($sent) && isset($email) && $email != "" && isset($_POST['copy']))
     {
      $header= "From: ".$mailto."\n";
      $header .= "X-Mailer: PHP/" . phpversion(). "\n";
      $header .= "X-Sender-IP: $ip\n";
      $header .= "Content-Type: text/plain";
      @mail($email, $mail_subject, "Kopie der versendeten E-Mail:\n\n".$text, $header);
     }
   }
 }

if (empty($sent))
 {
  if(isset($errors))
   {
    ?><p class="caution">Fehler:</p><ul><?php foreach($errors as $f) { ?><li><?php echo $f; ?></li><?php } ?></ul><br /><?php
   }

  ?><form method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>"><div>
  <p><b>Name:</b><br /><input class="fs" type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="35" /></p>
  <p><b>E-Mail:</b><br /><input class="fs" type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""; ?>" size="35" /></p>
  <p><b>Betreff:</b><br /><input class="fs" type="text" name="subject" value="<?php if (isset($subject)) echo htmlentities(stripslashes($subject)); else echo ""; ?>" size="35" /></p>
  <b>Nachricht:</b><br /><textarea class="fs" name="text" cols="30" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""; ?></textarea><br />
  <p><input type="submit" name="form_submitted" value="OK - Absenden" /> <input type="checkbox" name="copy" value="true" /> Kopie an Absender</p>
  </div></form><?php
 }
else
 {
  if (empty($email)) { ?><p><b>Danke!</b><br />Nachricht erfolgreich versendet. Allerdings wurde keine E-Mail-Adresse angegeben, ich kann also nicht antworten.</p><?php }
  else { ?><p><b>Danke!</b><br />Nachricht erfolgreich versendet.</p><?php }
 }?>
 
Danke !!!

Ich hab mich auf die Aufgabe der Page "gestürtzt" weil ich dachte "ne internet seite machen ist kein problem und php... naja soviel wird das nicht sein" *G*

Naja ... Wohl überschätzt :D


So hab den Text nun genommen wie er ist, hab die Mail Adresse ganz oben eingefügt (muss ich die erklärung mit dem # wegmachen???) und auf den server geladen und wenn ich was schreibe dann sagt er auch "erfolgreich verschickt"

Nur irgendwie kommt bei mir nix an... Kann das daran liegen das der Server von mir das nicht mitmacht oder muss ich noch was spezielles ändern? Will erstmal nur sehen das was an meine addi ankommt dann passe ich die formulare etc an...

Ich weiß ich nerve euch bestimmt aber ich verzweifel noch daran *G*

Was nützt mir ne designte seite wenn sie dann doch nix bringt ?! Ich war etwas voreilig...

Achja unter Bulk is auchnix angekommen ...

Irgendwas mach ich falsch *Grummel*
 
Hallo,

<?php # Adresse, an die die Formulardaten gesendet werden sollen: $mailto = "XXXX@xxxxx.de"; ?>

einfach so:

<?php $mailto = "XXXX@xxxxx.de"; ?>

Be Blessed
sohalt
 
Bei so Kontaktformularen sollte man besonders gründlich programmieren, da sonst das Formular von Spammern missbraucht werden könnte.

Deshalb würd ich folgenden Aufbau vorschlagen:
Du hast drei Dateien. In der ersten ist nur das Formular, das die Daten an die zweite Datei schickt. Die wertet die Daten aus (überprüft ob alle Pflichtfelder ausgefüllt wurden etc.) und leitet den User im Fehlerfall zurück zum Formular. Falls aber alles korrekt ausgefüllt war wird die Mail mit dem phpMailer verschickt. Aus Sicherheitsgründen die mail()-Funktion von PHP bitte nicht direkt verwenden! Vorteil dieser Variante: Einfach zu programmieren, aber trotzdem sicher und leicht erweiterbar. Außerdem kann der User nicht durch einen Reload der Seite die E-Mail nochmal verschicken.

Nun zur Praxis:

Die Datei mit dem Formular (in meinem Fall index.php):
PHP:
<?php
  # Ueberpruefen ob Daten uebergeben wurden
  if( isset( $_GET['data'] ) && !empty( $_GET['data'] ) )
  {
  	# Die angehaenten Daten werden erstmal von PHP bzw HTML-Code und unnoetigen Leerzeichen befreit
  	# Dann wird der String dekodiert und wieder zu einem Array umgewandelt
    $data = unserialize( base64_decode( trim( strip_tags( $_GET['data'] ) ) ) );
  }
  
  # Ueberpruefen ob eine Fehlermeldung uebergeben wurde
  if( isset( $_GET['error'] ) && !empty( $_GET['error'] ) )
  {
  	# Die angehaenten Daten werden erstmal von PHP bzw HTML-Code und unnoetigen Leerzeichen befreit und anschliessend dekodiert
    $error = base64_decode( trim( strip_tags( $_GET['error'] ) ) );
  }
?>
<form action="process.php" method="post">
<?php
  # Falls vorhanden Fehlermeldung ausgeben
  if( isset( $error ) && !empty( $error ) )
  {
    echo '<p class="error">' . $error . '</div>';
  }
?>
  <fieldset>
    <label for="vorname">Vorname: *</label>
    <input type="text" name="input[vorname]" id="vorname" value="<?php echo @$data['vorname']; ?>" />
    <br />
    <label for="name">Name: *</label>
    <input type="text" name="input[name]" id="name" value="<?php echo @$data['name']; ?>" />
    <br />
    <label for="email">E-Mail: *</label>
    <input type="text" name="input[email]" id="email" value="<?php echo @$data['email']; ?>" />
    <br />
    <label for="anliegen">Ihr Anliegen: *</label>
    <textarea name="input[anliegen]" id="anliegen" rows="10" cols="20"><?php echo @$data['anliegen']; ?></textarea>
  </fieldset>
  <button type="submit">Absenden</button>
</form>

Die Datei die die Daten verarbeitet (process.php)
PHP:
<?php

  # Konfiguration Start
  define( C_TOMAIL, 'mail@example.com' ); # Empfaenger-Adresse
  define( C_SUBJECT, 'Kontaktformular von example.com' ); # Betreffzeile der E-Mail
  # Konfiguration Ende

  # Ueberpruefen ob Daten vorliegen
  if( isset( $_POST['input'] ) && is_array( $_POST['input'] ) )
  {
    # Eingehende Daten bereinigen
  	$clean = array();
  	
  	$clean['vorname'] = trim( strip_tags( $_POST['input']['vorname'] ) );
  	$clean['name'] = trim( strip_tags( $_POST['input']['name'] ) );
  	$clean['email'] = trim( strip_tags( $_POST['input']['email'] ) );
  	$clean['anliegen'] = trim( strip_tags( $_POST['input']['anliegen'] ) );

    # Array fuer Fehlermeldungen definieren
  	$error = array();
  	
  	# Fehlerueberpruefung
  	if( empty( $clean['vorname'] ) )
  	{
  		$error[] = 'Bitte geben Sie Ihren Vornamen ein.';
  	}
  	if( empty( $clean['name'] ) )
  	{
  		$error[] = 'Bitte geben Sie Ihren Nachnamen ein.';
  	}
  	if( empty( $clean['email'] ) )
  	{
  		$error[] = 'Bitte geben Sie Ihre E-Mail-Adresse ein.';
  	}
  	elseif( !eregi( "^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $clean['email'] ) )
  	{
  		$error[] = 'Ihre E-Mail-Adresse ist ung&uuml;ltig.';
  	}
  	if( empty( $clean['anliegen'] ) )
  	{
  		$error[] = 'Bitte geben Sie Ihr Anliegen ein.';
  	}
  	
  	# Ueberpruefen ob Fehler vorlagen (-> Das Array hat mehr als 0 Eintraege)
  	if( count( $error ) > 0 )
  	{
  		# Das Error-Array umformen, damit es direkt ausgegeben werden kann
  		$error_msg = implode( "<br />", $error );
  		
  		# Bereits eingegebene Daten zu einem String konvertieren, damit sie an die URL angehängt werden können
  		$data = serialize( $clean );

      # Redirect-URL zusammenbauen
      # Die Parameter werden base64 encoded, damit der User nicht sofort sieht was hier übergeben wird
  	  $redirect_url = 'http://' . $_SERVER['SERVER_NAME'] . '/kontakt/index.php?data=' . base64_encode( $data ) . '&error=' . base64_encode( $error_msg );
  	  
  	  # Zurueck zum Formular leiten
  	  header( "Location: " . $redirect_url );
  	  
  	  # Sicherheitshalber das Skript abbrechen, falls die Weiterleitung nicht korrekt ausgefuehrt wird
  	  exit;
  	}
  	# Es sind keine Fehler aufgetreten, deshalb wird die E-Mail jetzt verschickt
  	else
  	{
  		# E-Mail zusammenbauen
      $mailtext = "Anfrage von: ". $clean['vorname'] . " " . $clean['name'] . "\nE-Mail: " . $clean['email'] . "\n\nAnfrage:\n\n" . $clean['anliegen'];

      # phpMailer einbinden
  		require( $_SERVER['DOCUMENT_ROOT'] . '/php/class.phpmailer.php' );

      # Neues phpMailer-Objekt erstellen
      $mail = new PHPMailer();

      # Absender-Adresse festlegen
      $mail->From = $clean['email'];
      # Absender-Name festlegen
      $mail->FromName = $clean['vorname'] . ' ' . $clean['name'];
      # Empfaenger-Adresse festlegen
      $mail->AddAddress( C_TOMAIL ); 

      # Betreffszeile festlegen
      $mail->Subject = C_SUBJECT;
      # Mailtext festlegen
      $mail->Body = $mailtext;

      # Zeichensatz festlegen
      # Falls Umlaute nicht richtig dargestellt werden muss hier eventl. 'iso-8859-1' eingetragen werden
      $mail->CharSet = "utf-8";

      # Falls der Mailversand nicht geklappt hat wieder zurueck zum Formular leiten
      if( !$mail->Send() )
      {
        $error_msg = "Es ist ein unbekannter Fehler aufgetreten.";
        $data = serialize( $clean );

  	    $redirect_url = 'http://' . $_SERVER['SERVER_NAME'] . '/kontakt/index.php?data=' . base64_encode( $data ) . '&error=' . base64_encode( $error_msg );
  	  
        header( "Location: " . $redirect_url );

        exit;
      }
      # Ansonsten muss zur Erfolgsseite weitergeleitet werden
      else
      {
        header( "Location: http://" . $_SERVER['SERVER_NAME'] . "/kontakt/success.php" );

        exit;
      }
  	}
  }
  else
  {
  	# Zum Formular weiterleiten, da es nichts zu tun gibt
    header( "Location: http://" . $_SERVER['SERVER_NAME'] . "/kontakt/index.php" );
    
    exit;
  }

?>

Die Erfolgsseite muss nur noch eine Bestätigung enthalten (success.php):
PHP:
<p>
  Vielen Dank!<br />
  Wir haben Ihre E-Mail erhalten und werden sie umgehend bearbeiten!
</p>

Das ganze kann natürlich noch beliebig erweitert werden, z.B. durch einen Spamschutz.

Falls du noch Fragen hast kannst du dich gerne nochmal bei mir melden.

Gruß,

Max
 
Oder ganz ohne PHP als Form action ein mailto ????;)
 
Oder ganz ohne PHP als Form action ein mailto ????;)
Damit sperrst du viele Benutzer aus, weil nicht jeder ein E-Mail-Programm auf seinem Rechner eingerichtet hat. Außerdem werden die Formulardaten nicht bei jedem Browser auch übergeben. Und mehr als zwei Felder (Betreff und Mailtext) kannst du auch nicht nutzen.

Gruß,

Max
 
Zurück
Oben Unten