Page 1 sur 1

Invalid argument supplied for foreach()

Posté : 09 juin 2006, 22:49
par zzzsev
Bonsoir,

Voici mon message d'erreur : " Invalid argument supplied for foreach() ... "
suite au code
public function __construct ($id=null)
  {
	// id = identifiant du theme pere
	
	$req = connexion::requete("SELECT * FROM THEME WHERE THMPID ".(is_null($id) ? "IS NULL" : "= '$id'")." ORDER BY THMNOM") ;
	
        $theme = new Theme() ;
        foreach ($req as $ligne)         // ERREUR ICI
        {
            $theme->Chargement($ligne) ;
            $this->liste[] = clone $theme ;
        }
	
  }
J'ai la même erreur dans une autre classe sur un foreach, sachant que ce code vient du prof, je pige pas ...
Merci pour votre aide !

Posté : 10 juin 2006, 00:55
par insomniak
Salut,

Essayes de faire un

$req = array(); pour initialiser ta variable... car un foreach attend un tableau. Or si ton resultat ne contient pas de tuple, tu n'as pas un tableau mais rien du tout... Donc dans ton cas, c'est meme pas un $req = array qu'il faut faire mais simplement tester si $req == false ou pas avant de faire un foreach dessus ;)

@++

Posté : 10 juin 2006, 10:24
par zzzSev
Bonjour et merci pour la réponse.

J'ai testé les 2 solutions mais aucune ne fonctionne, j'ai toujours le même message d'erreur ... y aurait-il autre chose que j'aurais oublié ? (je suis sur le bon fichier, j'ai vérifié au cas où ...)

Merci d'avance !

Posté : 10 juin 2006, 11:13
par insomniak
Salut,

Pourrais tu expliquer ce que fait connexion::requete stp ? du moins recopier le code de cette methode ?

Car si tu fais comme moi ca devrait marcher mais si ce n'est pas le cas, forcement, ca ne marchera point...

En gros : si tu fais juste un mysql_query il ne te renverra qu'un resultat non exploitable comme ca.
Il faut balancer un mysql_fetch_array derriere pour qu'il te renvoie un tableau de resultats.Et surtout fais les tests qui vont bien et RTFM ;)

@++ et bon courage

Posté : 10 juin 2006, 13:25
par zzzSev
Voici le code fourni par le prof, juste une précision : il développait en PDO
// Faire une requete et retourner le resultat
    public static function requete($req)
    {
        self::msg("Requete: $req") ;
        // Existe-t-il une instance de Connexion ?
        if (is_null(connexion::$connexion))
        {
            // NON : il faut en creer une
            connexion::$connexion = new connexion() ;
        }
        $res = mysql_query($req, connexion::$base) ;
        if (!$res)
        {
            throw new Exception("Erreur pour la requete <i>$req</i> :<br>".mysql_error(connexion::$base)) ;
        }
        return $res ;
    }

Posté : 10 juin 2006, 13:37
par Insomniak
Je réitere donc : RTM : read the manual...

Un indice : www.php.net
il y a tout ce qu'il faut

Posté : 10 juin 2006, 14:09
par zzzSev
oups, problème résolu mais je n'ai pas eu le temps de poster ...
Désolée et merci pour tout !!!!

Bonne journée !