OVH Community, votre nouvel espace communautaire.

Erreur : Invalid argument supplied for foreach()


weuz
19/05/2011, 17h44
J'avais cette erreur.
déclare ton tableau comme un array().

Par ex: $var=array();

Abogil
04/07/2007, 09h17
Tu as dans ton script :
Code PHP:
 if(!empty($match["fiche"])) {
            
$fiche unserialize($match["fiche"]); 
Si $fiche n'est pas un tableau, cela signifie que $match["fiche"] n'est pas correct.

Essaie provisoirement ce bout de code :
Code PHP:
   // test
   
$count 0;
   while (
$rs && $row=mysql_fetch_array($rs)) 
      { 
      
$count $count 1;
      
// COL1 est le nom de ta colonne 1
      
$Col_1 $row['COL1'];
      
$Col_2 $row['COL2'];
      
$Col_3 $row['COL3'];
      echo 
$count - \$Col_1=
$Col_1 - \$Col_2=$Col_2 - \$Col_3=$Col_3 
 \n";
      } 
Cela devrait de permettre de voir exactement ce que tu extrais de ta base SQL.

Moumsi
04/07/2007, 00h00
Merci de vos réponses, j'ai testé les différentes propositions et il resort qu'en effet ce n'est pas un tableau. (cf premier lien http://www.wydad.com/joueur.php?id=13 )

Doit il s'agir d'un problème de version php ? Si oui, que dois je faire ?

avdp
03/07/2007, 11h12
Citation Envoyé par renotm
le Invalid argument supplied for foreach() signifie que ta variable $fiche["joueur"] n'est pas un tableau.
Oui, c'est la bonne question, à mon humble avis.

Si la variable est vide, alors le tableau peut être vide.
Or il y a une différence fondamentale, pour les tableaux, entre php4 et php5: en php5, un tableau vide n'est pas un tableau.
Alors toute manipe sur le tableau retourne cette erreur.

Depuis php5, j'ai pris l'habitude de toujours mettre les manipes de tableau dans un "if(is_array(...))" afin d'éviter l'erreur.

Abogil
03/07/2007, 10h46
Peut-être peux-tu tester ainsi :

Code PHP:
if (!is_array($fiche["joueur"]))   echo " \$fiche["joueur"] n'est pas un tableau 
 \n"


renotm
03/07/2007, 10h27
Tient ma dernière phrase me fait penser à quelque chose.

Si $fiche["joueurs"] est un Objet php, tu peux itérer dessus en php 5 mais pas en php 4. C'est pê juste un problème de version php ...

renotm
03/07/2007, 10h22
Difficile de répondre mais le Invalid argument supplied for foreach() signifie que ta variable $fiche["joueur"] n'est pas un tableau.

es tu sur que ton $fiche["joueur"] est bien un tableau ?
un petit bout de code permettrait de le vérifier.

Code PHP:
foreach ($fiche as $key => $value) {
    if (
$key == "joueurs") {
      print(
"".$value);
    }
  } 
juste avant ton foreach. Si ca n'affiche pas Array c'est qu'il y a un problème. (en php 5 ca peut aussi être un objet)

crole
03/07/2007, 08h02
Hello,
Il y a des chance que le prob se situe dans les paramètres de connexion à la db. Ta table n'est pas remplie.
Si tu mets
Code PHP:
error_reporting(E_ALL); 
au début de ton code, tu verras sans doute apparaitre les erreurs de connexion.

P.S. : le serveur de bd n'est pas localhost mais mysqlx-x que tu as reçu par mail.

Moumsi
03/07/2007, 00h19
Bonjour,

Mon hebergement : 90plan
Mon nom de domaine : www.wydad.com

J'ai déménagé récemment mon site vers OVH, tout s'est bien passé au niveau de l'installation etc , j'ai rien à dire à ce niveau la.

Mon site est un site d'une équipe de football au Maroc dans lequel j'ai intégré un script "fait main" par un ami pour gérer les statistiques de l'équipe (nb de matchs, de buts, avertissements, cartons etc ...). Ce script marchait à merveille chez mon ancien hebergeur, mais maintenant sur OVH il commence à m'afficher deux erreurs :
1 - Sur les "fiches de joueurs" comme celle ci ( http://www.wydad.com/joueur.php?id=13 ), je découvre des messages d'erreur Invalid argument supplied for foreach() , je ne sais vraiment pas à quoi cela est du et comment corriger. Ce que je ne comprend pas c'est que le résultat s'affiche dans le tableau en dessous mais il y a quant meme un message d'erreur. Je vous fait une copie du code concerné se trouvant dans le fichier joueur.php
Code PHP:
    $J = array(
        
"nb_matchs" => 0,
        
"v" => 0,
        
"n" => 0,
        
"d" => 0,
        
"jaunes" => 0,
        
"rouges" => 0,
        
"buts" => 0,
        
"id" => $joueur->id,
    );
    
    
$rs $DBConnection->Query("SELECT * FROM `stats` WHERE `annee`='".$saison."' AND `fiche`!=''");
    while(
$match mysql_fetch_array($rsMYSQL_ASSOC)) {
        if(!empty(
$match["fiche"])) {
            
$fiche unserialize($match["fiche"]);
            
            if(
$match["score_wac"] == $match["score_adversaire"]) $mres "n";
            else if (
$match["score_wac"] > $match["score_adversaire"]) $mres "v";
            else 
$mres "d";
            
            foreach(
$fiche["joueurs"] as $id) {
                if(
$id == $J["id"]) {
                    
$J["nb_matchs"]++;
                    
                    
$J[$mres]++;
                }
            }
                
            foreach(
$fiche["remp"] as $v) {
                if(
$v["par"] == $J["id"]) {
                    
$J["nb_matchs"]++;
                    
                    
$J[$mres]++;
                }
            }
                
            foreach(
$fiche["jaunes"] as $id) {
                if(
$id == $J["id"]) $J["jaunes"]++;
            }
            
            foreach(
$fiche["rouges"] as $id) {
                if(
$id == $J["id"]) $J["rouges"]++;
            }
                
            foreach(
$fiche["buts"] as $v) {
                if(
$v["par"] == $J["id"]) $J["buts"]++;
            }
        }
    }
    
?>
2 - Le second problème vient au niveau de l'intégration des "stats" dans mon admin. Je n'arrive plus à activer des liens en javascript qui doivent m'ouvrir des menus par exemple ou bien me valider des "résultats de match". Pensez vous que je doive faire des modifications à un niveau du serveur pour que ca s'active ou bien est ce mon code qui doive être modifié ???


Merci d'avance pour votre future aide car je suis méga novice en php et je ne sais comment m'en sortir.