Comment corriger mon code pour afficher la liste des menus représentée par la variable $title=$node->getTitle()" ???

Eléphant du PHP | 137 Messages

16 août 2022, 19:16

Bonjour.
  • La ligne 83 de l'erreur que je reçois et que j'ai mise ci-dessous est du fichier UssdNode.php qui contient la déclaration de la variable $item=$items[$i]; dans la méthode recurseMenu ci-dessous.
  • La ligne 45 de la même erreur du fichier UssdTree.php contient la déclaration de la variable $node=$this->treeMenu[$name]; dans la méthode getNode ci-dessous.
  • La ligne 94 de la même erreur du fichier UssdNode.php contient la déclaration de la variable $title=$node->getTitle(); dans la méthode recurseMenu ci-dessous.

Ma méthode ou fonction recurseMenu (UssdNode.php) contient normalement la liste des menus (QUE JE CHERCHE A AFFICHER) contenue dans la variable $title=$node->getTitle();:

Code : Tout sélectionner

function recurseMenu($items,$bufferLimit) { $objectString="<strong>". $this->getTitle() . "</strong>" . PHP_EOL; $lastMenu=false; if(count($items)>0) { for($i=$this->index;$i<$bufferLimit;$i++){ $item=$items[$i]; /* echo "<pre>"; print_r($item); echo "</pre>"; */ $num=$i+1; //get node by name $userSessions=$_SESSION['userSessions']; $currUserSession=$userSessions[$this->address]; $node=$currUserSession->getNode($item); $title=$node->getTitle(); $objectString=$objectString . PHP_EOL .$num . '. ' .$title; } } else { $objectString=$objectString.PHP_EOL . 'NO DATA AVAILABLE, TRY AGAIN LATER'; } $lastMenu=$bufferLimit==count($items); $objectString=$objectString . PHP_EOL . PHP_EOL . "<strong>0. Exit</strong>"; if($this->getParent() != '0'){ $objectString=$objectString . PHP_EOL . "<strong>#. Back</strong>"; } if($lastMenu===false){ $rem=count($items)-$this->index; $objectString=$objectString . PHP_EOL . "<strong>99. Next (".$rem.")</strong>"; } return $objectString; }

Méthode [c]getNode[/c] du fichier UssdTree.php:

Code : Tout sélectionner

function getNode($name){ $node=$this->treeMenu[$name]; return $node; }
Le problème c'est que rien ne s'affiche.

Et quand j'essaie le debug de $this->recurseMenu($items,$bufferLimit) dans ma méthode (fonction) toString qui affiche la liste des $titles en chaînes de caractères:

Code : Tout sélectionner

function toString(){ $objectString=''; $items=$this->children; $bufferLimit=(count($items)==0)?1:$this->getBufferLimit()+1; echo "<pre>"; print_r($this->recurseMenu($items,$bufferLimit)); echo "</pre>"; do{ $bufferLimit-=1; $objectString=$this->recurseMenu($items,$bufferLimit); }while(strlen($objectString>160)); $this->index=$bufferLimit; return $objectString; }
Je reçois l'erreur suivante:

Code : Tout sélectionner

Notice: Undefined offset: 3 in C:\laragon\www\ussd\ussdmenu-server-php\UssdNode.php on line 83 Notice: Undefined index: in C:\laragon\www\ussd\ussdmenu-server-php\UssdTree.php on line 45 Fatal error: Uncaught Error: Call to a member function getTitle() on null in C:\laragon\www\ussd\ussdmenu-server-php\UssdNode.php:94 Stack trace: #0 C:\laragon\www\ussd\ussdmenu-server-php\UssdNode.php(59): UssdNode->recurseMenu(Array, 4) #1 C:\laragon\www\ussd\ussdmenu-server-php\UssdUserSession.php(77): UssdNode->toString() #2 C:\laragon\www\ussd\ussdmenu-server-php\UssdReceiver.php(51): UssdUserSession->fetchDisplay() #3 C:\laragon\www\ussd\ussdmenu-server-php\UssdReceiver.php(43): UssdReceiver->handleChildBearingNode('paybill', '0772247408', '1234567') #4 C:\laragon\www\ussd\ussdmenu-server-php\UssdReceiver.php(15): UssdReceiver->handleContinuingRequests('0772247408', '4', '1234567') #5 C:\laragon\www\ussd\receiver.php(28): UssdReceiver->onMessage(Array) #6 C:\laragon\www\ussd\receiver.php(36): MyUssdReceiver::process(Array) #7 {main} thrown in C:\laragon\www\ussd\ussdmenu-server-php\UssdNode.php on line 94 URL : http://localhost/ussd/receiver.php MSISDN :

Comment afficher correctement la liste des menus représentée par la variable $title=$node->getTitle(); dans la méthode recurseMenu ci-dessous ?

Aidez-moi à corriger cette erreur.

Mammouth du PHP | 1967 Messages

17 août 2022, 09:20

Pas très claire tout cela mais au vue de l'erreur, $node est null remonte la où tu défini $node et vois pourquoi il pourrait être null. Et ainsi de suite.

tu devrais comprendre pourquoi $items[$i] n'existe pas
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube