Simon: Notice: Undefined offset

Hi,
als ich mein Gästebuch fertig hatte habe ich es auf einem Lokalen Server getestet. Alles hat super funktioniert. Jezt, steht auf der Seite wo das Gb angezeigt wird unter den Einträgen:

Notice: Undefined offset: 1 in C:\xampp\htdocs\guestbook.php on line 95

Notice: Undefined offset: 2 in C:\xampp\htdocs\guestbook.php on line 96

Notice: Undefined offset: 3 in C:\xampp\htdocs\guestbook.php on line 97

Notice: Undefined offset: 4 in C:\xampp\htdocs\guestbook.php on line 98

Hier ein TEil des Scripts:
<?php
  error_reporting(E_ALL);
  $datenbankdatei = 'gaestebuch.txt';
  $mailempfaenger = 'mymail@example.com';
  if(!file_exists($datenbankdatei))
    if(!@touch($datenbankdatei))
      die("Fehler: Die Datenbank ist nicht erreichbar.");

if(isset($_POST['button']))
  {
   if($_POST['name'] == "" || $_POST['eintrag'] == "")
   {
     echo 'Es fehlen Angaben. Bitte vollständig ausfüllen';
   }
   else
   {

$eintrag = date('d.m.Y , H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";
      if(!$file = @fopen($datenbankdatei,"a"))
        die("Fehler: Die Datenbank ist nicht erreichbar.");

flock($file,LOCK_EX) or die();

if(!@fwrite($file, $eintrag))
        die("Fehler: Die Datenbank ist nicht erreichbar.");

flock($file,LOCK_UN) or die();

fclose($file);

echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="webdesign.php">Zurück zum Gästebuch</a>';

@mail($mailempfaenger, "Gästebucheintrag", "Folgender Eintrag wurde hinterlassen:\n\nName: ".$_POST['name']."\nAbsender: ".$_POST['email']."\nText: ".$_POST['eintrag']."\n\nIP: ".$_SERVER["REMOTE_ADDR"]."\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" . phpversion());
   }
  }
  else
  {

echo '<h2 class="ueberschriften">Gästebuch</h2>';

$file = fopen($datenbankdatei, 'r');

while (!feof($file))
    {
      $zeile  = fgets($file, 5000);
      $daten  = explode(" || ", $zeile);
      $datum  = $daten[0];
      $ip     = $daten[1];
      $name   = $daten[2];
      $email  = $daten[3];
      $eintrag = $daten[4];
      if($name != "" && $eintrag != "")
        echo '<div style="background-color:#CCCCCC;"><'.$email.'">'.$name.'</a> am '.$datum.'<br /></div>'.$eintrag.'<br><br />';

}
    fclose($file);

}
?>

MFG
Simon

  1. Nabend,

    die Meldung kommt, wenn du einen Index eines Arrays aufrufst, der nicht existiert -- sofern ich mich nun nicht irre.
      ~~~php <?php
      $meinArray = Array("hallo", "welt"); // 2 Indexe
      echo $meinArray[0]; //okay
      echo $meinArray[1];
      echo $meinArray[2]; //undefined offset
      ?>

      
    Du könntest entweder das '@' verwenden, oder du veränderst die Ausgabe der Fehlermeldungen oder machst es sonst wie anders.  
      
    Die genaue Fehlerquelle könnte man besser finden, wenn du auch die Zeilen 95-98 aus deinem Script posten würdest.  
      
      
    Gruß,  
    Christian Wansart
    
    1. Nabend,

      die Meldung kommt, wenn du einen Index eines Arrays aufrufst, der nicht existiert -- sofern ich mich nun nicht irre.
        ~~~php

      <?php

      $meinArray = Array("hallo", "welt"); // 2 Indexe
        echo $meinArray[0]; //okay
        echo $meinArray[1];
        echo $meinArray[2]; //undefined offset
        ?>

      
      >   
      > Du könntest entweder das '@' verwenden, oder du veränderst die Ausgabe der Fehlermeldungen oder machst es sonst wie anders.  
      >   
      > Die genaue Fehlerquelle könnte man besser finden, wenn du auch die Zeilen 95-98 aus deinem Script posten würdest.  
      >   
      >   
      > Gruß,  
      > Christian Wansart  
        
      Aso, hab vergessen  
        
      die Zeilen 95-98 sind  
        
            $name   = $daten[2];  
            $email  = $daten[3];  
            $eintrag = $daten[4];  
            if($name != "" && $eintrag != "")  
        
        
      MFG Simon
      
      1. siehe christans antwort - setz mal vor das ganze ein var_dump($daten); ich bin mir sicher, dass du im array schlüssel ansprichst, die nicht existieren

        1. siehe christans antwort - setz mal vor das ganze ein var_dump($daten); ich bin mir sicher, dass du im array schlüssel ansprichst, die nicht existieren

          Könntest du mir das etwas besser erklären, wo ich das schreiben soll.
          Hab nicht sehr viel Erfahrung mit PHP

          MFG
          Simon

          1. Könntest du mir das etwas besser erklären, wo ich das schreiben soll.
            Hab nicht sehr viel Erfahrung mit PHP

            irgendwo, vollig egal - am besten in der nähe des fehlers ;) - also sagen wir nach zeile 98 (sofern das script nach der fehlermeldung weiterläuft)

            var_dump() gibt den inhalt von variablen aus - es sagt dir zb welcher datentyp welches ding ist

            damit kannst du feststellen, ob in deinem array überhaupt daten einhalten sind oder eben nicht

            am besten gibst du davor noch irgend ein erkennungszeichen aus

            zb echo "### hier kommt meine debugausgabe ###" . var_dump($daten) . "### debug ende ###";

            1. Könntest du mir das etwas besser erklären, wo ich das schreiben soll.
              Hab nicht sehr viel Erfahrung mit PHP

              irgendwo, vollig egal - am besten in der nähe des fehlers ;) - also sagen wir nach zeile 98 (sofern das script nach der fehlermeldung weiterläuft)

              var_dump() gibt den inhalt von variablen aus - es sagt dir zb welcher datentyp welches ding ist

              damit kannst du feststellen, ob in deinem array überhaupt daten einhalten sind oder eben nicht

              am besten gibst du davor noch irgend ein erkennungszeichen aus

              zb echo "### hier kommt meine debugausgabe ###" . var_dump($daten) . "### debug ende ###";

              Hi,
              danke für die Hilfe.

              Problem ist gelöst, un hab es gleich ausgebessert. Da ich das Script schon einmal auf einem anderen Server getestet hab wo alles funktioniert hab dachte ich dass alles geht.

              MFG
              Simon

          2. Hello,

            Könntest du mir das etwas besser erklären, wo ich das schreiben soll.
            Hab nicht sehr viel Erfahrung mit PHP

            Erstmal solltet Du froh sein, dass der jetzige Server keine Notices unterdrückt, denn der Zugriff auf nicht vorhandene Variablen kann in PHP verheerende Sicherheitslöcher aufreißen.

            Dann solltest Du Dir angewöhnen, eben nicht auf unbekannte Variablen zuzugreifen. Das fängst Du am besten durch eine saubere Programmierung und in allen fraglöichen Fällen durch

            if (isset($variable))

            auf: http://www.php.net/manual/de/function.isset.php

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
      2. Hi,

        die Zeilen 95-98 sind

        $name   = $daten[2];
              $email  = $daten[3];
              $eintrag = $daten[4];
              if($name != "" && $eintrag != "")

        das dürften die Zeilen 96-99 sein, denn die Fehlermeldungen beziehen sich auf die Offsets 1-4 und in der letzten Zeile wird gar kein Array angesprochen. Zeile 95 dürfte wohl $ip = $daten[1]; enthalten.
        Abgesehen davon, dass diese Umkopiererei unsinnig ist, hatte wohl
        $daten  = explode(" || ", $zeile);
        nicht wie gewünscht funktioniert und nur ein Feld angelegt.
        Übrigens solltest Du auch mal überlegen was passiert, wenn jemand z.B. als Namen " || " eingibt... ;-) Von Spam-Bots mal ganz abgesehen...

        freundliche Grüße
        Ingo