Schleife auf PHP 4.2.2 aber nicht auf 4.3.2 ?? WICHTIG
Pompingo
- php
0 Sönke Tesch0 Pompingo0 TomIRL0 Sönke Tesch
0 Liza0 Sven Rautenberg
Hallo!
Ich habe folgende Schleife, die leider nur auf 4.2.2 läuft aber nicht auf 4.3.2.
So läuft Sie auf 4.2.2 :
<?
while ($i<10) {
echo $i.' test <br>';
$i++;
}
?>
Bei 4.3.2 muß man die $i vorher eine Wert zuweisen:
<?
$i=0;
while ($i<10) {
echo $i.' test <br>';
$i++;
}
?>
Kann mir jemand erklären woran das liegen kann? Was muß evtl. in der PHP.ini der neueren Version geändern werden, damit auch "alte" Scripte laufen?
Vielen Dank
Ciao Ingo
Ich habe folgende Schleife, die leider nur auf 4.2.2 läuft aber nicht auf 4.3.2.
while ($i<10) {
Bei 4.3.2 muß man die $i vorher eine Wert zuweisen:
Kann mir jemand erklären woran das liegen kann? Was muß evtl. in der PHP.ini der neueren Version geändern werden, damit auch "alte" Scripte laufen?
Die Einstellung für die Fehlermeldungen. Befrage die PHP-Anleitung nach Sachen mit "error". Es ist allerdings ein klein wenig unklug, Variablen zu benutzen, von denen man nicht exakt weiß, was drin steckt.
Gruß,
soenk.e
Das alte Script wurde so geschrieben, daß alle Variablen die benutzt werden, aber keinen Wert haben auch automatisch NULL sind.
In der alten Version klappt es wie gesagt. Es muß doch einen Weg geben wie man die neue Version auch dazu bringt, das so zu behandeln.
Ciao Ingo
Das alte Script wurde so geschrieben, daß alle Variablen die benutzt werden, aber keinen Wert haben auch automatisch NULL sind.
Nö das ist schlicht nicht wahr!
Wo hast Du denn dass festgelegt?
Beim Programmieren sollte man generelll alle Variabelen initialisieren.
Variablen ohne Werte stellen ein nicht unerhebliches Sicherheitsrisiko dar.
Das alte Script wurde so geschrieben, daß alle Variablen die benutzt werden, aber keinen Wert haben auch automatisch NULL sind.
PHP initialisiert auch weiterhin Variablen bei Erstbenutzung. Der Fehler ist (möglicherweise, siehe unten) kein Fehler, sondern ein Hinweis auf schlechten Programmierstil.
In der alten Version klappt es wie gesagt. Es muß doch einen Weg geben wie man die neue Version auch dazu bringt, das so zu behandeln.
Du solltest vielleicht erstmal sagen, was überhaupt für eine Fehlermeldung kommt. "Funktioniert nicht" ist etwas sehr extrem dürftig.
Gruß,
soenk.e
Hallo,
ich würde sagen, es liegt daran, dass du einen Wert (Zahl) mit einem Nichtwert vergleichst. Mich wundert ehrlich gesagt, dass es unter 4.2.2 läuft.
Allerdings habe ich dir damit wohl auch nicht weiter geholfen, da du wahrscheinlich ein altes Script überarbeiten musst, das diese Konstruktion häufiger verwendet.
Sorry.
Liza
Moin!
Ich habe folgende Schleife, die leider nur auf 4.2.2 läuft aber nicht auf 4.3.2.
So läuft Sie auf 4.2.2 :
<?while ($i<10) {
echo $i.' test <br>';
$i++;
}
?>Bei 4.3.2 muß man die $i vorher eine Wert zuweisen:
<?
$i=0;
while ($i<10) {
echo $i.' test <br>';
$i++;
}
?>
Bei PHP werden die neuen Versionen zunehmend auf Sicherheit getrimmt. Dementsprechend wirft die Benutzung einer nicht initialisierten Variable zumindest eine NOTICE, wahrscheinlich auch mehr. Dies ist aus Sicherheitssicht absolut notwendig.
Es hat schon zuviele Skripte gegeben, bei denen man aufgrund von register_globals=on Werte von außen einschleppen konnte. Das geht bei deinem 4.2.2-Skript auch: skript.php?i=10 aufrufen, und schon läuft deine Schleife nicht mehr 10 mal.
Wenn du so eine dumme Schleife wie oben benutzen willst, warum nimmst du keine for-Schleife?
Kann mir jemand erklären woran das liegen kann? Was muß evtl. in der PHP.ini der neueren Version geändern werden, damit auch "alte" Scripte laufen?
Ändere deine Skripte. Besser ist es auf jeden Fall.
- Sven Rautenberg