[development] problem with PHP 5 and node_load
Scott McLewin
drupal at mclewin.com
Sat Sep 30 22:17:48 UTC 2006
Peter,
I encountered a similar problem when changing over to php5. I don't
know that this was the only answer or even the best answer, but I
changed that line to read:
$node = node_load(array('nid' => $form_values['nid']));
And my problems of duplicated data went away. Looking into node_load I
never quite understood why this fixed it (and have remained suspicious
that it did not).
I've seen variations that name the key 'vid' rather than 'nid', which I
think handles loading up the correct revision when multiple-revisions of
a node are kept (a feature I don't use).
I am answering in part because I'd like to have the experts on the list
tear my answer apart so that I can be more confident on whether my 'fix'
was actually the right approach.
Scott
Peter Wolanin wrote:
> Since my Mac laptop died last weekend, I've been using a linux machine
> as my localhost for testing. I noticed some very strange behavior
> testing a new feature for my recently-created volunteer_timeslots
> module:
>
> An aspect of this module is that the node view includes two forms. I
> was appending each form to the node body in hook_view as I generated
> it. Both forms have $node->nid as a value in the form and have submit
> functions like:
>
> $node = node_load($form_values['nid']);
> ...change the node's volunteer data...
> $node->revision = TRUE;
> node_save($node);
>
> Under PHP 4 (my Mac, or linux shared host), submitting the second form
> on the page works fine.
>
> Under PHP 5, submitting the second form on the page causes the saved
> node body to have the contents of the first form appended to it! So,
> my conclusion is that the object returned from node_load is not the
> same during all stages of the page view. I'd attribute this somehow
> to PHP 5's behavior where all objects are passed by reference.
>
> I can avoid the problem by storing the two forms in a tempory variable
> and then appending both to the node body at the end of hook_view,
> rather than appending each form to the node body as it's generated.
>
> Is this a bug? Am I wrong to expect node_load($nid) to always return
> the same thing?
>
> If this is a bug, maybe node_load needs to store/return a clone of the
> node object?
>
> -Peter
--
*Scott McLewin*
www.folkjam.org
find jams. post jams. play well with others.
<http://www.folkjam.org>
More information about the development
mailing list