[RESOLU] Problème de tableau ARRAY avec PDO Mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème de tableau ARRAY avec PDO Mysql

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 30 janv. 2014, 17:30

C'est bon j'ai résolu le problème, quand j'ai crée mes pages j'ai crée celle ci comme si j'utilisais ma fonction à un niveau supérieur, hors je n'en ai pas puisque j'appel ma fonction à un seul niveau
il n'empêche que j'avais plein d'incohérence et que tu m'a bien mis sur la voie, je t'en remercie xTG .

je vais mettre le code complet pour que quelqu'un qui pourrait en avoir besoins puisse trouver son bonheur, sur le net je n'ai pas encore vu de démonstration de menu dynamique DPO MySQL
$query = 'SELECT 
            id,mn_parent,bouton,type
        FROM 
            source_menu 
        ORDER BY 
            id, bouton';
	
$prep = $db->prepare($query);
$prep->execute();

    $pageData = array( 
        'page' => array(), 
        'pageparent' => array() 
    ); 

while($row=$prep->fetch(PDO::FETCH_ASSOC))
{    
	$pageData[$row['type']]['page'][$row['id']] = $row; 	
	$pageData[$row['type']]['page'][$row['bouton']] = $row['bouton']; 	
	$pageData[$row['type']]['pageparent'][$row['mn_parent']][] = $row['id'];
}

			 
function buildMenuPage($menu,$parentId, $pageData, $niveau) 
    { 
        $niveau++;
        $html = ''; 
		echo 'le menu est de niveau '. $niveau;
		
		$tableau = $pageData[$menu]['pageparent'][$parentId];

        if(isset($tableau)) 
        { 
            $html = "<ul class=\"s$niveau\">\n";
				foreach($tableau as $itemId) 
				{ 
				   $html .= '<li><a href="page.php?idpage='.$pageData[$menu]['page'][$itemId]['id'].'" > '. $pageData[$menu]['page'][$itemId]['bouton'].'</a>'; 
				   $html .= buildMenuPage($menu,$itemId, $pageData, $niveau); 
				   $html .= "</li>\n"; 
				} 
              	   $html .= "</ul>\n"; 
        } 
        return $html ;
    }

echo buildMenuPage(0,0, $pageData, 0) ;

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 30 janv. 2014, 17:03

J'ai réglé mon problème d'affichage de la page dans le menu
	$pageData[$row['type']]['page'][$row['id']] = $row; 	
	$pageData[$row['type']]['page'][$row['bouton']] = $row['bouton']; 	
	$pageData[$row['type']]['pageparent'][$row['mn_parent']][] = $row['id'];
Il ne me reste plus qu'à comprendre pourquoi foreach ne fait pas son boulot $itemId

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 30 janv. 2014, 16:52

Je t'ai tout montré
je viens de modifier le code pour utiliser FETCH_ASSOC , idem pour la construction de mon tableau
	$pageData[$row['type']]['page'][$row['id']] = $row; 	
	$pageData[$row['type']]['pageparent'][$row['mn_parent']][] = $row->id;

Du coup il y a des améliorations et l'erreur à disparue; mais alors pourquoi OBJ ne passait il pas c'est vraiment étrange ?
$query = 'SELECT 
            id,mn_parent,bouton,type
        FROM 
            source_menu 
        ORDER BY 
            id, bouton';
	
$prep = $db->prepare($query);
$prep->execute();

    $pageData = array( 
        'page' => array(), 
        'pageparent' => array() 
    ); 
	


while($row=$prep->fetch(PDO::FETCH_ASSOC))
{    
	
	$pageData[$row['type']]['page'][$row['id']] = $row; 	
	$pageData[$row['type']]['pageparent'][$row['mn_parent']][] = $row->id;
	

	
	var_dump($pageDate);
}

			 
function buildMenuPage($menu,$parentId, $pageData, $niveau) 
    { 
        $niveau++;
        $html = ''; 

        if(isset($pageData[$menu]['pageparent'][$parentId])) 
        { 
		
            $html = "<ul class=\"s$niveau\">\n";
			 
				foreach($pageData[$menu]['pageparent'][$parentId] as $itemId) 
				{ 
				echo '<br />Jusque ici tout va bien '.$menu.','.$itemId.','.$pageData.','.$niveau.'<br />';
				 
				   $html .= '<li> > <a href=\"/page.php?idpage='.$pageData[$menu]['page'][$itemId]['id']."\" > " . $pageData[$menu]['page'][$itemId]['bouton']."</a>"; 
				   $html .= buildMenuPage($menu,$itemId, $pageData, $niveau); 
				   $html .= "</li>\n"; 
				} 
			
              	   $html .= "</ul>\n"; 
        } 
        return $html ;
    }

echo buildMenuPage(0,0, $pageData, 0) ;

En revanche ma petite ligne de code ci-dessous m'a permit de voir qu'il y avait rien dans ma $itemId ?
echo '<br />Jusque ici tout va bien '.$menu.','.$itemId.','.$pageData.','.$niveau.'<br />';

