Fehler Kontaktformular

_SimonSez_

Mitglied
Hallo zusammen,

habe ein Problem mit meinem Kontaktformular.
Mein Formular ist eine eigene PHP-Datei, die ich per "include" in eine DIV-Box Lade.

Bekomme jetzt immer folgenden Fehler:
"Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /hp/bo/ab/yh/www/neu/005.php:2) in /hp/bo/ab/yh/www/neu/formular.php on line 17"

PHP:
<?php
  $ihre_emailadresse = '####';
  $email_absender = 'From: Kontaktformular <system@domain.tld>';
  $email_betreffzeile = 'Kontaktformular-Anfrage';

  $errormessage[0] = 'Sie haben nicht alle Felder ausgefüllt:';
  $errormessage[1] = '<br />- Ungültiger Name';
  $errormessage[2] = '<br />- Ungültiger E-Mailadresse';
  $errormessage[3] = '<br />- Ungültiger Betreff';
  $errormessage[4] = '<br />- Ungültige Nachricht';
  $errormessage[5] = '<br />- Ungültiger Sicherheitscode';
  $errormessage[6] = '<br />- Ungültige Zeichen entdeckt';

  $okay = 'Vielen Dank für Ihre Nachricht<br /><br />';


session_start();
  if(isset($_POST['submit'])) {
    $name =       check($_POST['name']);
    $email =      check($_POST['email']);
    $betreff =    check($_POST['betreff']);
    $nachricht =  check($_POST['nachricht']);

    $ip = $_SERVER['REMOTE_ADDR'];
    $host = gethostbyaddr($ip);

    $zeit = time();
    $datum = date ("d.m.Y", $zeit);
    $uhrzeit = date ("H:i:s", $zeit);

    $message = '<span style="color:red">' . $errormessage[0];
      if($name==''){$message .= $errormessage[1]; $fehler = 1;}
      if(!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,6})$", $email)) {
	    $message .= $errormessage[2]; $fehler = 1;}
      if($betreff==''){$message .= $errormessage[3]; $fehler = 1;}
      if($nachricht==''){$message .= $errormessage[4];	$fehler = 1;}
      if($_POST['code']=="" || strtolower($_POST['code'])!=$_SESSION['captcha_code']){
	    $message .= $errormessage[5]; $fehler = 1;}
      if(ehi_check()!=0){$message .= $errormessage[6];  $fehler = 1;}
        $message .= '</span><br /><br />';

  if(!isset($fehler)){
    $email_nachricht  = "-- Kontakformularanfrage --\n\nBetreff: $betreff";
    $email_nachricht .= "\nName: $name\nE-Mailadresse: $email\nHomepage: $homepage\n\n";
    $email_nachricht .= "Nachricht:\n$nachricht\n\nIP: $ip\nHost: $host\n";
    $email_nachricht .= "gesendet am $datum um $uhrzeit.";
			 
@mail($ihre_emailadresse, $email_betreffzeile, $email_nachricht, $email_absender);
			
  $name       = '';
  $betreff    = '';
  $email      = '';
  $nachricht  = '';
  $homepage   = '';			
  $meldung=$okay;
  
		    } else {
		    $meldung=$message;
		    }
	}
  else{$meldung='';}
?>

<script type="text/javascript">function reload_captcha(){ var nd = new Date(); var src="captcha.php?"+nd; document.getElementById("captcha").src= src; }</script>

<form name="formular" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table style="width:187px" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="2"><?php echo $meldung; ?></td>
  </tr>
  <tr>
    <td colspan="2">Name:<br /><input style="height:22px; width:180px;" name="name" type="text" value="<?php echo $name;	?>" /></td>
  </tr>
  <tr>
    <td colspan="2">E-Mail Adresse:<br /><input style="height:22px; width:180px;" name="email" type="text" id="email" value="<?php echo $email; ?>" /></td>
  </tr>
  <tr>
    <td colspan="2">Betreff:<br /><input style="height:22px; width:180px;" name="betreff" type="text"  value="<?php echo $betreff; ?>" /></td>
  </tr>
  <tr>
    <td colspan="2">Nachricht:<br /><textarea style="height:100px; width:180px; white-space: nowrap;" name="nachricht" cols="20" rows="5"><?php echo $nachricht;	?></textarea></td>
  </tr>
  <tr>
    <td colspan="2">Sicherheitsabfrage:</td>
  </tr>
  <tr>
    <td width="70px"><img id="captcha" src="captcha.php" alt="captcha" border="0"  /></td>
    <td style="padding-left:10px;"><input style="height:22px; width:95px;" name="code" type="text" /></td>
  </tr>
  <tr>
	<td colspan="2"><input type="submit" value="Abschicken" name="submit" /></td>
</tr>
</table>
</form>


<?php 
function check($var){ $varsafe=trim(strip_tags($var)); return $varsafe; }
function ehi_check(){
  $achtung=0;
  foreach($_POST as $val){
  $pos = strpos(strtolower($val), 'content-type:'); if($pos !== false){$achtung++;}
  $pos = strpos(strtolower($val), 'content-type');  if($pos !== false){$achtung++;}
  $pos = strpos(strtolower($val), 'bcc:');          if($pos !== false){$achtung++;}
  $pos = strpos(strtolower($val), 'bcc');           if($pos !== false){$achtung++;}
  }
  return $achtung;
} 
?>

Kann mir jemand helfen und sagen was der Fehler ist?
Habe leider noch nicht so viel Ahnung von PHP.

Gruß
Simon
 
Hi Sven,

dort habe ich eine Info für meine Navigation (<?php $thisPage="005.php"; ?>) damit der Menüpunkt als aktiv angezeigt wird

Gruß
Simon

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php $thisPage="005.php"; ?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>***</title>
    <link rel="stylesheet" type="text/css" href="css/main.css" />
    <link rel="shortcut icon" href="img/icon.ico">
  </head>

  <body>
    <div id="wrapper" class="clearfix">
      <? include ("left.php") ;?>
      <div id="center">
        <? include ("head.php") ;?>
        <? include ("navi.php") ;?>
        <div id="content" class="clearfix">
          <div id="leftcolumn">
            <h1>Test</h1> 
          </div>
          <div id="rightcolumn">
            <h1>Kontaktformular</h1>
             <? include ("formular.php") ;?>
          </div>
        </div>
      </div>
      <? include ("right.php") ;?>
    </div>
  </body>
</html>

Gruß
Simon
 
Jo, das geht so nicht, zumindest nicht, wenn du später noch eine Session starten willst oder sonstiges, wo Header gesendet werden müssen.

Füge ganz am Anfang der 005.php folgendes ein:
Code:
<?php
ob_start();
?>
 
Danke, hat funktioniert :)
So ist es dann richtig oder?

Code:
<?php ob_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php $thisPage="005.php"; ?>

Gruß
Simon
 
Jo, so hatte ich es gemeint :)

Dieses ob_start() aktiviert den sogenannten Ausgabepuffer.
Es erfolgt keine Ausgabe an den Browser, bevor dieser Puffer oder das Skript nicht beendet wurden...es können dadurch später noch Header gesendet werden.

Setze diesen Puffer aber nur ein, wenn du ihn wirklich brauchst(wie im gegebenen Fall) ...der Inhalt des Puffers wird im RAM zwischengelagert, welchen man nicht ohne Not zumüllen sollte.

Alternativ könntest du die Session auch gleich in der 005.php am Anfang starten...ob das geht/sinnvoll ist, hängt aber von deiner Anwendung ab.
 
Zurück