bonsoir,svp j'ai un probleme d'affichage de données depuis ma base de données de mon site hébergé gratuitement sur un serveur web. les données s'ajoute convenablement à la base de données mais ils ne s'affichent pas avec un erreur qui est le suivant:
Warning: Invalid argument supplied for foreach() in C:\wamp\www\pfa\Candidat_1A_MASTERRITEL.php on line 22
avec la ligne 22: <?php foreach ($int as $v)
et $int:$int= $candidat->aff_candidat_int_MPRITEL_1A($c);
je suis totalement bloqué et je suis en train de préparer mon projet de fin d'année. Merci de m'aider le plutot possible et merci d'avance.

11 réponses


Balbert
Réponse acceptée

Vous pouvez remplacer votre fonction par

public function aff_candidat_int_MPRITEL_1A ($c)
{ 
    $sql= "select * from cand_enet_1a_ma_pro where choix='mpRITEL' ORDER BY score DESC";

    $obj1=$c->query($sql); 

    return $obj1->fetchAll(PDO::FETCH_ASSOC);
}

Pouvez vous nous poster le code du fichier Candidat_1A_MASTERRITEL.php

sirine
Auteur

Avec plaisir,
include"classe/candidat.php" ;
$candidat= new candidat ;
$c= $candidat->DBconnect() ; $int= $candidat->aff_candidat_int_MPRITEL_1A($c);$ext= $candidat->aff_candidat_ext_MPRITEL_1A($c);?>
...
<?php foreach ($int as $v)
{echo "<tr><td>".$v["id_cand_enet_1a_ma_pro"]."</td> <td>".$v["cin_c"]."</td><td>".$v["nom_c"]." </td> <td>".$v["prenom_c"]." </td> <td>".$v["email_c"]."</td><td>".$v["etablissement_c"]."</td><td>".$v["diplome_c"]."</td><td>".$v["promotion_c"]."</td> ><td>".$v["score"]."</td></tr>" ;}?>

et aff_candidat_int_MPRITEL_1A($c) est une fonction présenté dans la classe mere candidat avec le code suivant:
public function aff_candidat_int_MPRITEL_1A ($c)
{ $sql= "select * from cand_enet_1a_ma_pro where choix='mpRITEL' ORDER BY score DESC";
$obj1=$c->query($sql); if ($obj1->rowcount()==0)
return "liste des candidats est vide " ;
else { while( $row=$obj1->fetch(PDO ::FETCH_ASSOC) ) {$T[]=$row ;} return $T; } }

Dans la fonction aff_candidat_int_MPRITEL_1A ($c)

La ou vous avez fait

    return "liste des candidats est vide " ;

Remplacer par

return array() ;

Surement votre boucle essai de parcourir une chaine de caractère, ce qui n'est pas possible avec un foreach.

sirine
Auteur

l'erreur n'existe pas lorsque je la remplacer comme vous avez me dit mais les données ne s'affiche pas encore :(

Etes vous sur qu'il ya des données dans votre base de données ?

avant le foreach faite un :

var_dump($int); die();

Et dites nous ce qui est affiché.

sirine
Auteur

il n'affiche pas de données mais il m'affiche :array(0) { }

Sa veux dire qu'il n'ya pas de choix qui vaut 'mpRITEL' dans la table cand_enet_1a_ma_pro

sirine
Auteur

oui t'as raison il n'existe pas 'mpRITEL' se trouve dans une collonne "choix" mais elle est vide je sais pas pourquoi. je vais vérifié la fonction de choix : public function choixmaster_1A_interne ($c,$p)
{$master="update cand_enet_1a_ma_pro SET choix='".$p['choix']."' where id_cand_enet_1a_ma_pro= '".$_SESSION["id_can"]."' " ;
if($c->query($master)) return "ajout est terminé avec succes"; else return "impossible "; }

Je vous conseil d'utilisés des requetes preparé lorsque vous inserez des données dans la base de données.
En plus dans vos fonctions d'insertions, au lieu de renvoyer des chaines de caractère retourné des booleens c'est mieux.