Kontaktformular - Was mache ich falsch?!

altox-de

Erfahrenes Mitglied
Hallo,
ich habe folgende "sendscript.php":

PHP:
<?PHP
 
 $Fehlen = "";
 if (empty($Name)) {
    $Fehlen = $Fehlen."<LI>Ihr Name";
 } 
  if (empty($eMail)) {
    $Fehlen = $Fehlen."<LI>Ihre eMail-Adresse";
 }
  if (empty($Nachricht)) {
    $Fehlen = $Fehlen."<LI>Ihre Nachricht";
 } 
    
 if (!empty($Fehlen)) {
   echo "<body bgcolor=white><font size=3 face=Arial color=black>";
   echo "Bitte entschuldigen Sie, aber Ihre Nachricht wurde nicht versandt.<BR>";
   echo "Es fehlten nämlich folgende Angaben:<BR><BR>";
   echo "<B>$Fehlen</B><BR><BR>";
   echo "Bitte klicken Sie in Ihrem Internetbrowser auf Zurück versuchen Sie es erneut!<BR>";
   echo "Wichtig ist, dass Sie alle mit * gekenntzeichneten Felder ausfüllen!<BR><BR>Danke!</font>";
} else {
 
  $header = "MIME-Version: 1.0\n"; 
$header .= "Content-type: text/html; charset=iso-8859-1\n"; 
$header .= "From: info@xxx.de\n";
  
  $Body ="<html><body><font size=4 face=Arial><b>eMail / Anfrage</b><font size=3> <p> <u>Nachricht:</u><br> $Nachricht <p> <u>Daten:</u><br>Name: $Name <br> Adresse: $Adresse1, $Adresse2 <br> eMail: $eMail <br> Datum: ".date("d. m. (M) Y - H:i")." Uhr <br> IP-Adresse: $REMOTE_ADDR <p> Vielen Dank für Ihre Nachricht,<br>Ihr Förderverein des xx<p> eMail: <a href=mailto:info@xxx.de>info@xxx.de</a><br>Homepage: <a href=http://www.xxx.de>www.xxx.de</a></body></html>";
    mail("$eMail;$An", "$Betreff", "$Body", $header );

  header ("location: http://danke.html");

 }
    
?>

Die Rechte von der Datei sind auf 777 gesetzt.

Die Datei wird von folgendem Code (aus einer .html-Seite) aufgerufen:

PHP:
<form action="sendscript.php" method="post" name="sendscript">
						<table width="419" border="0" cellspacing="0" cellpadding="0" height="235">
							<tr height="23">
								<td colspan="3" width="419" height="23"><font color="black" face="arial">Bitte f&uuml;llen&nbsp;Sie alle mit * gekenntzeichnete Felder aus:</font><input type="hidden" name="An" value="xxx@xxx.de"><input type="hidden" name="Betreff" value="eMail-Anfrage"></td>
							</tr>
							<tr height="23">
								<td width="200" height="23"><font color="black" face="arial">Ihr&nbsp;Name: 


(und so weiter ...)


					</form>

Die Seite: http://www.xxx.de

Was mache ich falsch? Es wird nämlich keine eMail versandt?!
Danke für die Hilfe!
Claudi
 
Zuletzt bearbeitet:
Ich würde dir mal das Stichwort "Debugging" empfehlen... dabei geht man systematisch durch das script und überprüft es nach Fehlern... ansonsten denke ich mal, dass "register_globals" einmacl mehr potentielle Fehlerquelle ist...
 
Was ist denn "register_globals" ?!
Dieses Thema wurde bereits ausreichend behandelt. Bitte benutze die Suchfunktion um weitere Informationen zu erhalten.

