Komischer Fehrler im Kontaktformular

satanus

Grünschnabel
Also habe mir nen neues Kontaktformular nach der vorlgae der c't gebastelt aber ich bekomme immer eine Fehlermeldung von Server...

Das Skript
PHP:
  <?php
     error_reporting(E_ALL);
      setlocale(LC_ALL, 'de_DE');
      $code = chr((date("y") + 7) % 10 + date("m") + 68 + (date("m") % 2) * 32) . chr((date("d") + (date("d") %2)) / 2 + 66 + (37 * (date("d") %2)));
    
     if(isset($_POST['los'])) {
      if(!isset($_POST['code']) || $_POST['code'] != $code) die('Mailcode fehlt!');
     
      $pruefung = array(
      'name' => '/^[[:print:]]{3,}$/',
      'absender' => '/^ [\w.!#%&\*\/=\?\^\`\{\|\}\~+-]{1,64} \@
  [[:alnum:].-]{1,255} \. [a-z]{2,6} $/xi',
    'MSN',
       'betreff' => '/^[[:print:]]{3,}$/',
    'text' => '/^[[:print:][:space:]]{10,}$/'
  );
 
      foreach($_POST as $parameter => $wert) {
     
   if(isset($pruefung[$parameter])) {
    if(!preg_match($pruefung[$parameter], $wert)) die('Probleme mit Feld ' . $parameter . ': ' . $wert);
   } else {
  
    unset($_POST[$parameter]);
   }
  }

      if(!getmxrr(substr(strstr($_POST['absender'], '@'), 1), $mxhosts)) die("Konnte keine gültige Domain für " . $_POST['absender'] . " finden!");
 
      if(mail('admin@nobnoh.de', $_POST['betreff'], $_POST['text'], $_POST['name'], $_POST['absender'], "From:" . $_POST['absender'])) {
  
    echo "<p>Nachricht von " . $_POST['absender'] . " an admin@nobnoh.de gesendet!</p>";
      } else {
 
   echo "<p>Nachricht konnte nicht gesendet werden!</p>";
  }
 } else {

?>

Fehlermeldung hat gesagt.:
Warning: mail() expects at most 5 parameters, 6 given in /www/htdocs/leinad/test.php on line 38

Nachricht konnte nicht gesendet werden!

habe aber nie festgelgt das nur 5 parameter übergeben werden dürfen oder etwa doch!?
Woran liegt das Problem ich hoffe ihr könnte mir helfen!?
 
ja das ist ja leider mein problem mit dem At most ... ich finde die stelle nciht wo ich ihm sage das 5 ausgaben das höchste der gefühle sind...
 
Wie aus der Fehlermeldung (und aus dem Quellcode) ersichtlich, wird der mail()-Funktion in der Zeile 38 der „/www/htdocs/leinad/test.php“-Skriptdatei sechs statt nur der fünf erlaubten Parameter übergeben.
 
ja soweit habe ich das ja auch verstanden... und das ist ja auch richtig das er 6 übergeben soll, aber ich weis nicht wo ich ihm gesagt habe das er nur 5 übergeben darf...!?
 
Die mail()-Funktion ist keine benutzerdefinierte Funktion sondern eine, die fest im PHP-Repertoire enthalten ist. Und diese Funktion ist definiert, dass maximal fünf Parameterwerte übergeben werden können (siehe Dokumentation).
 
Gut jetzt habe ich das auch verstande und gefunden nun ist aber das Problem das ich nicht weis wie ich das erweitern kann ohne komplizierte anweisung oder wie auf deinem link empfohlen mit PEAR::Mail ...
 
Anstatt es so zu machen:
PHP:
mail(
		'admin@nobnoh.de', 
		$_POST['betreff'], 
		$_POST['text'], 
		$_POST['name'], 
		$_POST['absender'], 
		"From:" . $_POST['absender'] // das 6. Parameter der nicht erlaubt ist!
		// was ich nicht verstehe... der ist doch an 5. stelle schon gesetzt?
)

machst du es einfach so:
PHP:
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "From: ".$absender."\r\n";
$headers .= "Cc: ".$sichtbare_weitere_empfaenger."\r\n";
$headers .= "Bcc: ".$versteckte_weitere_empfaenger."\r\n";
mail(
		'admin@nobnoh.de', 
		$_POST['betreff'], 
		$_POST['text'], 
		$_POST['name'], 
		$headers
)

etc.pp.

Weite Informationen über Mail-Header findest du Hier

Sollten die Mails net ankommen anstatt \r\n einfach nur \n benutzen.
 
also es sind 5 er laubt und der 6. ist oben der spamschutz der versteckt mitgesendet wir... und deine methode probiere ich mal aus... weis zwar nich nicht wie ich das bei mir einbauen soll ohne meine regeln oben zu änden!?

PHP:
 .... 
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "From: ".$absender."\r\n";
mail(
        'admin@nobnoh.de', 
        $_POST['betreff'], 
        $_POST['text'], 
        $_POST['name'], 
        $headers {
   
    echo "<p>Nachricht von " . $_POST['absender'] . " an admin@nobnoh.de gesendet!</p>";
  	} else {
  
   echo "<p>Nachricht konnte nicht gesendet werden!</p>";
  }
 } else {

?>

also so geht es nicht
 
Zuletzt bearbeitet:
Hier dein fertiger Code:
PHP:
<?php
error_reporting(E_ALL);
setlocale(LC_ALL, 'de_DE');
$code = chr((date("y") + 7) % 10 + date("m") + 68 + (date("m") % 2) * 32) . chr((date("d") + (date("d") %2)) / 2 + 66 + (37 * (date("d") %2)));

if(isset($_POST['los'])) {
	if(!isset($_POST['code']) || $_POST['code'] != $code) {
		die('Mailcode fehlt!');
	}	
	$pruefung = array(
						'name' => '/^[[:print:]]{3,}$/',
						'absender' => '/^ [\w.!#%&\*\/=\?\^\`\{\|\}\~+-]{1,64} \@ [[:alnum:].-]{1,255} \. [a-z]{2,6} $/xi',
						'MSN',
						'betreff' => '/^[[:print:]]{3,}$/',
						'text' => '/^[[:print:][:space:]]{10,}$/'
		);
		foreach($_POST as $parameter => $wert) {
			if(isset($pruefung[$parameter])) {
				if(!preg_match($pruefung[$parameter], $wert)) {
					die('Probleme mit Feld ' . $parameter . ': ' . $wert);
				}
			} else {
				unset($_POST[$parameter]);
			}
		}
		if(!getmxrr(substr(strstr($_POST['absender'], '@'), 1), $mxhosts)) {
			die("Konnte keine gültige Domain für " . $_POST['absender'] . " finden!");
		}
		$headers  = "MIME-Version: 1.0\r\n";
		$headers .= "From: ".$_POST[absender]."\r\n";
		if(mail(
				'admin@nobnoh.de', 
				$_POST['betreff'], 
				$_POST['text'], 
				$_POST['name'], 
				$headers)) {
		echo "<p>Nachricht von " . $_POST['absender'] . " an admin@nobnoh.de gesendet!</p>";
	} else { 
		echo "<p>Nachricht konnte nicht gesendet werden!</p>";
	}
} else {

?>
 
Zurück