foreach supplied dopo Upgrade da PHP4 a PHP5

Buongiorno a tutti.

Tempo fa aprii questo topic http://www.phpnews.it/forum/index.php?topic=3183.0

Oggi ho ricevuto questa mail che è il risultato dello script del topic aperto tempo fa:

"<br /> <b>Warning</b>:  Invalid argument supplied for foreach() in <b>D:\inetpub\webs\miosito\miofile.php</b> on line <b>365</b><br /> Valore 1 <br /> <b>Warning</b>:  Invalid argument supplied for foreach() in <b>D:\inetpub\webs\miosito\miofile.php</b> on line <b>375</b><br /> <br />"

Credo che il problema dipenda dall'upgrade fatto dal provider che è passato da PHP4 a PHP5.

Preciso che lo script fa tutto quello che deve (la stringa "valore 1" è la prova che lo script funziona), solo che mi avvisa del foreach.

Consigli su come sistemare la cosa?

Grazie in anticipo come sempre.

 :)

inviato 8 anni fa
spaghettiss
X 0 X

Buongiorno ragazzi.

Sollevo il topic per chiedervi se è una buona idea trovare una funzione equivalente al foreach così da evitare il warning di PHP. In pratica andrei a rivedere lo script.

Mi sembra la soluzione più facile (non so se è la più veloce). Purtroppo lavoro con un Mac 10.3.9 che ha già di sistema PHP4 e non so come fare l'upgrade alla versione 5.

Grazie a tutti.

risposto 8 anni fa
spaghettiss
X 0 X

PHP 5 produce quel warning perché è più attento a segnalare i parametri errati passati ad un foreach, ad esempio quando non viene passato un array al foreach.

Penso quindi che il problema sia quello, magari stai passando una semplice stringa.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

prima del foreach fai

echo "<pre>";

print_r($_SESSION['nome_modello']);

echo "</pre>";

il problema potrebbe essere, infatti che si tratti di una stringa anzichè di un array

sostituisci:

if ($_SESSION['nome_modello'] != "") {

con:

if (is_array($_SESSION['nome_modello'])) {   

risposto 8 anni fa
Conroe
X 0 X

Ciao ragazzi.

Innanzitutto grazie come sempre della gentile disponibilità.

Non ho ancora testato la proposta di Conroe, perché al momento ho "risolto" mettendo un controllo all'input hidden che passa i valori al file mail.php:

<input type="hidden" name="modello_txtarea" value="

   <?php         if ($_SESSION['nome_modello'] != "") {          foreach ($_SESSION['nome_modello'] as $key => $indice) {                      echo $indice."\n";          }             }       ?>" />

prima era così:

<input type="hidden" name="modello_txtarea" value="

        <?php         foreach ($_SESSION['nome_modello'] as $key => $indice) {                    echo $indice."\n";

          }                     ?>" />

Il Warning è sparito però ho notato che l'output del corpo della mail è modificato a causa dell'aggiunta inspiegabile di paragrafi tra un array e l'altro.

Il corpo della mail mi appare così:

"Vorrei comprare questi modelli:   Valore 1 Pippo Valore 1 Pluto Valore 1  Paperino   Valore 2 Pippo          Valore 3 Pippo Valore 3 Pluto"

Copiando e incollando il corpo mail in un file html ho visto che ogni array è racchiuso in un paragrafo, che causa i doppi spazi. Poco male se non fosse che se un array è vuoto, cioè se non ho selezionato alcun valore di quell'array, mi stampa un paragrafo vuoto. Dunque non sono più doppi spazi ma tanti quanti gli array vuoti.

Se ad esempio impostassi solo l'array 1 e l'array 230 il risultato sarebbe una mail lunghissima...

Di seguito parte dello script del file mail.php

<?php
$content = "Vorrei comprare questi modelli:\n\n";

if(isset($_POST['modello_txtarea'])){
    $content .= stripslashes($_POST['modello_txtarea']); }
?>

L'if qui sopra che mi aveva suggerito arkant http://www.phpnews.it/forum/index.php?topic=3251.msg20800#msg20800 serve appunto a controllare se l'array è impostato. Proprio per stampare nella mail solo gli array impostati e funzionava. E' cambiato qualcosa con PHP 5??

grazie a tutti

 :)

risposto 8 anni fa
spaghettiss
X 0 X

Up ^_^

risposto 8 anni fa
spaghettiss
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda