Antworten auf deine Fragen:
Neues Thema erstellen

Undefined offset im gästebuch

Inaliii

Noch nicht viel geschrieben

hallo ich habe eine frage da ich im moment nicht weiter komme vielleicht kann mir jemand von euch helfen

ich habe ein textdateibasierendes gästebuch den code hier:

PHP:
error_reporting(E_ALL);

  $datenbankdatei = 'gaestebuch.txt';
  $mailempfaenger = 'postfach@domain.tld';

  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="'.$_SERVER["PHP_SELF"].'">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>mein Gästebuch</h2>';

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

   
            while (!feof($file))
            {
 
      $zeile  = fgets($file, 5000);
      $daten  = explode(" || ", $zeile);
      $datum  = $daten[0];
      $ip     = $daten[1];                       //--- Undefined offset:  1
      $name   = $daten[2];                   //---- Undefined offset: 2
      $email  = $daten[3];                    //---Undefined offset: 3
      $eintrag = $daten[4];                 //--- Undefined offset: 4

   
      if($name != "" && $eintrag != "")
        echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';

            }
    fclose($file);

   
    echo '<hr />';

     }
ich bekomme folgende meldungen:

Notice: Undefined offset: 1 in C:\xampp\htdocs\web\gaestebuch_textd\gaestebuchtest.php on line xxx

Notice: Undefined offset: 2 in C:\xampp\htdocs\web\gaestebuch_textd\gaestebuchtest.php on line xxx

Notice: Undefined offset: 3 in C:\xampp\htdocs\web\gaestebuch_textd\gaestebuchtest.php on line xxx

Notice: Undefined offset: 4 in C:\xampp\htdocs\web\gaestebuch_textd\gaestebuchtest.php on line xxx



er zeigt alles richtig an alle inhalte der textdate doch habe ich das gefühl beim auslesen des arrays kommt es zu einem problem.
natürlich könnte ich sagen ok es funktioniert ja aber ich hätte es schon gern soweit sauber, da ich noch ein paar zusäte wie anti spam usw dazu programmieren möchte.
 
Zuletzt bearbeitet:

netbandit

Aktives Mitglied

AW: Undefined offset im gästebuch

Hast Du denn schon Einträge im Gästebuch? Wenn nicht mach mal bitte einen und schau ob die Meldungen immer noch angezeigt werden.

BTW. Für die Fehlersuche braucht man schon die Zeilennummer, xxx bringt da niemanden weiter. Evtl. noch dazuschreiben, ab welcher Zeile Dein abgebildeter Code anfängt.

Grüße
 

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

ahm i hab sogar schon per hand einträge gemacht immer selber fehler ich trag oben im code den fehler ein das ist übersichtlicher
 

netbandit

Aktives Mitglied

AW: Undefined offset im gästebuch

Ist mir schon klar, daß es daran liegt

Du schreibst Du trägst es per Hand ein; was heisst per Hand? Öffnest Du die Textdatei und schreibst darein?
 

cebito

undefined

AW: Undefined offset im gästebuch

ahm i hab sogar schon per hand einträge gemacht immer selber fehler ich trag oben im code den fehler ein das ist übersichtlicher

Wenn du schon per Hand Einträge gemacht hast, wie sehen die denn aus? So?

14.05.2010 || 0001 || cebito || keine email || ob das der Fehler ist?

Die Ursache für die Fehlermeldung ist nämlich, das der entsprechende Key im Array $daten nicht existiert. Mit
PHP:
$daten  = explode(" || ", $zeile);
nimmst du die jeweilige Zeile (Gästebucheintrag) auseinander, splittest die genau bei "||" auf und trägst sie in $daten ein.
Wenn also keine "||" zwischen den einzelnen Punkten vorhanden sind, wird auch nichts aufgesplittet wodurch alle daten in $daten[0] landen und du diese Fehlermeldung erhältst.
 
Zuletzt bearbeitet:

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

