"Essayer d'obtenir la propriété d'un non-objet" - Comprendre le problème
L'erreur "Essayer d'obtenir la propriété d'un non-objet" se produit généralement lorsque vous tentez d'accéder à une propriété d'un objet qui n'existe pas. Dans votre cas, ce problème se pose dans le code ci-dessous :
<?php include 'pages/db.php'; $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = mysql_fetch_object($results); ?>
Lorsque vous exécutez ce code, le problème réside dans l'utilisation de mysql_fetch_object(). Cette fonction renvoie une représentation objet d'une seule ligne dans la table du menu latéral, mais vous essayez de la parcourir sous la forme d'un tableau d'objets dans votre page d'affichage :
<?php foreach ($sidemenus as $sidemenu): ?> <?php echo $sidemenu->mname."<br />"; ?> <?php endforeach; ?>
Résoudre le problème
Pour corriger cette erreur, vous devez récupérer toutes les lignes dont vous avez besoin dans la table et les stocker dans un tableau. Vous pouvez y parvenir en utilisant une boucle while pour parcourir les résultats et remplir un tableau avec les objets pertinents :
$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; }
En utilisant ce tableau d'objets dans votre page d'affichage, vous pouvez le parcourir et accéder les propriétés de chaque objet :
<?php foreach ($sidemenus as $sidemenu): ?> <?php echo $sidemenu->mname."<br />"; ?> <?php endforeach; ?>
Approche alternative avec PDO
Une autre option pour Pour gérer cette situation, il faut utiliser l'extension PDO de PHP, qui fournit une interaction de base de données plus moderne et orientée objet. En utilisant PDO, vous pouvez récupérer toutes les lignes de la table du menu latéral et les stocker dans un tableau comme suit :
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password'); $stmt = $pdo->prepare("SELECT * FROM sidemenu WHERE `menu_id`=:menu_id ORDER BY `id` ASC LIMIT 1"); $stmt->execute([':menu_id' => $menu]); $sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);
Dans ce code :
Vous pouvez ensuite utiliser ce tableau d'objets dans votre afficher la page, similaire à la méthode décrite précédemment.
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!