fertige Funktion zum Formular per Mail senden gesucht...

Darian

Erfahrenes Mitglied
Hallo Leute,

mich ärgert es schon langsam immer Funktionen zu schreiben, die einfach nur das ganze Formular per Mail an eine Adresse senden.

Weil irgendwie sind sie ja doch immer ein bisschen anders vom Inhalt her.

Dann kommt immer so ein
PHP:
$inhalt = "name: " . $_REQUEST[name] . "\nalter: "...usw

ICh denke es gibt es sicher schon eine Funktion, wo ich nur die Mailadresse angebe, und schon wird alles einfach übersichtlich in ein Mail gepackt und versendet. Könnte mir vorstellen dass ich ihm einfach den Array wo alle drinnen sind übergebe, und fertig.

Hat da jemand eine Idee, sonst schreibe ich mir sowas wohl selber einmal :) Wäre mir aber lieber wenn es da schon was gibt.

Mit freundlichen Grüßen aus Guatemala
Darian
 
Mir ist da nichts fertiges bekannt, aber etwas zu schreiben sollte ja durchaus moeglich sein.
Problem ist nur dass von Seite zu Seite so ein Kontaktformular zum Teil recht individuell sein kann, also unterschiedliche Informationen vom User abfragt.

Eine Moeglichkeit waere wie folgt:
Gib den Feldern die gemailt werden sollen ein eindeutiges Prefix, z.B. mailform_
Felder die dann z.B. immer da sein sollten waeren mailform_name, mailform_email und mailform_content. Wenn Du den User den Betreff angeben lassen willst optional auch mailform_subject.
Alles andere was mit mailform_ anfaengt packst Du dann mit in den Body der Mail, entweder vor oder hinter mailform_content.
 
Hi,

jap, so in die Richtung. Ich dachte aber daran dass er einfach alle vom Array $_REQUEST einfach als content angibt. (jedes Textfeld kriegt einen brauchbaren name="", sprich dann Key im Array)

Mit einer Schleife in den Content: $key. ": " . $value . "\n";

Und vorher sollte man noch alle unnötigen Einträge manuell löschen können. Wie submit Buttons und dergleichen.

Und das alles wird einfach versendet dann. Und schon sollte ich eine Funktion haben was mir jedes Formular so sendet wie ich es will.

Werde das Morgen mal schreiben denke ich.

lg aus Guatemala
Darian
 
Hallo Leute,

hier mal die Funktion, aber irgendwie habe ich ein paar komische Fehler die ich nicht checke, wäre super wenn mir da noch jemand ein paar Tips geben würde.


Funktion: (Sorry wenn die Kommentare noch etwas komisch sind)
PHP:
<?php
//Funktion um ganze Formulare automatisch zu versenden
/*
	array $content: Der Array wo Schlüssel der Name, und Value der Wert der gesendet werden soll ist
	string $to: Mailadresse an die gesendet wird
	string $subject: Betreff der auch an die Funktion übergeben wird
	$exeption: Ausnahmen die man obwohl sie Werte im Formular sind, nicht im Mail haben will
	$exeption wird wie folgt angegeben: $exeption = "submit versteckt test"; 3 Werte werden nicht versendet
	return: Gib bei Erfolg 1 bei Fehler 0 zurück
*/

function send_mail_to($content, $to, $from, $subject, $exception) {
	
	//Exeption in Array speichern
	$exception = explode(" ", $exception);
	
	//Exeption Array aus Content Array entfernen
	foreach($exception as $key=>$value) {
		unset($content[$key]);
	}
	
	//Content erstellen
	foreach($content as $key=>$value) {
		$mailText .= $key . ": " . $value . "\n"; 
	}
	
	//Mail versenden
	$MailHeader  = "MIME-Version: 1.0\r\n";
	$MailHeader .= "Content-type: text/html; charset=iso-8859-1\r\n";

	$MailHeader .= "FROM: " . $from . "\r\n";
	
	if(mail($to, $subject, $MailText, $MailHeader)) return 1;
		else return 0;
}
?>

Und hier das Testformular:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<title>Kompass Guatemala</title>
</head>
<body>

<?php

include "function.php";

if(isset($_REQUEST["submit"])) {
	
	echo "Versendet";
	
	$ok = send_mail_to($_REQUEST, "jesus@makemebad.at", "darian@sigon.net", "Testmail", "submit");
	
	if($ok) echo "Mail erfolgreich versendet";
		else echo "Mail konnte nicht versendet werden";
	
}
else {
	
?>
<h3>Formular-Test</h3>

<form name="formtest" method="post" action="">
Name: <input type="text" name="Name"><br>
Adresse:	<input type="text" name="Adresse"><br>
Hotel:	<select size="1" name="Hotel">
                  <option selected>Wählen Sie hier ein Hotel</option>
                  <option>Las Farolas</option>
                  <option>Peten Esplendido</option>
                  <option>Atitlán</option>
                  <option>Biltmore Express</option>
                  <option>Bonifaz</option>
                  <option>Cafe del Sol</option>
                  <option>Catamarán</option>
   </select><br>
Text-Content<br>
	 <textarea name="Message" rows="11" cols="45"></textarea><br><br>
	 <input type="submit" name="submit">
	 <input type="hidden" name="versteckt" value="ehwurscht">
</form>
<?php
}
?>

</body>
</html>

Fehlermeldung:
Code:
Parse error: syntax error, unexpected T_VARIABLE in /var/www/mail_funktion/function.php on line 15
Ist die Zeile mit dem explode();

lg und bitte um Hilfe
Darian
 
Ja komisch, so etwas komisches ist mir aber noch nie passiert. Juhu es funktioniert, dachte da würden noch ein paar Fehler kommen.

Na ja, woran kann das dann liegen?

Welche PHP Version benutzt du?

lg und danke für die Infos
Darian
 
Hallo,

ich benutze: 5.2.3, ich denke aber nicht dass es daran liegt. Kann doch innerhalb der 5er da nicht so gravierende Unterschiede geben.

Wäre super wenn mir hier sonst noch irgendjemand weiter helfen könnte, ich habe da jetzt keine Ahnung mehr.

lg Darian
 
Hi,
ich fühle mich von Dir verarscht. Einerseits schreibst Du, dass es funktioniert...
Juhu es funktioniert, dachte da würden noch ein paar Fehler kommen.
andererseits erbittest Du Hilfe von anderen und sagst somit aus, dass es doch nicht funktioniert...
Wäre super wenn mir hier sonst noch irgendjemand weiter helfen könnte, ich habe da jetzt keine Ahnung mehr.
Funktioniert es nun, oder nicht? Entscheide Dich!
Falls Du jetzt doch mehr dazu tendieren solltest, dass es nicht funktioniert, dann ersetze die Dateien durch die folgenden.
function.php
PHP:
<?php
//function send_mail_to($uContents, $uReceiver, $uSubject, $uContents, $uIgnore)
function MySendMail1($uReceiver, $uSender, $uSubject, $uContents, $uIgnore)
{
  $vContents = null;
  
  if(strpos($uIgnore, " "))
  {
    $aIgnore = explode(" ", $uIgnore);
    
    foreach($aIgnore as $tIgnore)
    {
      unset($uContents[$tIgnore]);
    }
    
    unset($aIgnore, $tIgnore);
  }
  else
  {
    unset($uContents[$uIgnore], $uIgnore);
  }
  
  foreach($uContents as $tKey => $tValue)
  {
    $vContents .= $tKey . ": " . $tValue . "\r\n";
  }
  
  unset($uContents, $tKey, $tValue);
  
  $vHeader  = "MIME-Version: 1.0\r\n";
  $vHeader .= "Content-type: text/html; charset=iso-8859-1\r\n";
  $vHeader .= "Return-Path: " . $uSender . "\r\n";
  
  if(@mail($uReceiver, $uSubject, $vContents, $vHeader))
  {
    return true;
  }
  else
  {
    return false;
  }
  
  unset($uReceiver, $uSubject, $vContents, $vHeader);
}

