Bonjour à tous,
Je suis en train de développer une classe pour gérer les menus, tout avec PDO.
Bref quand je lance ma fonction create_menu('0') depuis mon objet.
J'ai dès la première recursivité de mon code, une erreur de ce type
Voici mon code
SI vous avez une idée, je suis preneur !
Merci d'avance
Et pour excuter ce code :
Le problème vient clairement de la fonction create_menu mais je vois pas pourquoi, dès lors qu'il y a récursivité, cela ne marche plus (sauf la première execution et non les executions de recursivité)
Modifié par neopheus (08 Jul 2011 - 00:15)
Je suis en train de développer une classe pour gérer les menus, tout avec PDO.
Bref quand je lance ma fonction create_menu('0') depuis mon objet.
J'ai dès la première recursivité de mon code, une erreur de ce type
Fatal error: Call to a member function fetch() on a non-object in class menu.php on line 98
Voici mon code
SI vous avez une idée, je suis preneur !
Merci d'avance
<?php
class Menu {
public $db; // base de données - class d'abstraction PDO
public $table; // table contenant les informations du menu
function __construct($z_table,$z_db){
$this->db = $z_db;
$this->table = $z_table;
}
/**
* Menu::get_title()
*
* @param mixed $id
* @return - string - donne le title pour $id
**/
function get_title($id){
$title = $this->db->query("SELECT title FROM $this->table
WHERE id = '$id'");
$result = $title->fetch(PDO::FETCH_BOTH);
return $result[0];
}
/**
* Menu::get_parentID()
*
* @param mixed $id
* @return - string - donne le parentID pour $id
**/
function get_parentID($id){
$parentID = $this->db->query("SELECT parentID FROM $this->table
WHERE id = '$id'");
$result = $parentID->fetch(PDO::FETCH_BOTH);
return $result[0];
}
/**
* Menu::create_node()
*
* @param mixed $title
* @param mixed $position
* @param mixed $parentID
* @return
**/
function create_node($title,$position,$parentID){
$this->db->query("INSERT INTO $this->table(title,position,parentID)
VALUES ('$title','$position','$parentID')");
}
/**
* Menu::delete_node()
*
* @param mixed $id
* @return
**/
function delete_node($id){
$this->db->query("DELETE FROM $this->table WHERE id = '$id'");
}
/**
* Menu::update_node()
*
* @param mixed $id
* @param mixed $title
* @param mixed $position
* @param mixed $parentID
* @return
**/
function update_node($id,$title,$position,$parentID){
$this->db->query("UPDATE $this->table SET
title = '$title',
position = '$position',
parentID = '$parentID'
WHERE id = '$id';");
}
function create_menu($parentID){
global $i;
global $req;
if ($parentID == 0) {$i=0;}
$i = $i + 1 ;
$req = $this->db->query("SELECT * FROM $this->table
WHERE parentID = '$parentID'");
print "<ul id=\"menu\">\n";
while($myrow = $req->fetch()) {
print '<li><a href="'.$myrow['id'].'">'.$myrow['title'].'</a>';
$this->create_menu($myrow['id']);
print "</li>\n";
}
print "</ul>\n";
}
}
?>
Et pour excuter ce code :
<?php
// paramètres de connexion
$dsn = 'mysql:host=localhost;dbname=mabase';
$user = 'utilisateur';
$password = 'motsdepasse';
$db = new PDO($dsn, $user, $password);
$menu = new Menu('matable', $db);
$menu->create_menu('0');
?>
Le problème vient clairement de la fonction create_menu mais je vois pas pourquoi, dès lors qu'il y a récursivité, cela ne marche plus (sauf la première execution et non les executions de recursivité)
Modifié par neopheus (08 Jul 2011 - 00:15)