ist foreach buggy oder mein script einfach schei.....?
Felix Riesterer
- php
Servus ihr Forumler,
ich verstehe mein Script wiedermal nicht mehr. Nach den Ausgaben im HTML-Quelltext zu urteilen kommt in der foreach-Schleife immer nur das letzte Array-Element dran. Die anderen Array-Elemente werden garnicht abgearbeitet. Warum nur? Hier meine Funktion:
function benutzer_loeschen($pfad, $benutzer)
{
$dateiinhalt = file($pfad."/.htpasswd");
echo "<!-- zu löschender Benutzer: ".$benutzer." //-->\n";
if($dateiinhalt[0] != "")
{
echo "<!-- Der Inhalt der Datei ist nicht leer! //-->\n";
echo "<!-- In der Datei sind ".count($dateiinhalt)." Logins gespeichert... //-->\n";
$zweckstring = "";
foreach($dateiinhalt as $login);
{
echo "<!-- Login ".$login.": \n";
$test = explode(":", $login);
if($test[0] != $benutzer && $test[0] != "")
{
echo "Der Benutzer ".$test[0]." ist ungleich ".$benutzer." und auch nicht leer...\n";
$zweckstring = $zweckstring.$test[0].":".trim($test[1])."\r\n";
echo "Momentaner Zweckstring: ".$zweckstring;
}
echo "Das war Login ".$login.".\n//-->\n";
}
editierte_datei_speichern(".htpasswd", $pfad, $zweckstring);
echo "<!-- Benutzer $benutzer aus Verzeichnis $pfad geloescht! //-->\n";
echo "<!-- .htpasswd: $zweckstring //-->\n";
}
}
Und hier die Ausgabe (Auszug) in meinem HTML-Dokument:
<div class="admin">
<!-- zu löschender Benutzer: rehe //-->
<!-- Der Inhalt der Datei ist nicht leer! //-->
<!-- In der Datei sind 8 Logins gespeichert... //-->
<!-- Login insekten:36dkBY6ClpNOU
:
Der Benutzer insekten ist ungleich rehe und auch nicht leer...
Momentaner Zweckstring: insekten:36dkBY6ClpNOU
Das war Login insekten:36dkBY6ClpNOU
.
//-->
<!-- Benutzer rehe aus Verzeichnis ../eltern geloescht! //-->
<!-- .htpasswd: insekten:36dkBY6ClpNOU
//-->
<h2>Benutzerverwaltung</h2>
Jedenfalls muss ich doch daraus schließen, dass in meiner foreach-Schleife nur der letzte Login abgearbeitet wird, oder nicht? Wer findet meine(n)(Denk-?)Fehler? Jedenfalls im Vorraus schonmal Danke für eure Bemühungen.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hi,
foreach($dateiinhalt as $login);
{
echo "<!-- Login ".$login.": \n";
Jedenfalls muss ich doch daraus schließen, dass in meiner foreach-Schleife nur der letzte Login abgearbeitet wird, oder nicht?
Nein. In Deiner Schleife wird überhaupt nichts abgearbeitet.
Bzw. nur das leere Statement, das sich als einziges in der Schleife befindet.
Das echo (und auch die öffnende geschweifte Klammer) stehen schon NACH der Schleife.
cu,
Andreas
Hallo MudGuard,
Da warst du doch glatt 5 Sekunden schneller als ich.
Schande über mich... ;-)
gute n8
Marc Reichelt || http://www.marcreichelt.de/
Hi Marc,
(PHP) ist foreach buggy oder mein script einfach schei.....? ✔ von Marc Reichelt, 06. 12. 2004, 23:03
(PHP) ist foreach buggy oder mein script einfach schei.....? ✔ von MudGuard, 06. 12. 2004, 22:58
Da warst du doch glatt 5 Sekunden schneller als ich.
Hm. Das mit der Uhr üben wir aber noch. ;-)
Grüße,
Roland
Hallo Orlando,
(PHP) ist foreach buggy oder mein script einfach schei.....? ✔ von Marc Reichelt, 06. 12. 2004, 23:03
(PHP) ist foreach buggy oder mein script einfach schei.....? ✔ von MudGuard, 06. 12. 2004, 22:58Da warst du doch glatt 5 Sekunden schneller als ich.
Hm. Das mit der Uhr üben wir aber noch. ;-)
OK, da hab ich doch tatsächlich nicht aufgepasst.
Ich bin es irgendwie gewohnt am Ende die Sekunden zu lesen - ein Zeichen dafür dass ich wirklich müde bin und mich hinlegen sollte... *g*
Aus 5 mach 300 Sekunden. ;-)
n8
Marc Reichelt || http://www.marcreichelt.de/
Servus Orlando,
(PHP) ist foreach buggy oder mein script einfach schei.....? ✔ von Marc Reichelt, 06. 12. 2004, 23:03
(PHP) ist foreach buggy oder mein script einfach schei.....? ✔ von MudGuard, 06. 12. 2004, 22:58
Das liest sich wie:
(PHP is for each (person) buggy) || (mein script is einfach schei...) = true
*gg*
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hi,
foreach($dateiinhalt as $login);
{
echo "<!-- Login ".$login.": \n";
Das echo (und auch die öffnende geschweifte Klammer) stehen schon NACH der Schleife.
Ja, das ist einer der Nachteile des Indian-Styles bei bestimmten Sprachen ;-)
Wenn die öffnende Klammer auf der gleichen Zeile wie die Loop-Anweisung ist, kann auch ein versehentliches Semikolon am Ende nichts mehr machen - außer vielleicht einen NOOP produzieren.
Außerdem freuen sich Verleger darüber, wenn bei Codelistings nicht so viel Platz vergeudet wird ;-)
so short
Christoph Zurnieden
gudn tach!
Ja, das ist einer der Nachteile des Indian-Styles bei bestimmten Sprachen
'Indian-Style', woher kommt'n das? wieso heisst das so?
prost
seth
Hi,
Ja, das ist einer der Nachteile des Indian-Styles bei bestimmten Sprachen
'Indian-Style', woher kommt'n das?
Genauer: "Indian Hill Style" http://www.eskimo.com/~scs/C-faq/q17.9.html, der das allerdings etwas anders sagt, aber das war ja auch der Witz an der Sache.
wieso heisst das so?
Gute Frage ;-)
so short
Christoph Zurnieden
gudn tach Christoph!
wieso heisst das so?
Gute Frage ;-)
im dokument von 1990 steht:
"This document is a result of a committee formed at Indian Hill to establish a common set of coding standards and recommendations for the Indian Hill community."
im update von 1998 wird noch praezisiert, dass mit "Indian Hill" "AT&T's Indian Hill labs" gemeint ist.
so, wieder was gelernt... ;-)
prost
seth
Hallo Felix,
foreach($dateiinhalt as $login);
{
// ...
}
^^ Da steckt dein Fehler: Das Semikolon am Ende.
Dadurch wird der Befehl bis zum Semikolon ausgeführt (also nichts), und das das Ganze Array lang.
In der Variable $login bleibt der letzte Wert des Arrays...
Oft sind es die kleinen Fehler die uns Mühe bereiten! ;-)
cu
Marc Reichelt || http://www.marcreichelt.de/
Hallo Felix,
[...] Nach den Ausgaben im HTML-Quelltext zu urteilen kommt in der foreach-Schleife immer nur das letzte Array-Element dran. [...]
foreach($dateiinhalt as $login);
mit dem ; am Ende der Zeile beendest du die foreach-Schleife ohne irgendwas mit dem Inhalt von $dateiinhalt zu machen - das was da steht ist also das gleiche wie:
foreach($dateiinhalt as $login){
}
Der folgende Block (das was zwischen den { und }, die eigentlich zu forach gehören, steht) wird dann nur noch genau einmal abgearbeitet - und zwar mit dem Wert, den foreach als letztes in $login geschrieben hat.
Um es kurz zu machen: lass das »;« am Ende der Zeile mit foreach weg :-)
Grüße aus Nürnberg
Tobias
Wunderbar!!!
Das war tatsächlich der Fehler.
_Noch wunderbarer_ ist allerdings euer Humor! Vor allem Orlando... Herrlich köstlich!
Liebe Grüße aus Ellwangen,
Felix Riesterer.