//function send_mail_to($uContents, $uReceiver, $uSubject, $uContents, $uIgnore)
function MySendMail2($uReceiver, $uSender, $uSubject, $uContents, $uIgnore)
{
  $uIgnore = @explode(" ", $uIgnore);
  
  if(is_array($uIgnore))
    foreach($uIgnore as $tIgnore)
      unset($uContents[$tIgnore]);
  else
    unset($uContents[$tIgnore]);
  
  $vContents = null;
  foreach($uContents as $tKey => $tValue)
    $vContents .= $tKey . ": " . $tValue . "\r\n";
  
  $vHeader  = "MIME-Version: 1.0\r\n";
  $vHeader .= "Content-type: text/html; charset=iso-8859-1\r\n";
  $vHeader .= "Return-Path: " . $uSender . "\r\n";
  
  return @mail($uReceiver, $uSubject, $vContents, $vHeader) ? true : false;
}
?>
index.php
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Kompass Guatemala</title>
  </head>
  <body>
<?php
include("function.php");

if(isset($_POST["submit"]))
  if(substr($_POST["Hotel"], -5) == "Hotel")
    echo("    Sie <b>sollten</b> ein Hotel angeben!<br />\n");
  else
    if(MySendMail2("jesus@makemebad.at", "darian@sigon.net", "Testmail", $_POST, "submit"))
      echo("    E-Mail verschickt!<br />\n");
    else
      echo("    E-Mail wurde <b>NICHT<b/> verschickt!<br />\n");
else
  echo <<< EOT
    <h3>Formular-Test</h3>
    <form name="formtest" method="post" action="">
      <table>
        <tr>
          <td>
            Name:
          </td>
          <td>
            <input type="text" name="Name" />
          </td>
        </tr>
        <tr>
          <td>
            Adresse:
          </td>
          <td>
            <input type="text" name="Adresse" />
          </td>
        </tr>
        <tr>
          <td>
            Hotel
          </td>
          <td>
            <select size="1" name="Hotel">
              <option selected>Wählen Sie hier ein Hotel</option>
              <option>Las Farolas</option>
              <option>Peten Esplendido</option>
              <option>Atitlán</option>
              <option>Biltmore Express</option>
              <option>Bonifaz</option>
              <option>Cafe del Sol</option>
              <option>Catamarán</option>
            </select>
          </td>
        </td>
        <tr>
          <td>
            Text-Content
          </td>
          <td>
            <textarea name="Message" rows="11" cols="45"></textarea>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>
            <input type="submit" name="submit" value="Senden" />
          </td>

        </tr>
      </table>
      <input type="hidden" name="versteckt" value="ehwurscht">
    </form>
EOT;
?>

  </body>
</html>
Die auskommentierten Zeilen entsprechen Deinem Funktionskopf inklusive der Reihenfolge der Argumente. Mir ist es egal, ob Du die erste Funktion benutzt, oder die Zweite. Mir gefällt die Zweite besser, das ist aber Geschmackssache. Es kann sein, dass MySendMail2 (ein paar Millisekunden) schneller ist als MySendMail1. "index.php" entspricht Deinem Funktionsaufruf, nur mit Stil, dafür ohne die Fehler, die Du gemacht hast.
 
Hallo,

Ich wollte damit nur sagen dass es bei jemand anderen funktioniert hat. Bei mir hat es nie funktioniert. Ist also ein Missverständniss.

Jedenfalls danke für die Infos, und ich werde das demnächst einmal ausprobieren,

lg, und danke für die Infos
Darian
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück