Mehrere while Schleifen ineinander

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Lagere die 2. While Schleife aus (wird somit nur 1x ausgeführt und nicht immer wieder) und speichere die Ordnernamen in Arrays:

$server_dirs = $db_dirs = array();

if ($handle = opendir('../../../Namen/')) {
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        $server_dirs[] = $file;
    }
}
closedir($handle);


$abfrage = "SELECT Name FROM blabla ORDER BY ID ASC";
$ergebnis = mysql_query($abfrage);  
while($row = mysql_fetch_object($ergebnis)) {   
    $db_dirs[] = $row->Name;
}

#Ziehe die gefundenen Server-Verzeichnisse von denen in der Datenbank ab
$cleaned_dirs = array_diff($db_dirs, $server_dirs);

print_r($cleaned_dirs);

Im Array $cleaned_dirs sind nun alle übrig gebliebene Verzeichnisse drin und können weiter verarbeitet werden.

DavidHuber  18.02.2015, 12:48

da fehlt noch eine geschweifte Klammer zu nach

...
closedir($handle); 
}
0
hummelxy 
Fragesteller
 19.02.2015, 18:26
@DavidHuber

Hallo,

erstmal sorry für die relativ späte Antwort, ich bin leider noch nicht dazu gekommen, hier zu antworten.

Vielen Dank für diese sehr hilfreiche Antwort! Ich bringe mir php alleine bei und habe mich noch nicht mit arrays beschäftigt, daher kam ich auch noch nicht auf die Idee, die ganzen Werte darin zu speichern, aber genau das löst mein Problem! Anfangs hatte ich immer versucht, die Datenbankwerte in einer normalen Variable zu speichern, die übernimmt allerdings immer nur den ersten Wert der Datenbank, logischerweise. Du hast mir also sehr weitergeholfen, vielen Dank!

Explizit für mein Vorhaben: Dein Code hat genau das bewirkt, was er soll. Er funktioniert einwandfrei, vielen Dank. Allerdings wollte ich die Datenbankwerte von den Serverwerten abziehen, nciht andersrum. Das ist aber einfach mit einem Tausch von array_diff möglich, stellte also kein weiteres Problem dar.

Nochmals vielen Dank, die Antwort hat mir sehr geholfen!

Grüße, Hummel

0

Denkansatz ändern und Schritt für Schritt arbeiten. Erst sauber die Namen abfragen.

Während des ersten While eine neue Array füttern mit Ordnern die gefunden wurden.

Anschliesen eine foreach aus dieser neuen Array und in dieser noch ein While der ersten Abfrage - kurzum -

prüfe für jeden Ordner den du gefunden hast alle Daten aus der MySQL Abfrage

Mein Tipp - verabschiede dich von While - pack die Abfrage in eine Variable und arbeite mit foreach

Bei Fragen -> schreib bei Facebook (siehe profil)

hummelxy 
Fragesteller
 19.02.2015, 18:29

Hallo ceetrox,

dein Weg hat letztendlich zur Lösung geführt - vielen Dank!

DavidHubners Antwort habe ich letztendlich übernommen.

Grüße, Hummel

1

Das Problem liegt wahrscheinlich hier :

while($row = mysql_fetch_object($ergebnis))
{   
echo $row->Name;
 // Hier sollte dann die Klammer hin
if ($handle = opendir('../../../Namen/')) {     

Hier müsste die Klammer meiner Ansicht nach geschlossen werden. Anosnsten wird - wie du beschreibst- zuerst der Erste Name, dann die Verzeichnisse und dann der zweite Name und weider die Verzeichnisse ausgegeben (und so weiter). Probier also einfach mal, die Klammer hinter dem Echo wieder zu schließen .

hummelxy 
Fragesteller
 19.02.2015, 18:28

Stimmt, die while Schleifen durften nicht ineinader verlaufen. Danke!

Im Zusammenspiel mit arrays hat es dann geklappt...

0

etwas unklar deine frage. verstehe nicht, was du mit "abziehen" meinst, trotzdem:

if ($handle = opendir("../../../Namen/$row->Name")) {

beachte: " statt '

hummelxy 
Fragesteller
 19.02.2015, 18:27

Das stimmt zwar, hilft mir aber bei meinem Problem nicht weiter ;-)

DavidHubner hat mir bereits geholfen, dennoch vielen Dank.

0