Zeile in CSV Datei ändern/löschen

Das ist die Lösung! Perfekt, danke!
So werden die Daten bearbeitet.

Würde das Löschen analog zu dem funktionieren?
 
Zuletzt bearbeitet:
Jup, du kannst natürlich auch ganze Zeilen (arrays) rauslöschen.
Aber bedenke, dass wenn due diese ganzen Operationen mit einer größeren Menge an datensätzen durchführen willst, benutze lieber eine Datenbank ;)
 
Guten Abend zusammen,

das Thema ist vielleicht schon etwas älter und hoffe das ich hier doch noch Antwort bekomme.

Ich habe eine CSV mit mehren Terminen. Die ich einlese und hinter jeden Termin einen Button mit einer ID versteckt. Nun möchte man nach klicken des Buttons, dass die Zeile direkt aus der CSV gelöscht wird. Aber leider funktioniert das noch nicht richtig. Irgendwo habe ich noch einen Fehler. Könnt ihr mir da weiterhelfen? Ich danke vorraus.

Code:
"1"|"23.11-23.12.2017"|"in Musterstadt"|""
"2"|"23.11-23.12.2017"|"in Musterstadt"|""
"3"|"23.11-23.12.2017"|"in Musterstadt"|""

PHP:
function removeEvent($wert)
{
    $lines=file(CSV_FILE);
    $num = sizeof($lines);
  

    for ($i = 1; $i < $num; $i++) {
        $entry = explode ("|", $lines[$i]); // Zeile an ~ splitten
        if ($entry[0] == $wert) { // Wenn der erste Eintrag in Zeile $i gleich dem $wert ist, dann löschen
            $num--;
            for ($j = $i; $j < $num; $j++)
                $lines[$j] = $lines[$j+1];
        }
    }
    // Datei wieder neu schreiben.
    $fp = fopen(CSV_FILE,"w+");
    for ($i=0; $i < $num; $i++)
        fwrite($fp, $lines[$i]);
    fclose($fp);

}

if( isset($_POST['delete_date']) && ($_POST['delete_date'] =='Delete'))
{
    $wert = $_POST['wert'];

    removeEvent($wert);
}
 
Wichtig für die Frage, warum es nicht funktioniert, ist nicht nur das PHP, sondern auch, wie Du es aufrufst: Durch Ajax oder durch Submit eines Formulars? Werden die POST-Parameter richtig bereit gestellt?
 
Wichtig für die Frage, warum es nicht funktioniert, ist nicht nur das PHP, sondern auch, wie Du es aufrufst: Durch Ajax oder durch Submit eines Formulars? Werden die POST-Parameter richtig bereit gestellt?

Hallo Sempervivum, es findet alles in einer Datei statt. Ich gehe davon aus, sobald ich den Submit Button betätige mit der ID gehe das in die Funktion removeEvent(ID). Leider passiert da nicht. Ich gehe einfach davon aus, dass ich irgendwo einen Fehler übersehe.

Danke für deine Antwort.

Vg Tobias
 
Das Problem ist, dass Du die Einträge in deiner CSV-Datei in Hochkommas eingeschlossen hast. Wenn Du die Zeile mit split() entspr. | aufteilst, bleiben diese als Bestandteil des Strings erhalten, so dass der Vergleich mit $wert immer false ergibt. Da ich annehme, dass Du die Hochkommas für deinen übrigen Code brauchst, habe ich sie mit str_replace() entfernt. Dieses funktioniert bei mir:
PHP:
function removeEvent($wert)
{
    $lines = file(CSV_FILE);
    $num = count($lines);

    unlink (CSV_FILE);
    for ($i = 0; $i < $num; $i++) {
        $entry = explode ("|", $lines[$i]); // Zeile an ~ splitten
        $first = str_replace('"', '', $entry[0]);
        if ($first != $wert) file_put_contents(CSV_FILE, $lines[$i], FILE_APPEND);
    }
}

if( isset($_POST['delete_date']) && ($_POST['delete_date'] =='Delete'))
{
    $wert = $_POST['wert'];

    removeEvent($wert);
}
 
Das Problem ist, dass Du die Einträge in deiner CSV-Datei in Hochkommas eingeschlossen hast. Wenn Du die Zeile mit split() entspr. | aufteilst, bleiben diese als Bestandteil des Strings erhalten, so dass der Vergleich mit $wert immer false ergibt. Da ich annehme, dass Du die Hochkommas für deinen übrigen Code brauchst, habe ich sie mit str_replace() entfernt. Dieses funktioniert bei mir:
PHP:
function removeEvent($wert)
{
    $lines = file(CSV_FILE);
    $num = count($lines);

    unlink (CSV_FILE);
    for ($i = 0; $i < $num; $i++) {
        $entry = explode ("|", $lines[$i]); // Zeile an ~ splitten
        $first = str_replace('"', '', $entry[0]);
        if ($first != $wert) file_put_contents(CSV_FILE, $lines[$i], FILE_APPEND);
    }
}

if( isset($_POST['delete_date']) && ($_POST['delete_date'] =='Delete'))
{
    $wert = $_POST['wert'];

    removeEvent($wert);
}

VIELEN VIELEN DANK @Sempervivum :-) Funktioniert einwandfrei.
 
Zurück