dressa
Goto Top

PHP 8.1 Zahlen in Arrays zusamenzählen funktioniert nicht mehr

Hallo miteinander,

Bei der Umstellung von PHP 7.4 auf 8.1 funktioniert in meinem Code das Zusammenzählen von Zahlen in Arrays nicht mehr.
Bei dieser Zeile bricht die Seite ab, aber ohne Fehlercode.

Funktionierendes Beispiel in 7.4
echo "feld_i".$feld[$i]."<br>";  
echo "feld_ix".$feld[$ix]."<br>";  
echo "feld_fka_i".$feld_fka[$i]."<br>";  
echo "feld_tka_i".$feld_tka[$i]."<br>";  

$feld_tot[$i] = $feld[$i] + $feld[$ix] + $feld_fka[$i] + $feld_tka[$i];

echo "feld_tot".$feld_tot[$i]."<br>";  

Ausgebe:
feld_i 8
feld_ix 3
feld_fka_i
feld_tka_i 2

feld_tot 13

Wie zu sehen ist, ist der Array-Inhalt $feld_fka[$i] leer ('').
Unter 7.4 wurde dies noch akzeptiert, unter 8.1 geht das nicht mehr.
Da diese Array-Inhalte später in einer Tabelle angezeigt werden, muss der Inhalt leer bleiben, also '' und nicht eine 0 enthalten, was dieses Problem wahrscheinlich lösen würde.

Wie kann ich das unkompliziert lösen ?

Gruss Andy

Content-Key: 4209280899

Url: https://administrator.de/contentid/4209280899

Printed on: April 24, 2024 at 18:04 o'clock

Member: LordGurke
Solution LordGurke Oct 09, 2022 updated at 13:25:48 (UTC)
Goto Top
Wie kommen denn die Zahlen in das Array? An der Stelle musst du dafür sorgen, dass das Integer oder Float sind, ein leerer String wird dabei nach 0 konvertiert.
Das war eigentlich schon seit langem so, aber mittlerweile wird es hart durchgesetzt.

Also z.B.
$feld[$x] = (int) $anderevariable
Member: dressa
dressa Oct 09, 2022 updated at 18:54:47 (UTC)
Goto Top
Zitat von @LordGurke:

Wie kommen denn die Zahlen in das Array? An der Stelle musst du dafür sorgen, dass das Integer oder Float sind, ein leerer String wird dabei nach 0 konvertiert.
Das war eigentlich schon seit langem so, aber mittlerweile wird es hart durchgesetzt.

Also z.B.
$feld[$x] = (int) $anderevariable

Danke für den Hinweis.
Ja, die Seite ist etwas in die Jahre gekommen.
Deshalb ist es auch nicht aufgefallen.

Die Daten stammen aus einer MySQL-Datenbank.

Dein Tip hat auf jeden Fall wunderbar funktioniert, und die Seite läuft nun fast wieder wie gewohnt.
Member: StefanKittel
StefanKittel Oct 09, 2022 at 20:34:43 (UTC)
Goto Top
Besonders bei MySQL muss man bei Zahlen unterscheiden zwischen
  • Zahl
  • NULL
  • 0

Das PHP standardmäßig typenlos arbeitet ist da häufig ein Fluch.

Tipp am Rande. Mit dem PHP-Framework Codeigniter4 wird dies streng überwacht.

Stefan
Member: firefly
firefly Oct 09, 2022 at 21:35:42 (UTC)
Goto Top
Hi,

schau dir unbedingt den PHP Befehl: array_sum() an. Der löst dein Problem besser.

Zitat von @StefanKittel:

Besonders bei MySQL muss man bei Zahlen unterscheiden zwischen
  • Zahl
  • NULL
  • 0

Das PHP standardmäßig typenlos arbeitet ist da häufig ein Fluch.

Ab PHP 8.x. bekommt man bei Typenlosen Variablen eine Fehlermeldung ins Log. Ich denke die Zeit von Variablen und Funktionen ohne Typen-Zuordnung ist in PHP demnächst vorbei (eigentlich jetzt schon, man kann es noch erfolgreich ignorieren). Es ist auch in PHP besser alle sauber zu deklarieren.

face-smile

Gruß
@firefly
Member: dressa
dressa Oct 11, 2022 at 20:06:53 (UTC)
Goto Top
Danke firefly für den Tip.

Ja die Seite ist wirklich alt.
Inzwischen läuft alles wieder so wie vor der Umstellung, aber wenn dann die Typenlosen Variablen nicht mehr ignoriert werden, wird das nächste Problem bereits schon auf mich warten.

Es ist so oder so eine neuprogrammierung der ganzen Webseite geplant.
Dann muss ich bestimmt noch mein PHP Wissen etwas auffrischen. Besonders was Neuigkeiten von PHP8.1 betreffen.

Aber deine Typs werde ich schon mal mit in den neunen Code einbinden face-smile

Gruss Andy