danke erst mal ich hab sie übers formular und in die textdatei direkt eingetragen.

zwischen den einzelnen punkten sind die || vorhanden doch am ende erscheint in der textdate ein kleines quadrat was für ein zeilenumbruch /n steht

ist das dann der fehler?
 

cebito

undefined

AW: Undefined offset im gästebuch

Aah, ok, grad gesehn, der Zeilenumbruch hinter dem letzten Eintrag muss weg, sonst versucht php noch eine (leere) neue Zeile zu lesen und die erzeugt dann den Fehler. So sollte es funktionieren indem du prüfst ob $zeile leer ist

PHP:
 while (!feof($file)){

      $zeile  = fgets($file, 5000);

      if(!empty($zeile)){
         $daten  = explode(" || ", $zeile);
         $datum  = $daten[0];
         $ip     = $daten[1];
         $name   = $daten[2];
         $email  = $daten[3];
         $eintrag = $daten[4];

         if($name != "" && $eintrag != "")
            echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
       }
}
 
Zuletzt bearbeitet:

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

oh mann danke dir

manchmal hat man aber au n brett vor m kopf
 
Zuletzt bearbeitet:

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

Ha ich seh gerade, dass er dann alle neuen Einträge gar nicht mehr mit ausgibt das kann dann so auch nicht sein. hmmm
 

netbandit

Aktives Mitglied

AW: Undefined offset im gästebuch

Was passiert eigentlich wenn der Gast Umbrüche z.B. im Feld 'eintrag' eingibt? Wird doch wahrscheinlich vom Typ textarea sein, oder?
 

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

PHP:
<?php


    echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
  
  error_reporting(E_ALL);

  
  $datenbankdatei = 'gaestebuch.txt';
  $mailempfaenger = 'sabrina_plaschke@csn-online.net';

  
  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="'.$_SERVER["PHP_SELF"].'">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>mein Gästebuch</h2>';

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

            while (!feof($file))
            {
      
      $zeile  = fgets($file, 5000);

      if(!empty($zeile)){
         $daten  = explode(" || ", $zeile);
         $datum  = $daten[0];
         $ip     = $daten[1];
         $name   = $daten[2];
         $email  = $daten[3];
         $eintrag = $daten[4];
         

      if($name != "" && $eintrag != "")
        echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';

            }
         }
         
    fclose($file);

    
    echo '<hr />';

     }
echo "<pre>";
print_r($daten);
echo "</pre>";  


?>

Heute mach ich die Datei nochmals auf und wieder Fehler:

Array
(
[0] => 17.05.2010 - 10:55:13
[1] => 000
[2] => ina
[3] => fuddl@bla.de
[4] => hi test/n17.05.2010 - 10:55:31
[5] => 000
[6] => ina
[7] => fuddl@bla.de
[8] => test2/n


die ausgabe
)
doch allerdings erscheint nur d erste eintrag also array und das /n macht auch probleme er spaltet allesnicht richtig auf
 

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

hab das in der textdatei hab keine sql spielen dann textarea auch ne rolle? ich mach sowas normal immer mit sql da hab ich auch ein funktionierendes doch ich soll für eine freundin auf ihre website eins machen und diese will kein geld für sql ausgeben zusätzlich als websitemodul hmmmm. und ich bin total planlos was textdatein angeht und auch der meinung dass sql moderner is und funktionaler aber da kann ich mich auch täuschen...

ich weiß da es für private zwecke ist könnte ich kostenlos fertige module runterladen aber jetzt ist mein ehrgeiz geweckt ich will verstehen woran das liegt dass nichts geht ;)
 

netbandit

Aktives Mitglied

AW: Undefined offset im gästebuch

Ja spielt eine Rolle, denn wenn der Gast Text mit Umbruch eingibt ist der Umbruch in der Textdatei automatisch auch das Zeilenende; bzw. danach fängt ein neuer Daensatz an. ;)