Re: Problème de tableau ARRAY avec PDO Mysql

par xTG » 30 janv. 2014, 16:20

Fatal error: Cannot use object of type stdClass as array in
Montres nous la tête du contenu que tu veux faire passer dans le foreach.
je me suis dis que la structure de ma table devait peu être inadapté à PDO j'ai donc changé type en smallint(2) mais rien ne change
En PHP une entier fait jamais moins de 32bits, le seul impact de ta modif est donc en BDD.

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 30 janv. 2014, 15:27

Bon apparemment le problème de type était que je n'avais pas encore enregistré de menu de type 0 comme ma première fonction le demande, mais du coup on en reviens à la même erreur de départ.
Warning: Invalid argument supplied for foreach() in
je tourne en rond depuis hier c'est épuisant et illogique

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 30 janv. 2014, 14:36

je me suis dis que la structure de ma table devait peu être inadapté à PDO j'ai donc changé type en smallint(2) mais rien ne change

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 30 janv. 2014, 14:26

Effectivement j'ai mal conditionné ma variable tableau,
  if(!empty($pageData[$menu]['pageparent'][$parentId])) 
maintenant que le tableau passe il me dit
Fatal error: Cannot use object of type stdClass as array in
je ne vois pas pourquoi il refuse cette variable ?

voici le code mis à jour
$query = 'SELECT 
            id,mn_parent,bouton,type
        FROM 
            source_menu 
        ORDER BY 
            id, bouton';
	
$prep = $db->prepare($query);
$prep->execute();

    $pageData = array( 
        'page' => array(), 
        'pageparent' => array() 
    ); 
	

while($row=$prep->fetch(PDO::FETCH_OBJ))
{    
	
	echo $row->id .' parent '.$row->mn_parent . ' et type est = a '. $row->type .'<br />'  ;
	$TB_type = $row->type;
	$pageData[$row->type]['page'][$row->id] = $row; 	
    $pageData["$TB_type"]['pageparent'][$row->mn_parent][] = $row->id;
}

			 
function buildMenuPage($menu,$parentId, $pageData, $niveau) 
    { 
        $niveau++;
        $html = ''; 
        if(!empty($pageData[$menu]['pageparent'][$parentId])) 
        { 
		 	
            $html = "<ul class=\"s$niveau\">\n"; 
				
			  /*$tableau = $pageData[$menu]['pageparent'][0];
				var_dump($tableau);
				foreach ($tableau as $itemid)*/		
				foreach($pageData[$menu]['pageparent'][0] as $itemId) 
				{ 
			
				   $html .= "<li><a href=\"/page.php?idpage=".$pageData[$menu]['page'][$itemId]['id']."\" > " . $pageData[$menu]['page'][$itemId]['bouton']."</a>"; 
				   $html .= buildMenuPage($menu,$itemId, $pageData, $niveau); 
				   $html .= "</li>\n"; 
				} 
			
              	   $html .= "</ul>\n"; 
        } 
        return $html ;
    }

echo buildMenuPage(1,0, $pageData,0) ;

Re: Problème de tableau ARRAY avec PDO Mysql

par xTG » 29 janv. 2014, 21:22

Relis mon message...
Comment veux-tu faire un foreach sur une variable vide ?

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 29 janv. 2014, 20:27

avec le code suivant j'obtiens
$query = 'SELECT 
            id,mn_parent,bouton,type
        FROM 
            source_menu 
        ORDER BY 
            id, bouton';
	
$prep = $db->prepare($query);
$prep->execute();

    $pageData = array( 
        'page' => array(), 
        'pageparent' => array() 
    ); 
	

while($row=$prep->fetch(PDO::FETCH_OBJ))
{    
$pageData[$row->type]['page'][$row->id] = $row; 	
$pageData[$row->type]['pageparent'][$row->mn_parent][] = $row->id;
var_dump($pageData);
}
			 
function buildMenuPage($menu,$parentId, $pageData, $niveau) 
    { 
        $niveau++;
        $html = ''; 
		
        if(empty($pageData[$menu]['pageparent'][$parentId])) 
        { 
            $html = "<ul class=\"s$niveau\">\n"; 
				
			$tableau = $pageData[$menu]['pageparent'][$parentId];
			var_dump($tableau);   
		
			foreach ($tableau as $itemid)
//foreach($pageData[$menu]['pageparent'][$parentId] as $itemId ) 
	{ 		   
               $html .= "<li><a href=\"/page.php?idpage=".$pageData[$menu]['page'][$itemId]['id']."\" > " . $pageData[$menu]['page'][$itemId]['bouton']."</a>"; 
               $html .= buildMenuPage($menu,$itemId, $pageData, $niveau); 
               $html .= "</li>\n"; 
        } 
			
               $html .= "</ul>\n"; 
        } 
        return $html ;
    }

