Zeilen werden nicht gelöscht.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zeilen werden nicht gelöscht.

    Hallo. ich habe eine Script geschrieben mit welchen zeilen aus einer Textdatenbank gelöscht werden sollen.

    Der Link mit dem der Befehl ausgeführt werden soll sieht z.B. so aus:
    main.php?action=delete&d_artist=Tip

    Hier das Script:

    Quellcode

    1. if(isset($_GET['d_artist'])){
    2. $update = false;
    3. $output = "";
    4. $handle = fopen("../data/chart.mtd", "r+");
    5. while($userinfo = fgets($handle, 64)) {
    6. list($n, $v, $c) = $userinfo = explode(',',$userinfo);
    7. if($_GET['d_artist'] !== $n) {
    8. $update = true;
    9. }
    10. $output .= "$n,$v,$c\n";}
    11. rewind($handle);
    12. if($update) {
    13. $output1 = substr($output,0,-1);
    14. fwrite($handle, $output1);
    15. fclose($handle);
    16. }
    17. echo "Datensatz gelöscht";
    18. }
    Alles anzeigen


    Das Script soll so funktionieren:
    Wenn die Variable $_GET['d_artist'] nicht $n entspricht (erstes Feld des Array in der while-schleife) dann soll die Zeile wieder in output geschrieben werden. Sollten die beiden Variablen gleich sein soll nicht in output geschrieben werden.

    >>>>Die Textdatei sah ursprünglich so aus:

    Quellcode

    1. Meier,Katrin,24
    2. Hoffmann,Peter,23


    >>>> Nach dem Ausruf sieht Sie dann so aus:

    Quellcode

    1. TipTop,TipTop,11
    2. Marianne Rosenberg,Karneval,12
    3. SlowmotionRace,Wonderland,22
    4. ABBA,Ring Ring,35
    5. Klee,2 Fragen,143


    Offentsichtlich wurden Zeilen dazugefügt. Aber warum?
  • du hast ein rewind innerhalb der Zeile??
    Nein hast du nicht... aber das sieht verdammt danach aus, wenn du nicht richtig einrückst :o

    In deinem Script benutzt
    a) !== statt !=
    b) setzt du dann nur die update Variable - dabei musst du doch output auslassen

    Ich hab hier einfach mal dass Update Script, das ich dir in diesem Thread gegeben habe modifiziert

    Quellcode

    1. <?php
    2. //name des zu löschenden Artisten wird per GET übergeben
    3. $update = false;
    4. $output = "";
    5. $handle = fopen("users.txt", "r+");
    6. while($userinfo = fgets($handle, 4096)) {
    7. list($n, $v, $c) = $userinfo = explode(',',$userinfo);
    8. $c = intval($c);
    9. if($_GET['d_artist'] != $n) {
    10. $update = true; //es hat eine Änderung gegeben
    11. $output .= "$n,$v,$c\n";
    12. }
    13. }
    14. rewind($handle);
    15. if($update) //hat es eine Änderung gegeben
    16. fwrite($handle, substr($output,0,-1));
    17. fclose($handle);
    18. echo file_get_contents('users.txt');
    19. ?>
    Alles anzeigen
  • das klappt schon noch nicht ganz. wenn die die erste zeile löschen möchte, dann löscht er diese auch. wenn ich aber ab der zweiten zeilen löschen möcte, dann löscht er zwar auch diese aber er fügt die letzte zeile nochmal an. also die letzte zeile erscheint zweimal.

    Also vor dem Ausführen sieht die Datei so aus:

    Quellcode

    1. TipTop,TipTop,15
    2. Marianne Rosenberg,Karneval,12
    3. SlowmotionRace,Wonderland,22
    4. ABBA,Ring Ring,41
    5. Klee,2 Fragen,143


    Und danach so:

    Quellcode

    1. TipTop,TipTop,15
    2. SlowmotionRace,Wonderland,22
    3. ABBA,Ring Ring,41
    4. Klee,2 Fragen,143,Ring Ring,41
    5. Klee,2 Fragen,143
  • ups, logisch...

    rewind setzt den Dateizeiger wieder auf den Anfang der Datei und schreibt deine 4 Zeilen neu. Der alte Inhat war jedoch 5 Zeilen lang. => Es werden die ersten 4 Zeilen überschrieben. Der Rest bleibt.

    Das Problem kannst du nur mit einem zweiten fopen() umgehen:

    Quellcode

    1. <?php
    2. //name des zu löschenden Artisten wird per GET übergeben
    3. $update = false;
    4. $output = "";
    5. $handle = fopen("users.txt", "r");
    6. while($userinfo = fgets($handle, 4096)) {
    7. list($n, $v, $c) = $userinfo = explode(',',$userinfo);
    8. $c = intval($c);
    9. if($_GET['d_artist'] != $n) {
    10. $update = true; //es hat eine Änderung gegeben
    11. $output .= "$n,$v,$c\n";
    12. }
    13. }
    14. fclose($handle);
    15. if($update) {//hat es eine Änderung gegeben
    16. $handle = fopen("users.txt", "w");
    17. fwrite($handle, substr($output,0,-1));
    18. fclose($handle);
    19. }
    20. echo file_get_contents('users.txt');
    21. ?>
    Alles anzeigen