Rechercher : dans
Par :

Invalid argument supplied for foreach()

Dernière réponse le 15 oct 2008 à 14:19:15 baabs12, le 14 oct 2008 à 18:07:58 
 Signaler ce message aux modérateurs

Bonjour,
j'ai ce message d'erreur lorsque je veux me connecter sur mon application:

"invalid argument supplied for foreach() in c:\program files\EasyPHP 2.0b1\www\bytesys\applications\bo\objects\p4a_base_application.php on line 40"



et voici le code:

<?php



class P4A_Base_Application extends p4a
{
var $user_data = array();

function P4A_Base_Application()
{
$this->p4a();
$this->openMask("p4a_login");

$access_levels =& $this->build("p4a_array_source","access_levels");
$a = array();
for($i=1;$i<=10;$i++) {
$a[]["value"] = $i;
}
$access_levels->load($a);
$access_levels->setPk("value");
}

function createMenu()
{
if ( isset($this->menu) AND is_object($this->menu)) {
$this->menu->destroy();
}
$menu =& $this->build("p4a_menu","menu");

$db =& P4A_DB::singleton();



// livello menu 1
$items1 = $db->queryAll("SELECT * FROM menu_bo
WHERE parent_id IS NULL
ORDER BY position, name
");

***** foreach ($items1 as $item) {
$parent_name = $item["name"];
$name = $item["name"];
$label = $item["label"];
$id = $item["id"];
$item_obj =& $menu->addItem($name);
$item_obj->setLabel($label);
if ($this->user_data['level'] < $item['access_level']
or $item['visible'] == FALSE) {
$item_obj->setVisible(FALSE);
}
if (strlen($item['action'])) {
$this->intercept($item_obj,'onClick',$item['action']);
}
// livello menu 2
$items2 = $db->queryAll("SELECT * FROM menu_bo
WHERE parent_id = ".$id."
ORDER BY position, name
");
foreach ($items2 as $item2) {
$parent_name2 = $item2["name"];
$name2 = $item2["name"];
$label2 = $item2["label"];
$id2 = $item2["id"];
$item_obj2 =& $menu->items->$parent_name->addItem($name2);
$item_obj2->setLabel($label2);
if ($this->user_data['level'] < $item2['access_level']
or $item2['visible'] == FALSE) {
$item_obj2->setVisible(FALSE);
}
if (strlen($item2['action'])) {
$this->intercept($item_obj2,'onClick',$item2['action']);
}
// livello menu 3
$items3 = $db->queryAll("SELECT * FROM menu_bo
WHERE parent_id = ".$id2."
ORDER BY position, name
");
foreach ($items3 as $item3) {
$parent_name3 = $item3["name"];
$name3 = $item3["name"];
$label3 = $item3["label"];
$id3 = $item3["id"];
$item_obj3 =& $menu->items->$parent_name->items->$parent_name2->addItem($name3);
$item_obj3->setLabel($label3);
if ($this->user_data['level'] < $item3['access_level']
or $item3['visible'] == FALSE) {
$item_obj3->setVisible(FALSE);
}
if (strlen($item3['action'])) {
$this->intercept($item_obj3,'onClick',$item3['action']);
}
// livello menu 4
$items4 = $db->queryAll("SELECT * FROM menu_bo
WHERE parent_id = ".$id3."
ORDER BY position, name
");
foreach ($items4 as $item4) {
$parent_name4 = $item4["name"];
$name4 = $item4["name"];
$label4 = $item4["label"];
$id4 = $item4["id"];
$item_obj4 =& $menu->items->$parent_name->items->$parent_name2->items->$parent_name3->addItem($name4);
$item_obj4->setLabel($label4);
if ($this->user_data['level'] < $item4['access_level']
or $item4['visible'] == FALSE) {
$item_obj4->setVisible(FALSE);
}
if (strlen($item4['action'])) {
$this->intercept($item_obj4,'onClick',$item4['action']);
}
// livello menu 5
$items5 = $db->queryAll("SELECT * FROM menu_bo
WHERE parent_id = ".$id4."
ORDER BY position, name
");
foreach ($items5 as $item5) {
$parent_name5 = $item5["name"];
$name5 = $item5["name"];
$label5 = $item5["label"];
$id5 = $item5["id"];
$item_obj5 =& $menu->items->$parent_name->items->$parent_name2->items->$parent_name3->items->$parent_name4->addItem($name5);
$item_obj5->setLabel($label5);
if ($this->user_data['level'] < $item5['access_level']
or $item5['visible'] == FALSE) {
$item_obj5->setVisible(FALSE);
}
if (strlen($item5['action'])) {
$this->intercept($item_obj5,'onClick',$item5['action']);
}
}
}
}
}
}
$menu->addItem("logout");
$this->intercept($menu->items->logout,"onClick","restart");
}

function openMask($name)
{
if (is_object($name)) {
parent::openMask($name->getName());
} else {
parent::openMask($name);
}
}
}
?>

Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « invalid argument supplied for foreach() » dans :
PhpMyAdmin - 1045- Access denied for user root@localhost VoirPhpMyAdmin - Access denied for user root’@localhost Cette astuce est destinée à ceux qui ont un problème d’ouverture de PhpMyAdmin (par exemple avec WAMP Server ou EasyPHP) avec l'erreur suivante : #1045- Access denied for user...
Duplicate entry '127' for key 1 VoirVous tentez de faire une insertion dans une table de votre base de données MySQL et vous obtenez l'erreur MySQL suivante: Duplicate entry '127' for key 1 Ceci provient très probablement du fait que la clé primaire de votre table est de type TINYINT...
Télécharger NTFS for Mac OS X VoirAccès total en lecture et en écriture vers des volumes NTFS NTFS for Mac® OS X fournit un accès total (lecture ou écriture, formatage) vers des partitions NTFS. Compatible avec toutes les versions de NTFS Toutes les versions NTFS sont prises en...

1

baabs12, le 14 oct 2008 à 18:13:51

Le probleme est que mon menu ne s'affiche pas. Merci pour tout ce que vous pourriez faire.

Répondre à baabs12

2

toto, le 14 oct 2008 à 23:06:27

Bonjour

D'après ton message, c'est la requête précédente ne rend pas un tableau.
La méthode queryAll est-elle censée rendre un tableau ? Rien ne permet de le savoir dans ce que tu donnes.
Si elle doit bien rendre un tableau, c'est alors que la requête s'est mal passée. Vu la simplicité de la requête, tu auras vite fait de vérifier les noms de la table et des champs.
Dernière possibilité que je vois : ne manque-t-il pas une instruction de connexion à la base de données ? Ou la connexion est-elle faite ailleurs ?

Répondre à toto

3

baabs12, le 15 oct 2008 à 11:26:40

Salut toto,
la connexion se fait ailleurs:

<php
define("P4A_EXTENDED_ERRORS", true);
//define("P4A_DSN", 'mysql://root:691005@localhost:3306/bswitch');
define("P4A_DSN", 'mssql://root:691005@JOB:1433/bswitch');


require_once( dirname(__FILE__) . '/../../p4a.php' );

$app =& p4a::singleton("p4a_base_application");
$app->main();

?>


Au niveau de la table tous les noms de champs que j'ai mentionné sont bons également.
Je devais avoir aussi un tableau avec la requête

Répondre à baabs12

4

toto, le 15 oct 2008 à 11:59:50

Je ne connais rien de ton p4a (ça ne fait pas partie du php standard) et le code que tu m'as montré ne me dit pas où tu te connectes à ta base.

Insère un print_r($items1); entre la requête et le foreach. On verra bien ce qu'il y a dans $items1

Répondre à toto

5

baabs12, le 15 oct 2008 à 13:03:34

Salut toto,
Au fait le p4a est lié à la platforme c'est juste question de sécurité. Et je me connecte effectivement à la base.

J'ai heureusement vu le problème, au niveau de SQL Server, il faut remplacer les types de données "text" par "nvarchar". C'est à cause des "OREDER BY" utilisés dans mes requêtes.

Encore une fois merci bcp.

Répondre à baabs12

6

 toto, le 15 oct 2008 à 14:19:15

De rien. Surtout qu'en fait, je n'ai pas trouvé grand chose...

Répondre à toto
Collection CommentÇaMarche.net