Zum Inhalt der Seite

Thread: (PHP) Rekursives Löschen von Foren inkl. Threads und Beiträgen

Eröffnet am: 15.02.2010 18:54
Letzte Reaktion: 15.02.2010 20:12
Beiträge: 2
Status: Offen
Unterforen:
- Computer & Technik




Verfasser Betreff Datum
Seite 1
 KyodaiKen (PHP) Rekursives Löschen von F... 15.02.2010, 18:54
 KyodaiKen (PHP) Rekursives Löschen von F... 15.02.2010, 20:12
Seite 1



Von:    KyodaiKen 15.02.2010 18:54
Betreff: (PHP) Rekursives Löschen von Foren inkl.... [Antworten]
Avatar
 
Hallo, ich habe folgendes Problem:

Ich habe gerade eine Denkblokade und weiß nicht, wie ich in PHP einen rekursiven Aufruf zum Löschen eines Forums inklusive Unterforen, Threads und Beiträgen hinbekomme.

Ungerne möchte ich die komplette Tabellenstruktur hier posten, aus Sicherheitsgründen. Allerdings biete ich euch die nötigen Informationen wie folgt an:

In der Datenbank besteht das Forum nur aus einer einzigen Tabelle. Jeder Eintrag hat eine Differenzierung zwischen den Typen: 0=Forum; 1=Thread; 2=Post; 3=Trenner. Jeder Eintrag hat auch eine 'parent_id', mit der man die Einträge in einander verschachteln kann, sagen wir mal unterordnen kann.

Stark vereinfacht hier mal eine Struktur eines Forums:

id  parent  type  title
1   0       0     PHP
2   1       0     Fortgeschritten
3   1       0     Anfänger
4   2       1     Datenbank absichern. Wie?
5   4       2     Gutes Passwort ist das A und O
6   3       1     Sessions


Wie muss ich die Abfragen generieren, wenn ich jetzt das komplette PHP-Forum mit dem gesamten Inhalt löschen möchte?

Ich benutzte msqli auf OO-Basis.

Das hier ist jedenfalls das, was ich bisher habe, ist aber ein
PSEUDO-CODE

Function DeleteForum(/* assoc_array */ $forum) {
 Alle Einträge abfragen, die diesem Forum untergeordnet sind
 Wenn keine gefunden wurden, abbrechen
 Für jedes dieser Einträge:
   Die Funktion selbst wieder aufrufen, mit dieser ID
   DELETE-Abfrage ausführen
}


Ich hoffe ihr könnt mir helfen. Grüße, BS



Von:    KyodaiKen 15.02.2010 20:12
Betreff: (PHP) Rekursives Löschen von Foren inkl.... [Antworten]
Avatar
 
Ah ich hab's doch hinbekommen ^^'.

$db steht für eine verbundene Datenbank mit mysqli als Objekt.

<?
  function delForum(/** QUERY_FETCH_ASSOC_ARRAY */ $forum) {
    global $db;
    /** DEBUG */ $log=fopen("delForum.log","a");
    $q_item="SELECT * FROM `f` WHERE `f`.`parent` = {$forum['id']}"; $r=$db->query($q_item);
    if(!$r) { echo("Fehler beim Abfragen des Foreneintrags!"); exitScript(); }
    /** DEBUG */ fwrite($log, $q_item."\n");
    while($f_row=$r->fetch_assoc()) {
      delForum($f_row);
      $delq="DELETE FROM `f` WHERE `f`.`id` = {$f_row['id']}";
      if(!$db->query($delq)) { echo("Fehler beim Löschen des Foreneintrags!"); exitScript(); }
      /** DEBUG */ fwrite($log, $delq."\n");
    }
    $delq="DELETE FROM `f` WHERE `f`.`id` = {$forum['id']}";
    if(!$db->query($delq)) { echo("Fehler beim Löschen des Foreneintrags!"); exitScript(); }
    /** DEBUG */ fwrite($log, $delq."\n"); fclose($log); unset($log);
    $r->close();
  }
?>


Die DEBUG-Zeilen sind einfach zur Fehlerkontrolle da. Diese sollten dann beim produktiven Einsatz gelöscht oder ganz auskommentiert werden.





Zurück