Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/05/2008, 13h21   #1
Membre du Club
 
Avatar de kifouillou
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 51
Points : 51
Envoyer un message via MSN à kifouillou
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 :
1
2
 
foreach($_REQUEST['coche'] as $key =>$prj_id)


Si vous avez une petite idée.
Merci d'avance.
kifouillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 14h04   #2
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
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.
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 14h13   #3
Membre du Club
 
Avatar de kifouillou
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 51
Points : 51
Envoyer un message via MSN à kifouillou
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.
kifouillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 14h53   #4
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
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
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 15h00   #5
Membre du Club
 
Avatar de kifouillou
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 51
Points : 51
Envoyer un message via MSN à kifouillou
ben voici le code pour afficher les cases à cochées :
Code :
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 :
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;
}
}
kifouillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 16h27   #6
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
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
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 16h32   #7
Membre du Club
 
Avatar de kifouillou
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 51
Points : 51
Envoyer un message via MSN à kifouillou
Ben à part dans mon foreach,

je ne m'occupe plus des cases à cochées dans la suite de la fonction. C'est donc surement pour cela qu'il me met un erreur.

Mais après je sais pas trop comment résoudre cela.
kifouillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 16h37   #8
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
Si ce n'est que ca, la méthode propre selon moi c'est un input hidden pour définir à quelle étape tu en es :

Code :
1
2
 
<input type='hidden' name='step' id='step' value='1'/>
Comme ca tu mets 1 au premier passage, 2 quand tu t'es occupé des cases à cocher, et tu fais un test de la valeur de $_REQUEST['step'] avant le foreach.

La méthode moins propre mais plus rapide, c'est de tester directement les cases :

Code :
1
2
3
4
5
6
7
 
if(count($_REQUEST['coche']) > 0 ) {
   foreach($_REQUEST['coche'] as $key =>$prj_id)    
   {
     //blablabla
   }
}
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 16h46   #9
Membre du Club
 
Avatar de kifouillou
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 51
Points : 51
Envoyer un message via MSN à kifouillou
Bon je n'ai plus l'erreur donc merci mais le problème c'est que mon tableau est vide.
je fais cela :
Code :
1
2
3
4
5
6
 
.....
foreach($_REQUEST['coche'] as $key =>$prj_id)    
{ 
echo $prj_id."<br>";
........
kifouillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 11h04   #10
Membre du Club
 
Avatar de kifouillou
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 51
Points : 51
Envoyer un message via MSN à kifouillou
au rechargement ma page est vide.donc le dilemme c'est comment remettre les même valeurs dans mon tableau coche à la validation ?
kifouillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 16h53   #11
Membre du Club
 
Avatar de kifouillou
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 51
Points : 51
Envoyer un message via MSN à kifouillou
Je pense pouvoir résoudre mon problème. Il faut que j'utilise un <input type=hidden> dans le formulaire que j'envoie. Puis je mets dans le value unevariable qui a implodé mon tableau. Mais après je ne sais pas trop. Voici mon code.
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$tableau = array();
$tableau=$_REQUEST['coche'];
$ma_chaine=implode("|",$tableau);
echo $ma_chaine;
$array_recu=explode("|",$ma_chaine);
while(list($k,$v)=each($array_recu)) 
{
formulaire
<input type=hidden name=ma_chaine value="$ma_chaine">
}
Bon maintenant il m'affiche cette erreur :
Code :
1
2
 
Bad arguments to implode() in /k/i/httpd/developpement/k2/mod-k2-tache.php on line 1319
qui correspond bien sur à la ligne de mon implode.
kifouillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h59.


 
 
 
 
Partenaires

Hébergement Web