Benötige Hilfe bei Schleifenproblem

xtratz

Gesperrt
Hallo Leute,

aufgrund der geänderten Problematik eines vorhergehenden Beitrages von mir eröffne ich ein neuen Beitrag, da es sich hierbei um PHP handelt.

Ich habe eine Mehrstufige Navigation die mit beliebig vielen Submenüs verschachtelt werden kann.

Ich bekomme es aber einfach nicht hin die Einträge rekursiv nach unten zu löschen.

Nun habe ich eine Methode gefunden mit der es dennoch funktioniert. Diese ist aber sehr laienhaft wie ich finde.

Mit dieser verschachtelten Schleife kann ich nun bis zur 5ten Ebene alles Löschen.
Erweitere ich die Schleife jeweils um 1, gehts auch eine Ebene Tiefer.

Jetzt meine Frage, kann man meinen Code nicht einfach dynamisch erweitern.
Sodass ich nicht 10 Schleifen manuell erstellen muss, sondern dies automatisch macht.
Habs schon mit einer for Schleife versucht, bekomme das aber nicht hin.

Meine Kentnisse reichen hier leider nicht aus und ich wäre echt dankbar für einen Vorschlag, damit ich weiterkomme.

Gruss

PHP:
 $r_sub_navi = function_dbQuery("select mid from menu WHERE parent_id ='".$_GET['cID']."'");

         while ($sub_navi = function_dbFetchArray($r_sub_navi)) {
         $r_sub_navi2 = function_dbQuery("select mid from menu WHERE parent_id ='".$sub_navi['mid']."'");
         function_dbQuery("delete from menu WHERE parent_id ='".$sub_navi['mid']."'");
         

          while ($sub_navi2 = function_dbFetchArray($r_sub_navi2)) {
         $r_sub_navi3 = function_dbQuery("select mid from menu WHERE parent_id ='".$sub_navi2['mid']."'");
         function_dbQuery("delete from menu WHERE parent_id ='".$sub_navi2['mid']."'");
         
         
           while ($sub_navi3 = function_dbFetchArray($r_sub_navi3)) {
         $r_sub_navi4 = function_dbQuery("select mid from menu WHERE parent_id ='".$sub_navi3['mid']."'");
         function_dbQuery("delete from menu WHERE parent_id ='".$sub_navi3['mid']."'");
         

           while ($sub_navi4 = function_dbFetchArray($r_sub_navi4)) {
         $r_sub_navi5 = function_dbQuery("select mid from menu WHERE parent_id ='".$sub_navi4['mid']."'");
         function_dbQuery("delete from menu WHERE parent_id ='".$sub_navi4['mid']."'");
         

         
          } 
          } 
          }
          }
 
Zuletzt bearbeitet:
Du musst einfach eine for-Schleife nehmen die mit einem Zähler bis 10 ausstatten, und dann deine Datenbank Abfrage, wobei die Variablen variable sein müssenen, weil sie sich ja bei jeder nächsten Schleife ändern.
 
Danke habs.

Allerdings funktioniert das so einfach doch nicht.
SObald weniger Menüs zu löschen sind als 10, dann bekomme ich nen MySQL Erorr.

;-(

Gruss
 
Ne kein Fehler.
Ist eigentlich normal.

Irgendwann wird halt kein Ergebniss geliefert.

Aber mal was anderes, es muss doch möglich sein wenn man eine id und eine parent_id hat, rekursiv alle childs rauszu bekommen.

Ich finde keinerlei Möglichkeit dazu mit meinem Wissenstand.

Kategorie mit folgendem Aufbau:

1
1_1
1_1_1
1_1_1_1

Ich bekomme die id von Eintrag 1 per $_GET.
Wenn ich die habe dann habe ich auch die parent_id von Eintrag 1_1.

Denn meine erste Frage lautet:

PHP:
 $r_sub_navi = function_dbQuery("select mid from menu WHERE parent_id ='".$_GET['cID']."'");

Wenn ich die parent_id von Eintrag 1_1 habe dann weis ich nun auch dessen id.
Und somit geht der Kreislauf von vorne los.

Anstatt die ganzen Abfragen händisch zu machen. Muss es doch irgendeine Möglichkeit geben, dies zu automatisieren.

Denn ich weis ja nicht wieviele Einträge vorhanden sind.

Weis wirklich niemand nen Rat.?

Gruss
 
Ich habe es nun leider nicht getestet und kenne auch den Rückgabewert der SQL Funktion nicht, falls er kein Element findet, aber so ähnlich kannst du das machen:

PHP:
$mids = array();
function getSubmenu($id) {
    $r_sub_navi = @function_dbQuery("select mid from menu WHERE parent_id ='".$id."'");
    if ($r_sub_navi != null) {
        array_push($mids, $r_sub_navi);
        getSubmenu($mids[count($mids)-1]);
    }
}
 
Hmm ok Danke erstmal ;-)

Aber was stell ich mit der Funktion an?
Wo und wie soll ich die Aufrufen?

Steh total auf der Leitung sorry.

Mit

echo getSubmenu($_GET['cID']);

gehts nich.

KOmmt: Warning: array_push() [function.array-push]: First argument should be an array in
 
Zuletzt bearbeitet:
ok also!

Du brauchst das Array $mids in diesen werden alle MIDs geschrieben.

Du rufst nun also das Hauptmenu auf: Beispiel:

PHP:
getSubmenu(1)

Die Funktion versucht nun alle Submenus von 1 auszulesen und packt diese in $mids.

Also in $mids[0] steht 1 in $mids[1] steht 1_1 in $mids[2] 1_1_1

Jetzt solltest du damit weiter arbeiten können.
Beispiel:

PHP:
for ($i = 0; $i <= count($mids); $i++) {
   echo $mids[$i];
}
 
Ok Danke.
Aber wie gesagt kommt die o.g. Fehlermeldung.

Ich fülle indem Fall die Funktion mit der $id die ich per $_GET bekomme.

Hab das mal manuell eingetragen also:

getSubmenu(337)

Dann kommt der besagte Fehler.
 
Ok habs gerade mal einwenig getestet.
Die Funktion muss für die Rekursivenaufruf doch einwenig anders aussehen:

PHP:
function getSubmenu($id, $mids) {
    $r_sub_navi = @function_dbQuery("select mid from menu WHERE parent_id ='".$id."'");
    if ($r_sub_navi != null) {
        array_push($mids, $r_sub_navi);
                return $mids + getSubmenu($id, $mids);
        } else {
                return $mids;
        }
}

$mids = array();
$mids = getSubmenu(337, $mids);

print_r($mids);
 
Zurück