Probier mal Folgendes:
PHP:
<?php

	$errors = array();


	if( !isset($_POST['Name']) ) {
		$errors[] = 'Bitte geben Sie Ihren Namen an!';
	}
	if( !isset($_POST['eMail']) ) {
		$errors[] = 'Bitte geben Sie Ihre E-Mail-Adresse an!';
	}
	if( !isset($_POST['Nachricht']) ) {
		$errors[] = 'Bitte geben Sie Ihre Nachricht an!';
	}


	if( !empty($errors) ) {

		echo '<div class="note error"><h3>Fehler</h3><ul>';
		foreach( $errors as $error ) {
			echo '<li>'.$error.'</li>';
		}
		echo '</ul></div>';

	} else {

		$_additionalHeaderFields = array(
			'MIME-Version' => '1.0',
			'Content-Type' => 'text/html;charset="iso-8859-1"',
			'From'         => 'info@dielustigekleinewebseite.de'
		);
		$additionalHeader = '';
		foreach( $_additionalHeaderFields as $_fieldName => $_fieldValue ) {
			$additionalHeader .= $_fieldName.': '.$_fieldValue . chr(0x0D).chr(0x0A);
		}
		$body = "<html><body><fontsize=4face=Arial><b>eMail/Anfrage</b><fontsize=3><p><u>Nachricht:</u><br>$Nachricht<p><u>Daten:</u><br>Name:$Name<br>Adresse:$Adresse1,$Adresse2<br>eMail:$eMail<br>Datum:".date("d.m.(M)Y-H:i")."Uhr<br>IP-Adresse:$REMOTE_ADDR<p>VielenDankfürIhreNachricht,<br>IhrFördervereindesOberreitnauerFreibades<p>eMail:<ahref=mailto:info@freibad-oberreitnau.de>info@freibad-oberreitnau.de</a><br>Homepage:<ahref=http://www.freibad-oberreitnau.de>www.freibad-oberreitnau.de</a></body></html>"; 
		mail($_POST['eMail'].';'.$_POST['An'], $_POST['Betreff'], $body, $additionalHeader);
		header('Location:http://www.dielustigekleinewebseite.de/danke.html');

	}

?>
Übrigens solltest du wissen, dass dein Skript noch einige Sicherheitslücken birgt.
 
Hallo,
danke - aber dein Code funktioniert auch nicht!

Jetzt erscheint immer die Fehlermeldung,
dass ich die drei Pflicht-Felder nicht ausgefüllt hätte,
obwohl ich das getan habe?!
 
Dann solltest du schleunigst register_globals deaktiveren. (Bevor du jetzt fragst, was das ist, suchst du zuerst bei Google und dann hier im Forum.)
 
Hallo.
Habe mal das hier gefunden:

register_globals ist eine Einstellung in der php.ini, diese sorgt, wenn sie off ist, dafuer, dass der Programmierer sauberer programmieren muss.
Anstatt uebergebene Variablen direkt mit dem Namen anzusprechen muss man sie aus den Arrays $_POST, $_GET, etc. holen.
Dies scheint auf den ersten Blick umstaendlich, man gewoehnt sich aber sehr schnell daran und hat dadurch z.B. den Vorteil, dass man nicht ploetzlich in diese Falle rennt in die Du mit voller Geschwindigkeit gerasselt bist.

Das Kontaktformular und auch das Sendscript liegen
auf einem Server von netbeat.de - ich weiß nicht, ob ich da
die register_globals deaktivieren kann - da gibt's gar keine php.ini... !
 
Wenn es auf dem Server scheinbar keine php.ini gibt (glaub mir, es gibt eine), wird es wohl kein Root-Server sein. Dementsprechend hast Du auch keinen Zugriff auf die PHP-Einstellungen, das kann dann nur der Hoster.
 
Hallo,
danke für die Antwort!

Mmh, das is blöd... GIbt es nicht ne andere
Kontakt-Formular-Variante (oder ne andere Schreibweise...)
dass das Formular auch ohne Einstellung an den globals funktioniert?!
 
Hi,

es sollte grundsaetzlich so programmiert werden, dass das Script unter moeglichst allen Einstellungen laeuft.
Wenn man eine Testumgebung hat sollte man diese dementsprechend so restriktiv wie moeglich einstellen, dann kann man in der Regel davon ausgehen, dass das Script weiterhin laeuft wenn man es irgendwo hochlaedt.
Ich empfehle, dass zumindest folgende Einstellungen vorgenommen werden:
SafeMode=on
register_globals=off
error_reporting=E_ALL
allow_url_fopen=off
 
Zurück