8768 sujets

Développement web côté serveur, CMS

Bonjour,
Je fait appel à vos connaissances, par ce que là je sèche sévère...
Depuis que mon hébergeur est passé à la version 7.3.13 de php, j'ai l'erreur suivante:
"Invalid argument supplied for foreach()".
Cela fonctionnait parfaitement avant le changement de version, si je fait var_export sur la fonction, avant la version 7.3.13 j'obtient:
array (
0 => 'block_menu.html',
1 => 'block_fiches_pratiques.html',
2 => 'block_fiche_aleatoire.html',
3 => 'block_random_annonces.html',
4 => 'block_consult.html',
5 => 'block_random_images.html',
6 => 'block_user_information.html',
7 => 'block_horoscope.html',
8 => 'block_favoris.html',
9 => 'block_links.html', )
Depuis la nouvelle version j'obtient:
'bbbbbbbbbb'.
Voici le code incriminé:

if($left_block_ary !='') {
						foreach ($left_block_ary as $block => $value)
						{
						$template->assign_block_vars('left_block_files', array(
						'LEFT_BLOCKS'       => portal_block_template($value),
						'LEFT_BLOCK_ID'     => $left_block_id[$block],
						'LEFT_BLOCK_SOURCE' => htmlspecialchars_decode(smilies_pass(censor_text($left_block_source[$block]))),
						'LEFT_BLOCK_NOM'    => $left_block_nom[$block],						
						));
						} } else {}


Merci de votre aide...
Modifié par Felipe (06 Feb 2020 - 15:03)
Merci pour votre aide.
Mais justement le problème est là, avec les version php avant la 7.3.13, avec le test de la fonction var_export ($left_block_ary); , il m'affiche bien le tableau.
Depuis la version 7.3.13, il m'affiche 10 fois la première lettre de la chaine de caractère, not array(bbbbbbbbbbb).
Donc, ce qui était un tableau ne l'est plus...
Voir mon premier post.
Ce qui été un tableau ne l'était peut être pas Smiley smile

le var_export n'a pas changer entre deux versions, regarde plutôt comment tu construis ton tableau, moi je ne vois pas.
oui, il faut regarder avant le code que tu nous as donné. Je pense que tu dois avoir un code qui te retourne une string à la place d'un array précédemment. Car il me semble que si tu fait ceci :


$var = 'block_menu.html';
echo $var[0];


tu auras la lettre b d'affichée
je vais épurer le code et je reviens vers vous, car j'ai la même erreur sur tout les block
Voici le code:

$sql = 'SELECT portal_block_includes_name
        FROM ' . PORTAL_BLOCK_INCLUDES_ORDER_TABLE . '
        WHERE portal_block_includes_disable = 1';
    $result = $db->sql_query($sql);
    $portal_block_includes = array();
    while ($row = $db->sql_fetchrow($result))
    {
        $portal_block_includes[] = $row;
    }
    foreach($portal_block_includes as $portal_block_includes_disable)
    {
        $filname = substr($portal_block_includes_disable['portal_block_includes_name'], 0, strpos($portal_block_includes_disable['portal_block_includes_name'], '.'));
        if(file_exists($phpbb_root_path . 'blocks/' . $filname . '.' . $phpEx))
        {
            include_once($phpbb_root_path . 'blocks/' . $filname . '.' . $phpEx);
        }
    }   

function portal_block_template($info)
{
    global $template;
    // set template filename
    $template->set_filenames(array('name' => 'blocks/' . $info));
    // Return templated data
    return $template->assign_display('name');
}

//request vars
		$block_ary = array();
		$haut_block_ary =  request_var('haut_block_ary','');
		$bas_block_ary =  request_var('bas_block_ary', '');
		$left_block_ary =  request_var('left_block_ary', '');
		$right_block_ary =  request_var('right_block_ary', '');
		$middle_block_ary =  request_var('middle_block_ary', '');			

$sql = "SELECT *
        FROM  ".PORTAL_BLOCK_INCLUDES_ORDER_TABLE ." 
		WHERE portal_block_includes_disable = '1'  
		ORDER by portal_block_includes_order ASC";
		
        $result = $db->sql_query($sql);
        $D = $G = $M = $B = $H = 0;

        while ($row = $db->sql_fetchrow($result))
        {
              $portal_block_includes_id = $row['portal_block_includes_id'];
              $portal_block_includes_name = $row['portal_block_includes_name'];
              $block_position = $row['portal_block_includes_position'];
              $portal_block_includes_view = $row['portal_block_includes_view'];
              $portal_block_includes_source = $row['portal_block_includes_source'];
              $portal_block_includes_nom = $row['portal_block_includes_nom'];
			  
        if(!empty($portal_block_includes_name))
            {
                switch($block_position)
                {
                   case '1':
                      {               
						$left_block_ary[$G]    = $portal_block_includes_name;
						$left_block_id[$G]          = $portal_block_includes_id;
						$left_block_source[$G]      = $portal_block_includes_source;
						$left_block_nom[$G]      	= $portal_block_includes_nom;						
						$G++;
                   break;
                      }
                    default:
                 }
			} 					
		}
        $db->sql_freeresult($result);
					if(!empty($left_block_ary)) {
						foreach ($left_block_ary as $block => $value)
						{
						$template->assign_block_vars('left_block_files', array(
						'LEFT_BLOCKS'       => portal_block_template($value),
						'LEFT_BLOCK_ID'     => $left_block_id[$block],
						'LEFT_BLOCK_SOURCE' => htmlspecialchars_decode(smilies_pass(censor_text($left_block_source[$block]))),
						'LEFT_BLOCK_NOM'    => $left_block_nom[$block],						
						));
						} } else {}



Modération : Mise en forme du code source ; plus facile pour la lecture.
Modifié par Greg_Lumiere (07 Feb 2020 - 12:57)
JENCAL a écrit :
Ce qui été un tableau ne l'était peut être pas Smiley smile


C'est possible ça ?
Après tu utilise PHPBB donc je connais pas du tout...
request_var.... je connais non plus. je sais pas comment il construit son tableau ou quoi. chercher par là.
Ce que je ne comprend pas c'est que depuis la version 5.5.0 de php cela fonctionnait parfaitement, après la mise a jour de php par mon hébergeur, le forum est tombé le portail ne s'affiche plus...
Je creuse sur la fonction request_var...
pdriss a écrit :
Ce que je ne comprend pas c'est que depuis la version 5.5.0 de php cela fonctionnait parfaitement, après la mise a jour de php par mon hébergeur, le forum est tombé le portail ne s'affiche plus...
Je creuse sur la fonction request_var...


bah c'est comme wordpress et c'est plugin. problème incompatibilité quand tu fais une maj que d'un seul outil dans un environnement complexe.

As tu la dernier version de phpbb ?
le problème c'est que je n'ai pas fait de mise a jour, en fait je n'est pas touché au code depuis 3 ans...