Im letzten Code hast Du ein Slash (/n) anstelle eines Backslashes (\n) verwendet.

Grüße ;)

Btw.: Egal ob Textdatei oder MySQL, die Daten sollten nie ungeprüft gespeichert werden
 

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

huhu danke lach, ja bis zur prüfung an sich bin ich noch gar nicht gekommen diese einzubauen daran werd ich mich jetzt machen *haarerauf*

mehrzeilig geht noch net ;) bin für tips und hilfen offen und dankbar ;)
 
Zuletzt bearbeitet:

netbandit

Aktives Mitglied

AW: Undefined offset im gästebuch

Mit den Umbrüchen könnte nl2br weiterhelfen. Bastel Dir einfach eine Funktion in der HTML-Umbrüche generiert und danach alle \n und \r entfernt werden (str_replace).

Du könntest am Anfang der Funktion die Usereingaben vielleicht noch durch strip_tags und htmlentities schicken, dann ist zumindest das Thema Prüfung auch weitestgehend durch.

Grüße :)
 

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

ja so was hab i gebaut aber wo setz ich des sinnvoll hin ohne hundert fehlermeldungen zu bekommen ;) i weiß aller anfang is schwer hab direkt in die speicherung der textdatei gedacht aber des is irgendwie immer missglückt
 

netbandit

Aktives Mitglied

AW: Undefined offset im gästebuch

Beispiel anhand von $_POST['eintrag'] und $_POST['name']:

PHP:
error_reporting(E_ALL);
function gb_text($string){
    $string=strip_tags($string); // HTML und PHP-Tags entfernen
    $string=trim($string); // Überflüssige Zeichen am Anfang und Ende entfernen (Umbrüche Tabs, Leerzeichen etc.
    $string=htmlentities($string); // Sonderzeichen in HTML-Code umwandeln
    $string=nl2br($string); // <br /> vor Umbrüche setzen
    $string=str_replace("\n", " ", $string); // Zeilenvorschub entfernen
    $string=str_replace("\r", " ", $string);    // Rücklauf entfernen
    $string=str_replace("\t", " ", $string); // Tabs entfernen
    $string=str_replace(" || ", " ", $string); // Deinen "Trenner" entfernen, könnte ja mal sein dass...
    // $string=str_replace("... und was weiß ich noch was alles raus muss/soll
    return $string;
}
// Erst definieren
$eintrag='';
$name='';
// Dann überschreiben wenn etwas gesendet wurde
if(isset($_POST['eintrag']))$eintrag=gb_text($_POST['eintrag']);
if(isset($_POST['name']))$name=gb_text($_POST['name']);

// Achtung: Bei diesem Beispiel im restlichen Script nicht mehr auf $_POST['eintrag'] und $_POST['name'] zurückgreifen sondern auf $eintrag und $name

// Prüfen mit isset() ist bei diesem Beispiel nicht mehr nötig, stattdessen langt auch:
if($name && $eintrag){
//...
}
Das machst Du dann mit allen Feldern aus Deinem Formular, Kommentar am Ende (Achtung: ...) gilt dann auch für diese :)
 
Zuletzt bearbeitet:

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

ah ok dann war mein anfang den ich hatte gar net so blöd ich hatte nur n fehler in d funktion jetzt wo ich deine las wurde mir mein fehler auch klar.
danke dir herzlich
 

Inaliii

Noch nicht viel geschrieben

AW: Undefined offset im gästebuch

eine frage hab ich noch wenn ich das

$string=htmlentities($string); // Sonderzeichen in HTML-Code umwandeln

wenn ich dies drin habe, wandelt er mir die ß und sonderzeichen alle in komische zeichen um wenn ich es rausnehme sieh man sie richtig,
sollte nicht gerade mit htmlentities alles richtig dargestellt werden?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.640
Beiträge
1.538.508
Mitglieder
67.558
Neuestes Mitglied
azmostbethaot
Oben