Notice: Undefined offset
Simon
- php
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
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
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
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
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
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 ###";
Könntest du mir das etwas besser erklären, wo ich das schreiben soll.
Hab nicht sehr viel Erfahrung mit PHPirgendwo, 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
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
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