IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Invalid argument supplied for foreach()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut [Tableaux] Invalid argument supplied for foreach()
    Bonjour,


    J'ai un petit problème avec un foreach.
    j'affiche une page avec toutes les infos relatives aux différents projets qui ont été coché sur une page précédente. Donc j'ai besoin d'un foreach pour chaque case cochée. Tout cela fonctionne à merveille. Mais lorsque je modifie des infos et que j'appuie sur un bouton qui m'enregistre les infos et réaffiche la page ben là j'ai un beau :

    Warning: Invalid argument supplied for foreach() in /k/i/httpd/developpement/k2/mod-k2-tache.php on line 1313

    ma ligne 1313 c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    foreach($_REQUEST['coche'] as $key =>$prj_id)


    Si vous avez une petite idée.
    Merci d'avance.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    Bonjour,

    Typiquement cette erreur arrive quand la variable passée au foreach est vide.
    Peut être au rechargement le request n'existe plus, auquel cas un simple test préalable sur celui-ci suffirait.

  3. #3
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut
    Ah mon avis le test préalable serait la solution à mon problème. Mais je ne vois pas comment faire pour que si c'est vide le request se recharge.

    Merci de t'être penché dessus.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    C'est un peu juste niveau info pour t'aider d'avantage. Peut etre que tes cases à cocher non sont pas rerenseignées au rafraichissement, et donc tu perds l'info dans le request (une case à cocher non cochée ne renvoie aucune information lors de l'envoi du formulaire).

    Pour confirmer cette hypothèse j'ai bien peur d'avoir besoin d'un peu plus de code

  5. #5
    Membre éclairé Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Par défaut
    ben voici le code pour afficher les cases à cochées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $html .= <<<END
    <form method=POST action='$_SERVER[PHP_SELF]' name=form_projet id=form_projet >
                    <input type=hidden name=Action value="tch">
                    <input type=hidden name=Etape value="multiple">
                    <input type=hidden name=prj_id value="$r[prj_id]">
        
    END;
     
    	while ( $r = dbiFetch($q))
    	{ 
    	$html .="<input type=checkbox name='coche[]' value='$r[prj_id]' >"."<a href='$PHP_SELF?Action=tch&Etape=reporting&prj_id=$r[prj_id]'>"."<b>".($r['label1'].$r['label2'])."</b>"."</a>"."<br />";
    	}
     
    $html .= <<<END
     
           <br />
           <input type=submit value='Reporting'>
    	   </form>
    Voici le code de la page de mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    function tachReportingMultiple($prj_id)
    {
    foreach($_REQUEST['coche'] as $key =>$prj_id)    
    { 
    $sql  = " select k2people.kid as kid,k2prjproject.*,date_format(prj_debut,'%d/%m/%Y') as prj_debut,date_format(prj_fin,'%d/%m/%Y') as prj_fin,k2prjtypeproject.*,k2people.rs as cli_rs, k2people.nom as cli_nom, k2people.prenom as cli_prenom, k2people.email as cli_email, k2people.tel as cli_tel, k2people.fax as cli_fax";
    	$sql .= " from (k2prjproject left join k2people on prj_kid = k2people.kid) left join k2prjtypeproject on prj_typ_id = typ_id";	
    	$sql .= " where prj_id = '$prj_id'"; 
    	$q = dbiQuery($sql);
        if (! $q ) DbError($sql);
        $R = dbiFetch($q);
     
    $tab_html .= <<< END
     
     <table cellpadding=0 cellspacing=0 width=100%>
     <tr>
        <td valign=top class=BG5 width=35%>
          <u><b>Projet</b></u><br><br>
          <table cellpadding=0 cellspacing=0 >
            <tr><td>Projet &nbsp; </td><td><b>$R[typ_label] : $R[prj_nom]</b></td></tr>
            <tr><td>Client &nbsp;</td><td><b>$cli_rs : $R[cli_prenom] $cli_nom</b></td></tr>
            <tr><td>Durée &nbsp; </td><td>$barre</td></tr>
            <tr><td>email &nbsp;</td><td><b><a href="mailto:$R[cli_email]">$R[cli_email]</a></b></td></tr>
            <tr><td>Tel &nbsp;</td><td><b>$R[cli_tel]</b></td></tr>
            <tr><td>Fax &nbsp;</td><td><b>$R[cli_fax]</b></td></tr>
          </table>
        </td>
        <td valign=top class=BG3 width=65%>
        <u><b>Taches</b></u><br><br>
    END;
     
     
            $tab_html .= <<<END
          <table cellpadding=0 cellspacing=0 border=1 width=100% >
          <form method=post name=form_work$i id=form_work$i action='$_SERVER[PHP_SELF]'>
      
          <input type=hidden name=Action value="tch">
          <input type=hidden name=Etape value="validerSuiviDeveloppeur2">
          <input type=hidden name=prj_id value="$prj_id">
          <input type=hidden name=wrk_date$i value="$date_formate">
          <input type=hidden name=wrk_id$i  value="$R[wrk_id]">
          <input type=hidden name=wrk_usr_id$i value="$usr_id">
          <input type=hidden name=tache_id$i  value="$tache_id">
          
          
          <tr>
          <th colspan="3" rowspan="4" width=30%>Tache$i</th>
          <td width=30%>Temps&nbsp;estimé :</td><td><b>$time_estime2</b></td>
          </tr><tr>
          <td width=30%>Temps&nbsp;travaillé&nbsp; :</td><td><b>$time4</b></td>
          </tr><tr>
          <td width=30%>Etat :</td><td><b>$r4[tache_etat]</b></td>
          </tr><tr>
          <td>Auteur :</td><td><b>$r4[nick]</b></td>
          </tr> 
          <tr>
          <td colspan=5 class=BG5><input type=button value='reporting' onclick = "report('reporting$tache_id')"></td>
          </tr>
          <tr>
          <td  colspan=5>
          <div style=display:none id=reporting$tache_id width=100%>
               
          <textarea  name=wrk_com$i style='height:80px;width:100%'></textarea>
          Temps : <input name=wrk_time$i style='text-align:center;width:50px'><br>      
          Etat  :  $etat<br/><br />
          <input type=submit value='Valider'>
          </div>
          </td>
          </tr>     
          </tr>
          </form>
          </table>
    END;
    }
    }

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    J'avoue que l'enchaînement n'est pas très clair à mes yeux.
    Ceci dit si à un moment donné tu appelles à nouveau la génération de tes cases à cocher, à aucun moment n'y figure si celle-ci a été cochée précédemment, et donc tu perdras l'info dans ton request lors d'un second envoi.

    Je ne sais pas si je suis très clair

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Invalid argument supplied for foreach()
    Par babou54 dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2009, 18h15
  2. Warning: Invalid argument supplied for foreach()
    Par billyrose dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2009, 15h36
  3. [Tableaux] Invalid argument supplied for foreach
    Par Lionel57 dans le forum Langage
    Réponses: 1
    Dernier message: 20/12/2007, 13h15
  4. Invalid argument supplied for foreach()
    Par Rajhonson dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 14h31
  5. Réponses: 11
    Dernier message: 19/05/2006, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo