2011-01-08 2 views
0

Je suis nouveau sur ce site et l'apprentissage de PHP. J'utilise le texte Début PHP5 et MySQL E-Commerce De novice à professionnel par Darie et Bucica pour créer un site e-commerce. Je crois que certaines des erreurs que j'ai rencontrées jusqu'ici étaient dues à la base de données mise à jour (MDB2). J'ai réussi à surmonter toutes les erreurs sauf celle-ci. Le code est censé extraire la liste des services de ma base de données en utilisant Smarty. J'ai l'erreur "Essayer d'obtenir la propriété de non-objet" sur la dernière ligne. J'ai le sentiment que cela a à voir avec la fonction is_array().PHP et Smarty Erreur: Essayer d'obtenir la propriété de non-objet

<?php $_smarty_tpl->tpl_vars["load_departments_list"] = new Smarty_variable("departments_list", null, null);?> 
    <table border="0" cellpadding="0" cellspacing="1" width="200"> 
    <tr> 
     <td class="DepartmentListHead"> Choose a Sport </td> 
    </tr> 
    <tr> 
     <td class="DepartmentListContent"> 
     <?php unset($_smarty_tpl->tpl_vars['smarty']->value['section']['i']); 
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['name'] = 'i'; 
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['loop'] = is_array($_loop=$_smarty_tpl->getVariable('departments_list')->value->mDepartments) ? count($_loop) : max(0, (int)$_loop); unset($_loop); 

S'il y a quelque chose d'autre que vous avez besoin d'aider à répondre s'il vous plaît faites le moi savoir! Veuillez être aussi descriptif que possible et montrer la solution en utilisant mon code si possible. Merci de votre aide! -Tirez

+0

Ceci est le code d'un livre? 'unset ($ _ smarty_tpl-> tpl_vars ['smarty'] -> valeur ['section'] ['i']);' supprime la variable à laquelle vous essayez d'accéder dans les deux dernières lignes. – thetaiko

+0

Je pense que cette section est compilée à partir du fichier .tpl et pas directement dans le livre. Quoi qu'il en soit, il n'a pas été ajouté par moi personnellement. Merci d'avoir fait remarquer cela. Je vais jeter un coup d'oeil à ça! – DrewInPB

Répondre

3

Vous utilisez $_smarty_tpl->getVariable('departments_list')->value->mDepartments dans votre fonction in_array. Assurez-vous que vous avez affecté departments_list à un objet smarty.

OU ajoutez un chèque avant que

$departments_list = $_smarty_tpl->getVariable('departments_list'); 
if (is_object($departments_list) && is_object($departments_list->value) 
     && $departments_list->value->mDepartments) { 
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['loop'] = is_array($_loop=$_smarty_tpl->getVariable('departments_list')->value->mDepartments) ? count($_loop) : max(0, (int)$_loop); unset($_loop); 
} 
+0

Danke! Cela semble avoir fonctionné. Sur la prochaine erreur! Merci pour la réponse rapide! – DrewInPB

0

Essayez de vérifier chaque variable pour le type en utilisant var_dump():

var_dump($_smarty_tpl->getVariable('departments_list'), $_smarty_tpl->getVariable('departments_list'))->value, 
$_smarty_tpl->getVariable('departments_list'))->value->mDepartments); 

qui vous dira quelles valeurs type sont. Le problème ne réside pas vraiment dans la fonction is_array, mais dans le fait, avec $_smarty_tpl->getVariable('departments_list'))->value->mDepartments vous essayez d'accéder à la propriété d'objet dans deux cas, sur la valeur retournée de la méthode getVariable(), et getVariable()->value, donc l'un de ces deux vous pose problème.

+0

Merci! Je ne suis pas encore très familier avec cette commande! – DrewInPB