Element aus Array löschen mit unset()

@ Sven das geht auch nicht! LINK. Diesmal löscht er immer die ersten!
Ich poste mal alle Dateien
schreiben.php
PHP:
<form method="post" action="reinschreiben.php">
<input type="text" name="schreiben">
<p>
<input type="submit" value="Senden!">
</form>
<p><br><p>
<a href='loeschen.php'>L&ouml;schen</a>

reinschreiben.php
PHP:
$eintragen = $_POST['schreiben'];

$datei = "nachrichten.txt";
$fp = fopen($datei,"a+");
fwrite($fp,$eintragen."\r\n");
fclose($fp);

header("LOCATION: schreiben.php");

loeschen.php
PHP:
$lesen = file("nachrichten.txt");

echo "<table border='1' width='400'>";
for($y=0;$y<count($lesen);$y++) {
	$x = $y+1;
	echo "<tr>";
	echo "<td width='40'>".$x."</td>";
	echo "<td width='320'>".$lesen[$y]."</td>";
	echo "<td width='40'><a href='loeschenausfuehren.php?id=".$y."'> X </a></td>";
	echo "</tr>";
}
echo "</table>";

loeschenausfuehren.php
PHP:
$lesen = file("nachrichten.txt");

unset($lesen[$id]);

echo "<pre>";
print_r($lesen);
echo "</pre>";




$datei = "nachrichten.txt"; 
$lesen = preg_split('/[\r\n]+/m',file_get_contents($datei));
array_splice($lesen,($id-1),1);
$fp = fopen("nachrichten.txt","w");
fwrite($fp,trim(implode("\n",$lesen))); 
fclose($fp);

header("LOCATION: loeschen.php");

schiese
 
PHP:
array_splice($lesen,($ID-1),1);
Wenn, dann löscht er immer die Zeile $id-1
Ich wusst nicht, was du da als ID hast, hab deswegen 1 abgezogen.

Falls register_globals off ist, sollte es der Weiteren
PHP:
array_splice($lesen,$_GET['id'],1);
..heissen.
 
@ Sven Wunderschön, recht herzlichen Dank!
Habe es noch etwas geändert, damit eine neuer Eintrag auch in eine neue Zeile kommt.
PHP:
$datei = "nachrichten.txt"; 
$lesen = preg_split('/[\r\n]+/m',file_get_contents($datei));
array_splice($lesen,$id,1);
$fp = fopen("nachrichten.txt","w");
$fertig = trim(implode("\r\n",$lesen));
fwrite($fp,$fertig."\r\n"); 
fclose($fp);

schiese
 
Eine Frage hätte ich noch mal. Gibt es eine maximale Zeilenlänge in einer Textdatei und was ist, wenn ich so viel eintrage, dass ich in die nächste Zeile komme. Merkt die Datei sich dass, oder bekomme ich dann Probleme mit file()?

schiese
 
Um das Problem mit dem Zeilenumbruch zu umgehen, könntest du das ganze codieren...am Besten gleich so:
PHP:
$eintragen = rawurlencode(htmlentities(trim(wordwrap($_POST['schreiben'],32,' ',1))));

Falls du später ein textarea für die Nachricht nehmen solltest, ist es ja sehr wahrscheinlich, dass auch Zeilenumbrüche übermittelt werden... auf die Art hast du dann auch gleich sonstige "Gefahren" ausgeschlossen.

Bei der Ausgabe dekodierst du es dann halt wieder per [phpf]rawurldecode[/phpf]
 
Ich möchte ja alles in einer Zeile haben. Also wenn es eine Begrenzung der Zeilenlänge geben würde, hätte ich ein Problem. Auf das Problem mit der Textarea bin ich auch schon bei einem anderen Vorhaben gestoßen, aber das gucke ich mir in den nächsten Tagen an. Aber schon mal danke für die Funktion rawurldecode().
Einen schönen Tag wünsch ich euch noch!

schiese
 
Das Problem mit dem Textarea hast du mit rawurlencode() nicht mehr...da werden alle Steuerzeichen in ASCII-Codes umgewandelt, es gibt danach also keine Zeilenumbrüche in dem String...diese werden erst mit rawurldecode wiederhergestellt.:)
 
Zurück