2 votes

Argument invalide fourni pour foreach dans CodeIgniter

Voici mon modèle, il fonctionne correctement. Pour l'instant, il renvoie false car il n'y a pas d'enregistrement pour un nouvel étudiant. Cependant, dans mon contrôleur, j'ai une instruction If qui vérifie si la requête est renvoyée à true, puis passe en revue chaque ligne de la requête :

Mon modèle :

function get_schedule($Student_ID)
{
    $query = $this -> db -> query("
        getstuff");

    if($query -> num_rows() > 0 )
    {
        $sections= $query->result();        
        return $sections;
    }
    else     
    {           
        return false;
    }
}

Mon contrôleur :

$Student_ID = $session_data['Student_ID'];
$query['section']=  $this->grades_model->get_schedule($Student_ID);
$sections= array();

if ($query == TRUE)
{
    foreach($query['section'] as $row)
    {
        do stuff:
    }
}

Le problème est qu'il me donne un avertissement de boucle foreach invalide parce qu'il n'y a pas de données à parcourir. Comment puis-je faire en sorte qu'il ne tente même pas cette boucle si la requête est renvoyée à faux. J'ai essayé d'ajouter elseif($query == FALSE){} mais la boucle foreach reste invalide.

Qu'est-ce qui se passe, et puis-je supprimer cet avertissement ?

2voto

WatsMyName Points 2560

ESSAYER

Modèle

function get_schedule($Student_ID)
{
    $query = $this -> db -> query("
        getstuff");

    if($query -> num_rows() > 0 )
        {
         $sections= $query->result();       
         return $sections;
         }

    else     
         {          
        return false;
         }
}

Contrôleur :

$this->load->model("Model_name");
$var=$this->Model_name->get_schedule($Student_ID);
if ($var)
 {
  foreach($var as $row)
 {
  do stuff:
 }
}

EDITAR:

Veillez à modifier Model_name à la vôtre et à l'interrogation dans votre modèle

2voto

Bhuvan Rikka Points 2511

Il ne s'agit pas d'une "section", mais d'un nom qui doit rester le même. $query['sections']

Essayez ceci

 $Student_ID = $session_data['Student_ID'];
 $query['sections']=  $this->grades_model->get_schedule($Student_ID);

 if ($query['sections'] == false)
 {
  echo "error";
 }
 else
 {
  foreach($query['sections'] as $row)
  {
   do stuff:
  }
 }

2voto

Cette ligne if ($query == TRUE) n'a pas beaucoup de sens, essayez de vérifier le contenu comme :

if (isset($query['section']) && count($query['section']) > 0) {
    foreach ($query['section'] as $row) {
        // do stuff:
    }
}

1voto

Gautam3164 Points 17766

Essayez comme ceci

foreach($query as $row)
 {
     do stuff:
 }

Si votre $query est un tableau, je pense que la fonction modèle renvoie un tableau dans votre cas.

et vous avez également commis une erreur à

foreach($query['sections'] as $row)     //you did it 'section' try change it
{
    do stuff:
}

accepter la réponse si elle est utile

0voto

Shayan Husaini Points 2698

Vous vous trompez $this->db->query() est utilisé pour les requêtes SQL. Vous pouvez utiliser $this->db->query('select * from getstuff'); o $this->db->get('getstuff');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X