Résolution de l'erreur d'accès à la propriété non-objet en PHP
Le message d'erreur "Avis : tentative d'obtention de la propriété d'un non-objet" généralement se produit lors de la tentative d'accès aux propriétés d'un objet qui n'a pas été correctement initialisé ou qui n'existe pas. Dans le code fourni, cette erreur survient en raison d'un problème avec la fonction mysql_fetch_object().
La fonction mysql_fetch_object() récupère une seule ligne d'un ensemble de résultats en tant qu'objet. Dans votre page de contrôle, vous utilisez correctement cette fonction pour récupérer un seul enregistrement de menu latéral :
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = mysql_fetch_object($results);
Cependant, dans votre page d'affichage, vous essayez de parcourir la variable $sidemenus comme s'il s'agissait d'un tableau d'objets :
foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
Cette hypothèse est incorrecte car mysql_fetch_object() renvoie un objet, pas un tableau d'objets. Pour résoudre ce problème, vous avez deux options :
1. Utilisez une boucle while :
Vous pouvez utiliser une boucle while pour parcourir l'ensemble de résultats et récupérer chaque enregistrement du menu latéral en tant qu'objet :
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = array(); while ($sidemenu = mysql_fetch_object($results)) { $sidemenus[] = $sidemenu; } foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
Cette approche crée un tableau de objets du menu latéral, vous permettant de les parcourir selon vos besoins.
2. Utiliser PDO (préféré) :
PDO est une couche d'abstraction de base de données plus moderne et recommandée qui offre une sécurité et une flexibilité améliorées. À l'aide de PDO, vous pouvez récupérer des données sous forme d'objets à l'aide de la méthode fetchAll(PDO::FETCH_OBJ). Voici comment procéder :
$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id`=? ORDER BY `id` ASC LIMIT 1"); $stmt->execute(array($menu)); $sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ); foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!