echo buildMenuPage(1,0, $pageData, 0) ;

ce tableau
array(3) { ["page"]=> array(0) { } ["pageparent"]=> array(0) { } [0]=> array(2) { ["page"]=> array(1) { [2]=> object(stdClass)#3 (4) { ["id"]=> string(1) "2" ["mn_parent"]=> string(1) "1" ["bouton"]=> string(7) "accueil" ["type"]=> string(1) "0" } } ["pageparent"]=> array(1) { [1]=> array(1) { [0]=> string(1) "2" } } } } array(4) { ["page"]=> array(0) { } ["pageparent"]=> array(0) { } [0]=> array(2) { ["page"]=> array(1) { [2]=> object(stdClass)#3 (4) { ["id"]=> string(1) "2" ["mn_parent"]=> string(1) "1" ["bouton"]=> string(7) "accueil" ["type"]=> string(1) "0" } } ["pageparent"]=> array(1) { [1]=> array(1) { [0]=> string(1) "2" } } } [1]=> array(2) { ["page"]=> array(1) { [3]=> object(stdClass)#4 (4) { ["id"]=> string(1) "3" ["mn_parent"]=> string(1) "0" ["bouton"]=> string(10) "espace dog" ["type"]=> string(1) "1" } } ["pageparent"]=> array(1) { [0]=> array(1) { [0]=> string(1) "3" } } } }
je ne vois que ca qui m'intrigue dans mon tableau
object(stdClass)#3

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 29 janv. 2014, 20:09

Bonsoir,

J'obtiens l'erreur suivante
NULL Warning: Invalid argument supplied for foreach()

Re: Problème de tableau ARRAY avec PDO Mysql

par sirakawa » 29 janv. 2014, 18:05

foreach ($pageData[$menu]['parents'][$parentId] as $itemId)
remplacer par:
$tableau = $pageData[$menu]['parents'][$parentId];
var_dump($tableau);
foreach ($tableau as $itemid)
//etc 
permetttrait d'y voir plus clair

Re: Problème de tableau ARRAY avec PDO Mysql

par xTG » 29 janv. 2014, 14:34

Trouvé...
if (empty($pageData[$menu]['parents'][$parentId])) 
S'il est vide il est normal de ne rien pouvoir en faire.
La condition que tu souhaitais mettre en place est donc l'inverse. ;)

Re: Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 29 janv. 2014, 13:36

Oui c'est bon je confire il existe

Re: Problème de tableau ARRAY avec PDO Mysql

par xTG » 29 janv. 2014, 08:30

Et est-ce que le parentId 0 existe...

Problème de tableau ARRAY avec PDO Mysql

par dogmongo » 28 janv. 2014, 22:57

Bonjour,

Dans la suite logique de mon adaptation à PDO, je ne parviens pas à résoudre un problème de tableau

il s'agit d'une table de page et la fonction de mon code me crée un menu html multidimensionnel qui fonctionnais très bien jusque la, seulement malgré tout mes tests il me crée une erreur pas logique

Code : Tout sélectionner

Warning: Invalid argument supplied for foreach() in
la ligne qui crée l'erreur est le foreach
 foreach ($pageData[$menu]['parents'][$parentId] as $itemId) 
il me dis que le tableau n'existe pas; hors il existe bien et les variable sont bien crée

$query = 'SELECT 
            id,mn_parent,bouton,type
        FROM 
            source_menu 
        ORDER BY 
            id, bouton';
	
$prep = $db->prepare($query);
$prep->execute();

    $pageData = array( 
        'page' => array(), 
        'pageparent' => array() 
    ); 

while($row=$prep->fetch(PDO::FETCH_ASSOC))
{    
    $pageData[$row->type]['page'][$row->id] = $row; 	
    $pageData[$row->type]['parents'][$row->mn_parent][] = $row->id;

}

    
function buildMenuPage($menu,$parentId, $pageData, $niveau) 
    { 
        $niveau++;
        $html = ''; 
		
        if (empty($pageData[$menu]['parents'][$parentId])) 
        { 
            $html = "<ul class=\"s$niveau\">\n"; 
            
			echo 'menu = '. $menu .' <br/>niveau = '.$niveau ;
            
			foreach ($pageData[$menu]['parents'][$parentId] as $itemId) 
            { 
			   echo '$itemId est '. $itemId .' <br/>';
			   
               $html .= "<li><a href=\"/page.php?idpage=".$pageData[$menu]['page'][$itemId]['id']."\" > " . $pageData[$menu]['page'][$itemId]['bouton']."</a>"; 
               $html .= buildMenuPage($menu,$itemId, $pageData, $niveau); 
               $html .= "</li>\n"; 
            } 
			
               $html .= "</ul>\n"; 
        } 
        return $html ;
    }

echo buildMenuPage(1,0, $pageData, 0) ;

je suis certain que l'erreur brûle les yeux mais je ne la vois pas
merci de votre aide