Daten aus CSV-Datei löschen

folio

Erfahrenes Mitglied
Hi,

ich habe ein kleines Gästebuch auf Basis einer CSV-Datei programmiert.

Im Admin Control Panel soll es die Möglichkeit geben, Einträge zu löschen.

Jeder Eintrag wird in einer Zeile gespeichert, die verschiedenen Zusatzdaten wie ICQ, Email, Homepage usw werden durch ein Semikolon separiert.

Auch im ACP werden die Einträge auf verschiedenen Seiten angezeigt. Die einzig relevante Variable im Array der config.inc.php ist die "entries_page". Die Seitennavigation erfolgt durch Übergabe der Seitenzahl per GET-Methode, also http://www.bla.de/delete.php?page=2

Hier der Code der Datei delete.php:
PHP:
<body>
<form action="delete.php" method="post">
<?php
include 'config.inc.php';

//alle Einträge in ein (zwangsläufig) mehrdimensionales Array schreiben
$eintraege = file("gaestebuch.csv");
// da die eintraege in chronologischer Reihenfolge vorliegen (oben der älteste) müssen die reihenfolge umgekehrt werden
$eintraege = array_reverse($eintraege);
//anzahl der eintraege
$anzahleintraege = count($eintraege);
$eintraege_pro_seite = 15;

if(isset($_GET['page'])) {
$seite = $_GET['page'];
}
//sollte $page nicht gesetzt sein, also einfach nur delete.php eingegeben worden sein, ist die Seite = 0. Die neuesten Einträge werden angezeigt.
else {
$seite = 0;
}
$start = $eintraege_pro_seite * $seite;

for($i = $start; $i < $start + $cfg['entries_page']; $i++)
{

//die Einträge aus dem mehrdimensionalen Array separieren, so dass auf ICQ, Homepage, usw. einzeln zugegriffen werden kann.
$eintraege[$i] = explode(";",$eintraege[$i]);

//kodierte daten aus der csv datei wieder dekodieren, um kommata etc. wiederherzustellen. nachher mit nl2br() umbrüche wieder herstellen
$eintraege[$i][0] = urldecode($eintraege[$i][0]);
$eintraege[$i][1] = urldecode($eintraege[$i][1]);
$eintraege[$i][2] = urldecode($eintraege[$i][2]);
$eintraege[$i][3] = urldecode($eintraege[$i][3]);
$eintraege[$i][4] = urldecode($eintraege[$i][4]);
$eintraege[$i][5] = urldecode($eintraege[$i][5]);
$eintraege[$i][1] = nl2br($eintraege[$i][1]);

//datumsausgabe. eventuell "heute" ausgeben
if(date('dmy',time()+3600) == date('dmy',$eintraege[$i][5])) {
$eintraege[$i][5] = "heute um ".date('H:i',$eintraege[$i][5])."";
}

//stammt der eintrag nicht von heute? dann wird else ausgeführt.
else {
$eintraege[$i][5] = "am ".date('d.m.y',$eintraege[$i][5])." um ".date('H:i',$eintraege[$i][5])."";
}

print($eintraege[$i][0]);
print(" schrieb ");
print($eintraege[$i][5]);



if($eintraege[$i][2] || $eintraege[$i][3] || $eintraege[$i][4]) {
print("<br>");


if($eintraege[$i][2]) {
print(" || Homepage: ");
print($eintraege[$i][2]);
}
if($eintraege[$i][3]) {
print(" || ICQ: ");
print($eintraege[$i][3]);
}
if($eintraege[$i][4]) {
print(" || Email: ");
print($eintraege[$i][4]);

}
}

print("<br>");
print("<input type=\"checkbox\" name=\"".$i."\">");
print($eintraege[$i][1]);
print("<br>");
print("<br>");
}

print("<input type=\"submit\" value=\"loeschen\">");
print("<input type=\"hidden\" name=\"sent\" value=\"1\">");
print("<input type=\"hidden\" name=\"start\" value=\"".$start."\">");


//seitennavigation.
print("&nbsp;");
print("<a href=\"");
print("delete.php?\">");
print("Erste");
print("</a>");

print("&nbsp;");
print("<a href=\"");
print("delete.php?page=2\">");
print("2");
print("</a>");

print("&nbsp;");
print("<a href=\"");
print("delete.php?page=3\">");
print("3");
print("</a>");

print("&nbsp;");
print("<a href=\"");
print("gb.php?page=4\">");
print("4");
print("</a>");
?>
</form>

Der folgende Teil wird nur ausgeführt, wenn löschen betätigt wurde. Hier liegt auch der - mir unbekannte - Fehler, da die CSV-Datei nach ausführen des Codes leer ist.

PHP:
<?php
if($_POST[sent] == "1") {

//csv-datei ersetzen, kompletten inhalt neu generieren

//zuerst die daten sichern, bevor die datei ersetzt wird.
$delete=file("gaestebuch.csv");
$diedatei=fopen("gaestebuch.csv","w");
//da bei der eintragsausgabe aufgrund der chronologischen Reihenfolge auch  array_reverse eingesetzt wird, muss dies hier auch geschehen, damit nicht die falschen Einträge gelöscht werden.
$delete = array_reverse($delete);

//durchlaufen der for-Schleife, die für jede Checkbox bei den Einträgen oben prüft, ob sie markiert wurde.
for($i = $start; $i < $start + $cfg['entries_page']; $i++) {
$delete = explode(";",$delete[$i]);

$delete_entry.= $delete[$i][0];
$delete_entry.= ";";
$delete_entry.= $delete[$i][1];
$delete_entry.= ";";
$delete_entry.= $delete[$i][2];
$delete_entry.= ";";
$delete_entry.= $delete[$i][3];
$delete_entry.= ";";
$delete_entry.= $delete[$i][4];
$delete_entry.= ";";
$delete_entry.= $delete[$i][5];
$delete_entry.= "\n";
print($delete_entry[$i][1]);
if($_POST[$i]) {
print("wird geloescht");
unset($delete_entry[$i]);
}
}
$delete_entry= array_reverse($delete_entry);
fwrite($diedatei,$delete_entry);

}
?>

Wenn ich den Code ausführe, steht in der gaestebuch.csv nachher in jeder Spalte der oberen Zeile ein Buchstabe. Gleich werde ich eine Demo hochladen.

Sollten Verständnisprobleme auftreten, fragt einfach!

Vielen Dank,

folio
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück