#6356: helper + isset bug line: 588
----------------------------------------+-----------------------------------
    Reporter:  m                        |         Owner:           
        Type:  Bug                      |        Status:  new      
    Priority:  Medium                   |     Milestone:  1.2.x.x  
   Component:  View                     |       Version:  1.2 Final
    Severity:  Normal                   |    Resolution:           
    Keywords:  helper formhelper isset  |   Php_version:  PHP 5    
Cake_version:  1.2.2.8120               |  
----------------------------------------+-----------------------------------
Old description:

> cakephp 1.2, php5,
> My code before:
>       echo $form->create(null, array('url' => '/TheController/index',
> 'type' => 'file'));
>       echo $form->input('name');
>       echo $form->end();
>
> Output:
> Fatal error: Cannot use string offset as an array in
> /my_path_to_cake/cake/libs/view/helper.php on line 588
>
> My digression:
> In google:
> http://bugs.php.net/bug.php?id=32621
> So it is not bug in php:
> The code
> isset($arr['a]['b]) couses fatal error, when $arr['a'] does not exist.
>
> What i did:
> From: /cake/libs/view/helper.php lines 579-591
>                 if (isset($this->data[$fieldName]) && $modelName ===
> null) {
>                         $result = $this->data[$fieldName];
>                 } elseif (isset($this->data[$modelName][$fieldName])) {
>                         $result = $this->data[$modelName][$fieldName];
>                 } elseif (isset($this->data[$fieldName]) &&
> is_array($this->data[$fieldName])) {
>                         if (ClassRegistry::isKeySet($fieldName)) {
>                                 $model =&
> ClassRegistry::getObject($fieldName);
>                                 $result =
> $this->__selectedArray($this->data[$fieldName], $model->primaryKey);
>                         }
>                 } elseif
> (isset($this->data[$modelName][$modelID][$fieldName])) {
>                         $result =
> $this->data[$modelName][$modelID][$fieldName];
>                 }
>
> To:
>         if (isset($this->data[$fieldName]) && $modelName === null) {
>             $result = $this->data[$fieldName];
>         } elseif
> (isset($this->data[$modelName])&&isset($this->data[$modelName][$fieldName]))
> {
>             $result = $this->data[$modelName][$fieldName];
>         } elseif (isset($this->data[$fieldName]) &&
> is_array($this->data[$fieldName])) {
>             if (ClassRegistry::isKeySet($fieldName)) {
>                 $model =& ClassRegistry::getObject($fieldName);
>                 $result = $this->__selectedArray($this->data[$fieldName],
> $model->primaryKey);
>             }
>         } elseif (isset($this->data[$modelName])&&
>                   isset($this->data[$modelName][$modelID]) &&
>                   isset($this->data[$modelName][$modelID][$fieldName]))
>         {
>             $result = $this->data[$modelName][$modelID][$fieldName];
>         }
>
> Result: Everything works fine,
> regards,
> m

New description:

 cakephp 1.2, php5,
 My code before:
 {{{
       echo $form->create(null, array('url' => '/TheController/index',
 'type' => 'file'));
       echo $form->input('name');
       echo $form->end();
 }}}
 Output:
 Fatal error: Cannot use string offset as an array in
 /my_path_to_cake/cake/libs/view/helper.php on line 588

 My digression:
 In google:
 http://bugs.php.net/bug.php?id=32621
 So it is not bug in php:
 The code
 isset($arr['a]['b]) couses fatal error, when $arr['a'] does not exist.

 What i did:
 {{{
 From: /cake/libs/view/helper.php lines 579-591
                 if (isset($this->data[$fieldName]) && $modelName === null)
 {
                         $result = $this->data[$fieldName];
                 } elseif (isset($this->data[$modelName][$fieldName])) {
                         $result = $this->data[$modelName][$fieldName];
                 } elseif (isset($this->data[$fieldName]) &&
 is_array($this->data[$fieldName])) {
                         if (ClassRegistry::isKeySet($fieldName)) {
                                 $model =&
 ClassRegistry::getObject($fieldName);
                                 $result =
 $this->__selectedArray($this->data[$fieldName], $model->primaryKey);
                         }
                 } elseif
 (isset($this->data[$modelName][$modelID][$fieldName])) {
                         $result =
 $this->data[$modelName][$modelID][$fieldName];
                 }
 }}}
 To:
 {{{
         if (isset($this->data[$fieldName]) && $modelName === null) {
             $result = $this->data[$fieldName];
         } elseif
 (isset($this->data[$modelName])&&isset($this->data[$modelName][$fieldName]))
 {
             $result = $this->data[$modelName][$fieldName];
         } elseif (isset($this->data[$fieldName]) &&
 is_array($this->data[$fieldName])) {
             if (ClassRegistry::isKeySet($fieldName)) {
                 $model =& ClassRegistry::getObject($fieldName);
                 $result = $this->__selectedArray($this->data[$fieldName],
 $model->primaryKey);
             }
         } elseif (isset($this->data[$modelName])&&
                   isset($this->data[$modelName][$modelID]) &&
                   isset($this->data[$modelName][$modelID][$fieldName]))
         {
             $result = $this->data[$modelName][$modelID][$fieldName];
         }
 }}}
 Result: Everything works fine,
 regards,
 m

Comment (by mark_story):

 Making code readable.

-- 
Ticket URL: <https://trac.cakephp.org/ticket/6356#comment:1>
CakePHP : The Rapid Development Framework for PHP <https://trac.cakephp.org/>
Cake is a rapid development framework for PHP which uses commonly known design 
patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. 
Our primary goal is to provide a structured framework that enables PHP users at 
all levels to rapidly develop robust web applications, without any loss to 
flexibility.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"tickets cakephp" group.
To post to this group, send email to tickets-cakephp@googlegroups.com
To unsubscribe from this group, send email to 
tickets-cakephp+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/tickets-cakephp?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to