PHP8 Fehlermeldung "Array Offset on value of type int"

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

flori-software

Neues Mitglied
15 April 2020
16
1
3
46
Hallo zusammen!

Ich mache gerade meinen ersten Versuch meine Anwendung unter PHP 8 laufen zu lassen. Ich bekomme folgende Fehlermeldung, die ich nicht wirklich verstehe:

Warning: Trying to access array offset on value of type int in /Applications/MAMP/htdocs/meine_app/meine_seite.php on line 27

Die Fehlermeldung bezieht sich auf dieses Stück Code:

Code:
public function teilnehmerliste_lesen() {
        $mysqli = MyDatabase();
        $ang_kunde=array(1000); // Dieses Array soll die Infos über die Kunden spreichern, um die Kunden vor der Ausgabe alphabetisch zu sortieren
        $abfrage="SELECT * FROM Teilnehmerliste WHERE `id-veranstaltung` LIKE ".$this->ID;
        if ($result=$mysqli->query($abfrage)) {       
            while ($row = $result->fetch_object()) {           
                $this->angemeldete_teilnehmer++; // Diese Variable zählt die Anzahl der angemeldeten Kunden
                $kunde = $this->angemeldete_teilnehmer; // Kurze Form für die aktuelle "Teilnehmernummer"
                $ang_kunde[$kunde]['id_eintrag']=$row->ID;
                $ang_kunde[$kunde]['id']=$row->id_kunde;
                
                // Es wird geprueft ob der Kunde bei der Veranß
                $abfrage=('SELECT * FROM Mediliste WHERE `kunden-id`='.$ang_kunde[$kunde]['id'].' AND `bedarfsmedikament` IS NULL');

                if ($ergebnis=$mysqli->query($abfrage)) {
                    $ang_kunde[$kunde]['kriegtmedi_regel']=$ergebnis->num_rows;
                }
                    
                // Hier wird eine Funktion aufgeraufen, welche den Namen zur entsprechenden Kunden-ID dazu holt
                $ang_kunde[$kunde]['kundecode']=c3po::lesen(gesuchter_wert($ang_kunde[$kunde]['id'],"Kunden","kundecode"));
            }
        }

        // Arrayelemente werden alphabetisch sortiert   
        
        foreach ($ang_kunde as $key=>$row) {
            $kundecode[$key] = $row['kundecode'];
        }
        array_multisort($kundecode, SORT_ASC, $ang_kunde);
        return $ang_kunde;
    }

und zwar auf die Zeile

$kundecode[$key] = $row['kundecode'];

Da ich die Fehlermeldung nicht ganz verstehe, verstehe ich das Problem nicht.
Meine Vermutung war, dass es ein Problem mit dem Datentyp von $row['kundecode'] gibt. Wenn ich an diese Stelle einfach einen String einfüge, z.B.

$kundecode[$key] = "PeterParker";

ist der Fehler weg. Also habe ich versucht sicherzugehen, dass der Inhalt von $row['kundecode'] ein String ist:

$kundecode[$key] = strval($row['kundecode']);

... was aber nichts bringt, der Fehler tritt wieder auf. Und ja, ich habe schon das "offset on value of type int" gesehen, ich weiß nur nicht, worauf genau sich diese Fehlermeldung bezieht. Kann mir jemand helfen? Danke im Voraus!
 

jonas3344

Aktives Mitglied
25 Oktober 2019
155
43
28
38
$row ist wohl in einem der Durchläufe ein Integer. Schau Dir mal $ang_kunde an und was dort drinsteht.
 

flori-software

Neues Mitglied
15 April 2020
16
1
3
46
Dachte ich auch. Um die Vermutung zu bestätigen, habe ich den Wert durch ein klares Integer ersetzt:

Code:
foreach ($ang_kunde as $key=>$row) {
            //$kundecode[$key] = strval($row['kundecode']);

            $kundecode[$key] = 5;
}

Überraschenderweise kommt die Fehlermeldung dann nicht!!! Abgesehen davon sind die Werte nicht INT, wenn ich mir die Werte Anzeigen lasse

Code:
foreach ($ang_kunde as $key=>$row) {
            echo '-'.$row['kundecode'].'-<br>';
            $kundecode[$key] = strval($row['kundecode']);
}

bekomme ich folgende Ausgabe:

Warning: Trying to access array offset on value of type int in /Applications/MAMP/htdocs/Gabriel/tutaj/klassen/klasse_veranstaltungen.php on line 101
--

Warning: Trying to access array offset on value of type int in /Applications/MAMP/htdocs/Gabriel/tutaj/klassen/klasse_veranstaltungen.php on line 102
-ParkerPeter-

Warning: Trying to access array offset on value of type int in /Applications/MAMP/htdocs/Gabriel/tutaj/klassen/klasse_veranstaltungen.php on line 101
--

Warning: Trying to access array offset on value of type int in /Applications/MAMP/htdocs/Gabriel/tutaj/klassen/klasse_veranstaltungen.php on line 102
-StackhouseSookie-
-TargaryenDaenerys-
-StarkArya-

Warning: Trying to access array offset on value of type int in /Applications/MAMP/htdocs/Gabriel/tutaj/klassen/klasse_veranstaltungen.php on line 101
--

Warning: Trying to access array offset on value of type int in /Applications/MAMP/htdocs/Gabriel/tutaj/klassen/klasse_veranstaltungen.php on line 102
-StarkArya-

Die Zeilennummern sind:
101 echo '-'.$row['kundecode'].'-<br>';
102 $kundecode[$key] = strval($row['kundecode']);

Der Fehler in der Zeile mit echo kommt scheinbar, wenn der Wert "" leer ist, in der Zeile 102 wenn der Wert ein klarer String ist.

Es wäre interessant zu wissen, was genau die Fehlermeldung bedeutet. Im Netz finde ich dazu gerade nichts brauchbares.
 

jonas3344

Aktives Mitglied
25 Oktober 2019
155
43
28
38
Adlerauge @m.scatello :)

Überraschenderweise kommt die Fehlermeldung dann nicht!!! Abgesehen davon sind die Werte nicht INT, wenn ich mir die Werte Anzeigen lasse
Du hättest Dir auch $row als ganzes ansehen müssen.
Gewöhne Dir an zum Debuggen var_dump() zu nehmen und nicht echo. Und wenn du, wie ich gesagt hätte, Dir vor der Schlaufe mal kurz $ang_kunde ausgeben lassen hättest, hättest du den Fehler gleich gesehen.