Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Drupal question - using drupal_execute for multivalue fields?

Posted on 2011-02-22
2
483 Views
Last Modified: 2012-05-11
I'm using drupal_execute to save a node programmatically, and for the most part, it works fine, except when it comes to a multi-value field.  

What gets posted is this (I'm just including the portion that isn't working):

 
    [alt] => Array
            (
                [0] => Array
                    (
                        [name] => Sam I. Am
                        [phone] => (650) 5553131
                    )
    
                [1] => Array
                    (
                        [name] => The Lorax
                        [phone] => 6505553344
                    )
    
                [2] => Array
                    (
                        [name] => 
                        [phone] => 
                    )
    
            )

Open in new window

When I'm setting the $form_state['values'], I'm using:
    for($a = 0; $a < count($_REQUEST['alt']); $a++) {
    		$form_state['values']['field_alternativename'][$a]['value'] = check_plain($_REQUEST['alt'][$a]['name']);
    		$form_state['values']['field_alternativephone'][$a]['value'] = format_phone($_REQUEST['alt'][$a]['phone']);
    	}

Open in new window

And to save the node:

    drupal_execute('info_node_form', $form_state, $node);

Open in new window


As a test, to make sure that I'm referencing the appropriate fields, I edited an existing node using node/X/edit and printed out the $form_state['values'] upon submission.  This is what it printed out:
    //output of print '<pre>'; print_r($form_state['values']); print '</pre>';
        [field_alternativename] => Array
            (
                [0] => Array
                    (
                        [value] => Sam I. Am
                        [_error_element] => group_alternative_contacts][0][field_alternativename][value
                        [_weight] => 0
                        [_remove] => 0
                    )
    
                [1] => Array
                    (
                        [value] => The Lorax
                        [_error_element] => group_alternative_contacts][1][field_alternativename][value
                        [_weight] => 1
                        [_remove] => 0
                    )
    
            )
    
        [field_alternativephone] => Array
            (
                [0] => Array
                    (
                        [value] => (650) 5553131
                        [_error_element] => group_alternative_contacts][0][field_alternativephone][value
                        [_weight] => 0
                        [_remove] => 0
                    )
    
                [1] => Array
                    (
                        [value] => (650) 5553344
                        [_error_element] => group_alternative_contacts][1][field_alternativephone][value
                        [_weight] => 1
                        [_remove] => 0
                    )
    
            )

Open in new window

So, I'm not understanding why it isn't being saved... I'm not setting the delta, but I didn't think I'd have to?  In mysql, the data is stored as:

    mysql> select * from content_field_alternativename ;
    +-------+-------+-------+-----------------------------+
    | vid   | nid   | delta | field_alternativename_value |
    +-------+-------+-------+-----------------------------+
    | 22433 | 22433 |     0 | Sam I. Am                   |
    +-------+-------+-------+-----------------------------+
    
    mysql> select * from content_field_alternativephone;
    +-------+-------+-------+------------------------------+
    | vid   | nid   | delta | field_alternativephone_value |
    +-------+-------+-------+------------------------------+
    | 22433 | 22433 |     0 | (650) 5553131                |
    +-------+-------+-------+------------------------------+

Open in new window

0
Comment
Question by:n00b0101
2 Comments
 
LVL 17

Accepted Solution

by:
Dushan De Silva earned 500 total points
ID: 34958030
Hi n00b0101,
I'm actually not a Drupal guy. Sometimes you may need to change the array index value.
   
       for($a = 0; $a < count($_REQUEST['alt']); $a++) {
                $form_state['values']['field_alternativename'][$a]['name'] = check_plain($_REQUEST['alt'][$a]['name']);
                $form_state['values']['field_alternativephone'][$a]['phone'] = format_phone($_REQUEST['alt'][$a]['phone']);
          }
0
 

Author Closing Comment

by:n00b0101
ID: 35380606
Not the solution, but thanks for trying.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article discusses four methods for overlaying images in a container on a web page
This article discusses how to create an extensible mechanism for linked drop downs.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The purpose of this video is to demonstrate how to set up the WordPress backend so that each page automatically generates a Mailchimp signup form in the sidebar. This will be demonstrated using a Windows 8 PC. Tools Used are Photoshop, Awesome…

792 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question