Fehlermeldung Invalid argument supplied for foreach()

Gesperrt
lunsen_de
Beiträge: 302
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Fehlermeldung Invalid argument supplied for foreach()

Beitrag von lunsen_de »

Hallo, ich habe in der Errorlog von Contenido bei einer neuen Seite plötzlich folgenden Eintrag:

[21-Nov-2011 21:25:59] PHP Warning: Invalid argument supplied for foreach() in /var/www/.../html/contenido/includes/include.tplcfg_edit_form.php(404) : eval()'d code on line 286

Es handelt sich um Contenido 4.8.15.

Ich konnte es schon eingrenzen auf das Modul xtcDynSpryForm0.9.2 und auch auf den Abschnitt im INPUT, der den Fehler verursacht.
Der Eintrag erfolgt immer, wenn ich die Konfiguration eines Artikels aufrufe, welches auch das Modul xtcDynSpryForm0.9.2 beinhaltet.

Entferne ich im Input des Moduls folgedes (steht ziemlich weit am Ende), ist der Fehler weg:

Code: Alles auswählen

<script language="JavaScript">
<!--
function dechecked(){
<?php
if(count($fromthismailCheckboxnames >= 0)){
    foreach ($fromthismailCheckboxnames as $checkboxNames){
?>
    document.getElementsByName("<?php echo $checkboxNames; ?>")[0].checked = false;
<?php
    }
}
?>
}
//-->
</script>
Kann da jemand etwas problematisches erkennen? Oder muss man an anderer Stelle suchen und im obigen Code ist garnicht der Auslöser (dann kann ich den gesamten Input noch posten)?

Ich habe auch schon getestet, ob ein Problem mit anderen Modulen besteht, aber der Fehler taucht auch bei einem Layout mit nur einem (belegten) Container auf.

Komisch ist nur, dass ich das Modul schon ewig bei einer Vielzahl von Seiten eingesetzt habe und kann dort den Fehler nicht reproduzieren (Meist 4.8.14 und älter).

Ich hoffe auf eure Hilfe.

Gruß lunsen_de
xmurrix
Beiträge: 3217
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Fehlermeldung Invalid argument supplied for foreach()

Beitrag von xmurrix »

Hallo lunsen_de,

die Variable $fromthismailCheckboxnames scheint keine richtige Liste (Array) zu sein, daher gibt PHP einen Fehler aus, wenn man versucht über Inhalte der Variable per foreach zu iterieren.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
lunsen_de
Beiträge: 302
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Fehlermeldung Invalid argument supplied for foreach()

Beitrag von lunsen_de »

Hallo, da fehlt mir wohl noch eine Menge Wissen, um von deiner Antwort etwas zu verstehen.

Was kann ich also tun? Was soll die Funktion eigentlich machen?

Und warum läuft es bei 4.8.14 und bei einer 4.8.15 nicht (das werde ich morgen noch einmal auf ein und dem selben Server und verschiedenen Contenido Versionen testen).

Gruß lunsen_de
xmurrix
Beiträge: 3217
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Fehlermeldung Invalid argument supplied for foreach()

Beitrag von xmurrix »

Warum es unterschiedlich unter 4.8.14 und unter 4.8.15 arbeitet, kann ich leider nicht sagen. Dazu müsste man sich mit dem Modulcode auseinander setzen.

Wenn du die Zeile

Code: Alles auswählen

if(count($fromthismailCheckboxnames >= 0)){
in

Code: Alles auswählen

if(is_array($fromthismailCheckboxnames)){
änderst, sollte es funktionieren.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung Invalid argument supplied for foreach()

Beitrag von Oldperl »

Hallo,

Ich persönlich würde eine Kombination von Beidem nehmen, da is_array nur auf ein Array prüft, aber nicht ob auch was im Array drin ist. Wobei ich eine Prüfung auf >= hier nicht ganz verstehe, hier sollte wohl eher nur auf > geprüft werden, wenn das Array leer ist muss ja auch nichts generiert werden für die JS-Funktion.

Code: Alles auswählen

if(is_array($fromthismailCheckboxnames) && count($fromthismailCheckboxnames) > 0){ 
Und im gegebenen Beispiel sollte die schließende Klammer der count-Funktion bereits hinter der Variablen stehen sonst funktioniert es sowieso nicht korrekt.
lunsen_de hat geschrieben:

Code: Alles auswählen

<script language="JavaScript">
<!--
function dechecked(){
<?php
if(count($fromthismailCheckboxnames >= 0)){...
Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
lunsen_de
Beiträge: 302
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Fehlermeldung Invalid argument supplied for foreach()

Beitrag von lunsen_de »

Hallo, das hat geholfen.

Die Fehlermeldung verschwand schon als ich aus

Code: Alles auswählen

<?php
if(count($fromthismailCheckboxnames >= 0)){
    foreach ($fromthismailCheckboxnames as $checkboxNames){
?>
das gemacht habe:

Code: Alles auswählen

<?php
if(count($fromthismailCheckboxnames >= 0)){foreach ($fromthismailCheckboxnames as $checkboxNames){
?>
Die Lerrzeichen vor foreach waren scheinbar schon ein Problem.
Habe dann noch die Klammer umgesetzt und danach Ortwins Code eingefügt.

Fehler ist weg vielen Dank.

Gruß lunsen_de
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung Invalid argument supplied for foreach()

Beitrag von Oldperl »

lunsen_de hat geschrieben:das gemacht habe:

Code: Alles auswählen

<?php
if(count($fromthismailCheckboxnames >= 0)){foreach ($fromthismailCheckboxnames as $checkboxNames){
?>
Ähm, ich will ja nicht nerven :wink: aber die schließende Klammer des count() sitzt immer noch an der falschen Stelle, vielleicht ist das ja eher der Grund für deine Fehlermeldung.
lunsen_de hat geschrieben:Die Lerrzeichen vor foreach waren scheinbar schon ein Problem.
Das denke ich daher nicht. :roll:
Wenn überhaupt sind es oft Steuerzeichen die PHP zu Fehlern verleiten. Diese kann man aber in den gängigen Editoren anzeigen lassen.
Leerzeichen an dieser Stelle interessieren den Parser eigentlich nicht.
lunsen_de hat geschrieben:Habe dann noch die Klammer umgesetzt und danach Ortwins Code eingefügt.
Dann hast du in deinem letzten Beitrag aber einen anderen Code gepostet?!

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Gesperrt