If mit mehreren Bedingen.
zsoerenm
- php
Hallo
ich hab ein Problem die Oder funktion in der If-Bedingung scheint nicht richtig zu klappen.
<?php
$dirhandle = opendir(".");
$zaehler = 0;
while($eintrag = readdir($dirhandle))
{
$f_wort1 = ".";
$f_wort2 = "..";
$f_wort3 = "Thumbs.db";
IF ($eintrag != $f_wort1 || $eintrag != $f_wort2 || $eintrag != $f_wort3)
{
$zaehler++;
$bild[$zaehler] = $eintrag;
}
}
echo "$bild[3]<br>\n";
$zaehler =$zaehler -2;
echo "$zaehler";
closedir($dirhandle);
?>
So wie es jetzt ist wird die IF-Bedinung einfach übergangen und nur das was in der Bedinung steht wird ausgeführt. Wenn ich nur eine IF-Bedingung benutze wird diese erfolgreich ausgeführt.
Was mach ich falsch?
Gruß Sören
Hallo zsoerenm.
ich hab ein Problem die Oder funktion in der If-Bedingung scheint nicht richtig zu klappen.
Dann spiele doch einmal die möglichen Fälle durch. Angenommen, wir haben ein Verzeichnis mit folgenden Dateien:
.
..
foo.png
Thumbs.db
~~~php
$f_wort1 = ".";
$f_wort2 = "..";
$f_wort3 = "Thumbs.db";
IF ($eintrag != $f_wort1 || $eintrag != $f_wort2 || $eintrag != $f_wort3)
Fall 1, „.“: die erste Bedingung trifft nicht zu, die zweite dagegen schon; $zaehler wird erhöht.
Fall 2, „..“: die erste Bedingung trifft zu, $zaehler wird erhöht.
Fall 3, „foo.png“: die erste Bedingung trifft zu, $zaehler wird erhöht.
Fall 4, „Thumbs.db“: die erste Bedingung trifft zu $zaehler wird erhöht.
Wie du siehst, wird der $zaehler immer erhöht, egal was du gerade in $eintrag stehen hast. Du möchtest also alle „||“ durch „&&“ erhöhen, womit du ausschließt, dass $eintrag gleich „.“, „..“ und „Thumbs.db“ sein kann.
Einen schönen Dienstag noch.
Gruß, Mathias
--
ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
debian/rules
Hallo Sören,
Mathias hat dir ja schon erklärt, was du falsch gemacht hast. Ich würde das Problem allerdings von Anfang an ein bisschen anders angehen:
<?php
..
// Außerhalb des Schleifenrumpfs, damit die Zuweisung nicht bei jedem
// Schleifendurchlauf wiederholt wird
$woerter = array('.', '..', 'Thumbs.db');
while($eintrag = readdir($dirhandle))
{
if () {
$zaehler++;
$bild[$zaehler] = $eintrag;
}
}
...
?>
Ach ja, $woerter ist kein sehr aussagekräftiger Variablenname für so einen Fall, aber es ist ja wohl nur ein Beispiel ;-)
Schöne Grüße,
Johannes
*Seufz* ich glaube, ich sollte ins Bett gehen ;-)
Nachtrag:
$zaehler++;
$bild[$zaehler] = $eintrag;
Die Zaehlervariable kannst du in diesem Fall weglassen.
$bild[] = $eintrag;
fügt den entsprechenden Eintrag immer ans Ende des Arrays hinzu.
Schöne Grüße,
Johannes
Hi,
wenn ich den Sinn des Skriptes richtig verstehe brauchst Du hier auch AND, nicht OR:
if ($eintrag != $f_wort1 && $eintrag != $f_wort2 && $eintrag != $f_wort3) ...