[PHP]Invalid argument supplied for foreach()
Résolu/Fermé
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
-
15 mai 2008 à 12:29
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 19 mai 2008 à 09:56
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 19 mai 2008 à 09:56
A voir également:
- Invalid argument supplied for foreach() in php
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Download instagram for pc - Télécharger - Divers Communication
- Saveaspdf.exe for office 2007 - Télécharger - Bureautique
- Idm for mac - Télécharger - Téléchargement & Transfert
4 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
16 mai 2008 à 11:56
16 mai 2008 à 11:56
Salut,
En fait je n'arrive pas du tout à faire le lien entre tes deux pages.
Comment tu appel le deuxième script ? Car dans le formulaire des checkbox je vois que ca rappelle la même page, or si c'est la même page qui est rappelée, comment la page du deuxième script est-elle appelée, et à quel moment précisément, peux-tu expliquer à nouveau ?
En fait je n'arrive pas du tout à faire le lien entre tes deux pages.
Comment tu appel le deuxième script ? Car dans le formulaire des checkbox je vois que ca rappelle la même page, or si c'est la même page qui est rappelée, comment la page du deuxième script est-elle appelée, et à quel moment précisément, peux-tu expliquer à nouveau ?
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
16 mai 2008 à 13:07
16 mai 2008 à 13:07
Ok mais je ne vois toujours pas comment tu passe de la première page (ou tu as tes checkbox) à la page 2.
Dans ta première page tu as ton seul et unique formulaire que voici :
La page qui est chargée lors du submit est la même page ($_SERVER[PHP_SELF]), et il n'y a pas de fonction de validation avec un 'onsubmit="..."'.
Pour ce qui est du bouton de submit du formulaire :
Aucune fonction n'est déclenchée lorsque l'on clique dessus, ce qui veut donc dire : pas de fonction de validation.
Donc, quand tu parle de : 'quand je clique sur une checkbox puis sur un bouton', ca t'emmène sur une seconde page.
Quel est ce fameux bouton dont tu parle ?
Apparemment ce n'est pas non plus les liens qui vont avec les checkbox puisque là aussi la référence porte sur la même page :
Je suis désolé je n'arrive pas trop à comprendre le mécanisme que tu as utilisé, ce qui me bloque pour essayer de résoudre ton problème ^^
Dans ta première page tu as ton seul et unique formulaire que voici :
<form method=POST action='$_SERVER[PHP_SELF]' name=form_superviseur id=form_superviseur >
La page qui est chargée lors du submit est la même page ($_SERVER[PHP_SELF]), et il n'y a pas de fonction de validation avec un 'onsubmit="..."'.
Pour ce qui est du bouton de submit du formulaire :
<input type=submit value='Reporting'>
Aucune fonction n'est déclenchée lorsque l'on clique dessus, ce qui veut donc dire : pas de fonction de validation.
Donc, quand tu parle de : 'quand je clique sur une checkbox puis sur un bouton', ca t'emmène sur une seconde page.
Quel est ce fameux bouton dont tu parle ?
Apparemment ce n'est pas non plus les liens qui vont avec les checkbox puisque là aussi la référence porte sur la même page :
href='$PHP_SELF?Action=tch&Etape=reporting&prj_id=$r[prj_id]'
Je suis désolé je n'arrive pas trop à comprendre le mécanisme que tu as utilisé, ce qui me bloque pour essayer de résoudre ton problème ^^
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
9
16 mai 2008 à 13:52
16 mai 2008 à 13:52
ok ok.
Donc j'ai plusieurs projets avec une checkbox à coté de chacun des projets et cette checkbox à pour valeur l'id du projet.
Ces projets sont soient sous forme de lien(si on ne sélectionne qu'un seul projet et cela nous emmène sur une page spécifique).Soit l'utilisateur clique sur plusieurs cases à cochées et appuies sur le bouton qui emmène sur la page qui nous interesse.
Voici le code du formulaire avec le bouton. Le Action et le Etape me permettent d'aller à la page du formulaire.
Voilà. J'espère que c'est de plus en plus clair.
Donc j'ai plusieurs projets avec une checkbox à coté de chacun des projets et cette checkbox à pour valeur l'id du projet.
Ces projets sont soient sous forme de lien(si on ne sélectionne qu'un seul projet et cela nous emmène sur une page spécifique).Soit l'utilisateur clique sur plusieurs cases à cochées et appuies sur le bouton qui emmène sur la page qui nous interesse.
Voici le code du formulaire avec le bouton. Le Action et le Etape me permettent d'aller à la page du formulaire.
$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>
Voilà. J'espère que c'est de plus en plus clair.
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
9
>
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
16 mai 2008 à 16:36
16 mai 2008 à 16:36
en fait je pense que ce qu'il faut que je fasse c'est récupérer mes cases à cocher dans un input hidden.
Mais je sais pas trop comment faire. Un petit coup de main?
Mais je sais pas trop comment faire. Un petit coup de main?
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
>
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
16 mai 2008 à 17:35
16 mai 2008 à 17:35
L'input caché n'y changera rien je pense.
Je n'arrive toujours pas à comprendre comment fonctionne ton truc. Je crois que tu utilise une façon de faire que je ne connais pas donc je ne vais pas pouvoir t'aider plus ^^
Désolé, en espérant qu'une autre personne vole à ton secours.
Je n'arrive toujours pas à comprendre comment fonctionne ton truc. Je crois que tu utilise une façon de faire que je ne connais pas donc je ne vais pas pouvoir t'aider plus ^^
Désolé, en espérant qu'une autre personne vole à ton secours.
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
9
>
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
18 mai 2008 à 20:35
18 mai 2008 à 20:35
salut,
ben je peux essayé de te réexpliqué alors, ou on peut faire à ta facon.
Donc j'ai une page avec 2 fonctions : ces 2 fonctions correspondent chacunes à une page de mon module. J'ai une première fonction qui m'amène vers la page des cases à cochées dont le code est fourni précédemment. Quand l'utilisateur a cliqué sur une ou plusieurs case, il valide donc le formulaire et sa l'amène vers une autre page qui correspond à ma deuxième fonction. C'est à dire la créatiion d'autant de formulaire que de case cochées et dont les infos de chaque formulaire correspond à chaque valeur de case à cochées.
Bon jusque là pas de problème.
J'arrive à l'étape de validation de mes formulaires, j'en valide qu'un à la fois, mais à la validation je lui demande d'exécuter la fonction de validation et de revenir ensuite à ma page avec mes différents formulaires pour qu'il valident ceux restants. Comme celà cela lui évite de revenir à chaque fois coché une case.
Mais donc le problème c'est qu'il ne reconnait pas que c'est un tableau vu qu'il n'y a plus de valeurs. Donc à la recréation du formualire il me met une erreur. C'est pour celà que j'avais pensé à un input pour qu'il me garde les différentes valeurs de mes cases à cochées.
Voilà. Je pense que je t'ai vraiment vraiment tout dit.Donc si tu pense pouvoir m'aider , n'hésite pas. En tout cas merci à toi pour ton courage à essayer de me comprendre.
ben je peux essayé de te réexpliqué alors, ou on peut faire à ta facon.
Donc j'ai une page avec 2 fonctions : ces 2 fonctions correspondent chacunes à une page de mon module. J'ai une première fonction qui m'amène vers la page des cases à cochées dont le code est fourni précédemment. Quand l'utilisateur a cliqué sur une ou plusieurs case, il valide donc le formulaire et sa l'amène vers une autre page qui correspond à ma deuxième fonction. C'est à dire la créatiion d'autant de formulaire que de case cochées et dont les infos de chaque formulaire correspond à chaque valeur de case à cochées.
Bon jusque là pas de problème.
J'arrive à l'étape de validation de mes formulaires, j'en valide qu'un à la fois, mais à la validation je lui demande d'exécuter la fonction de validation et de revenir ensuite à ma page avec mes différents formulaires pour qu'il valident ceux restants. Comme celà cela lui évite de revenir à chaque fois coché une case.
Mais donc le problème c'est qu'il ne reconnait pas que c'est un tableau vu qu'il n'y a plus de valeurs. Donc à la recréation du formualire il me met une erreur. C'est pour celà que j'avais pensé à un input pour qu'il me garde les différentes valeurs de mes cases à cochées.
Voilà. Je pense que je t'ai vraiment vraiment tout dit.Donc si tu pense pouvoir m'aider , n'hésite pas. En tout cas merci à toi pour ton courage à essayer de me comprendre.
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
9
>
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
19 mai 2008 à 09:56
19 mai 2008 à 09:56
Bon ben finalement j'ai trouvé :
$tableau=$_REQUEST['coche'];
if (!is_array($tableau))
{
$tableau = array(1=>$_REQUEST['ma_chaine']);
}
$ma_chaine=implode("|",$tableau);
$array_recu=explode("|",$ma_chaine);
while(list($k,$v)=each($array_recu))
{
.......
<input type=hidden name=ma_chaine value=$ma_chaine>
}
Encore merci à toi pour t'être penché sur mon problème.
$tableau=$_REQUEST['coche'];
if (!is_array($tableau))
{
$tableau = array(1=>$_REQUEST['ma_chaine']);
}
$ma_chaine=implode("|",$tableau);
$array_recu=explode("|",$ma_chaine);
while(list($k,$v)=each($array_recu))
{
.......
<input type=hidden name=ma_chaine value=$ma_chaine>
}
Encore merci à toi pour t'être penché sur mon problème.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
15 mai 2008 à 13:30
15 mai 2008 à 13:30
Bonjour,
Serait-il possible que tu poste le code de ton formulaire (comprenant les checkbox), ainsi que tout code s'y rattachant (javascript par exemple), ainsi que le code entier du script PHP de traitement (là où tu as la ligne que tu as donné ci-dessus)
Avec ces informations en plus nous devrions être en mesure de pouvoir te répondre :)
Serait-il possible que tu poste le code de ton formulaire (comprenant les checkbox), ainsi que tout code s'y rattachant (javascript par exemple), ainsi que le code entier du script PHP de traitement (là où tu as la ligne que tu as donné ci-dessus)
Avec ces informations en plus nous devrions être en mesure de pouvoir te répondre :)
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
9
15 mai 2008 à 14:03
15 mai 2008 à 14:03
salut,
voici la page avec mes checkbox
et voici la page avec le formulaire :
Pour infos:
j'envoie le formulaire des checkbox avec étape = multiple qui correspond à la fonction avec mon formulaire.
j'envoie le formulaire(celui du foreach) avec étape = validerSuiviDeveloppeur qui correspond à une fonction de validation qui me ramène ensuite à ce formulaire. etape = validerSuiviDeveloppeur correpond donc à valider().tachReportingMultiple($_REQUEST[prj_id])
voici la page avec mes checkbox
$sql = " select distinct prj_id,concat(k2people.rs,'› ') as label1 ,prj_nom as label2 ,'',prj_status"; $sql .= " from k2prjproject left join k2people on prj_kid = kid"; $sql .= " left join k2prjwork on prj_id = wrk_prj_id"; $sql .= " where 1"; $sql .= " and prj_status != 'ferme'"; $sql .= " order by prj_status,k2people.rs,prj_nom,wrk_date DESC" ; $sql .= " limit 0, 10"; $q = dbiQuery($sql); if (! $q ) DbError($sql); $html .= <<<END <form method=POST action='$_SERVER[PHP_SELF]' name=form_superviseur id=form_superviseur > <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)) { //$b = "<a href='$PHP_SELF?Action=tch&Etape=reporting&prj_id=$r[prj_id]'>"."<b>".$r[label1] ." : ".$r[label2]."</b>"."<br />"."</a>"; //$html .= "<input type=checkbox name='coche[]' value=$r[prj_id]>$b<br />"; $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>
et voici la page avec le formulaire :
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 </td><td><b>$R[typ_label] : $R[prj_nom]</b></td></tr> <tr><td>Client </td><td><b>$cli_rs : $R[cli_prenom] $cli_nom</b></td></tr> <tr><td>Durée </td><td>$barre</td></tr> <tr><td>email </td><td><b><a href="mailto:$R[cli_email]">$R[cli_email]</a></b></td></tr> <tr><td>Tel </td><td><b>$R[cli_tel]</b></td></tr> <tr><td>Fax </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 estimé :</td><td><b>$time_estime2</b></td> </tr><tr> <td width=30%>Temps travaillé :</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;
Pour infos:
j'envoie le formulaire des checkbox avec étape = multiple qui correspond à la fonction avec mon formulaire.
j'envoie le formulaire(celui du foreach) avec étape = validerSuiviDeveloppeur qui correspond à une fonction de validation qui me ramène ensuite à ce formulaire. etape = validerSuiviDeveloppeur correpond donc à valider().tachReportingMultiple($_REQUEST[prj_id])
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
15 mai 2008 à 23:25
15 mai 2008 à 23:25
Re,
1°) Je ne sais pas si tu as mis vraiment tout ton code pour la deuxieme partie car je vois que tu ouvres un bloc foreach :
Mais je ne vois nul part où il soit fermé.
2°) dans la première page, je ne suis pas sur que ça change quelque chose, personnellement pour les checkbox je ne met jamais le nom sous forme de tableau :
mais simplement comme un nom :
Surtout que tu fais bien $_REQUEST["coche"] dans la seconde page. Si tu change ça ne fonctionne pas mieux ?
1°) Je ne sais pas si tu as mis vraiment tout ton code pour la deuxieme partie car je vois que tu ouvres un bloc foreach :
foreach($_REQUEST['coche'] as $key =>$prj_id) {
Mais je ne vois nul part où il soit fermé.
2°) dans la première page, je ne suis pas sur que ça change quelque chose, personnellement pour les checkbox je ne met jamais le nom sous forme de tableau :
<input type=checkbox name='coche[]'
mais simplement comme un nom :
<input type=checkbox name='coche'
Surtout que tu fais bien $_REQUEST["coche"] dans la seconde page. Si tu change ça ne fonctionne pas mieux ?
kifouillou
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
9
16 mai 2008 à 08:49
16 mai 2008 à 08:49
salut,
non c'est pas mieux.
Pour le foreach je le ferme bien. J'ai fais un test en fait et c'est mon tableau qui est vide au rechargement. Alors je ne sais pas comment lui faire reprendre les valeurs qu'il avait.
non c'est pas mieux.
Pour le foreach je le ferme bien. J'ai fais un test en fait et c'est mon tableau qui est vide au rechargement. Alors je ne sais pas comment lui faire reprendre les valeurs qu'il avait.
16 mai 2008 à 12:06
bien sur que je peux réexpliquer.
1) Dans une page j'ai des boutons radio pour chaque projet.
2) Lorsque je coche une ou plusieurs cases et que j'appuie sur un bouton, cela m'envoie vers une autre page avec formulaire qui contient toutes les infos concernant chaque case cochée.
3)Je veux valider la modification des infos d'un projet donc j'appuie sur le bouton valider qui m'exécute la fonction de validation et revient ensuite sur la page avec les formulaires correspondant à chaque case(enfin c'est ce que j'aimerais car il revien bien à la page mais sans formulaire).
Voilà. J'espère que c'est un peu plus clair.