[wp-hackers] array_push on update_user_meta
J.D. Grimes
jdg at codesymphony.co
Thu Oct 31 21:16:13 UTC 2013
Could you post your code again? Somewhere you are still getting the value wrapped in an extra array.
On Oct 31, 2013, at 5:08 PM, Gregory Lancaster <greglancaster71 at gmail.com> wrote:
> No I must have screwed something up man, it only shows the last value. I
> searched for awhile before responding here, and I see some people say
> in_array adds a line between items and sometimes other folks needed to
> strip those. But I have no idea if thats whats going on here. It all
> looks like it should function. :-/ Maybe I need to get off the computer
> for awhile.
>
> I var_dump using the function you shared, and this is what the friend array
> looks like from there:
>
> array(2) {\n [0]=>\n array(2) {\n [0]=>\n array(2) {\n [0]=>\n
> array(2) {\n [0]=>\n array(2) {\n [0]=>\n
> array(1) {\n [0]=>\n string(1) "1"\n }\n
> [1]=>\n string(1) "9"\n }\n [1]=>\n
> string(2) "13"\n }\n [1]=>\n string(2) "16"\n }\n
> [1]=>\n string(2) "13"\n }\n [1]=>\n string(1) "3"\n}\n
>
> I dont know if that assists in debugging.
>
>
>
> On Thu, Oct 31, 2013 at 1:52 PM, J.D. Grimes <jdg at codesymphony.co> wrote:
>
>> OK, you need to just delete that meta row and start over. It is messed up
>> from before. Do that and see if it works.
>>
>> On Oct 31, 2013, at 4:49 PM, Gregory Lancaster <greglancaster71 at gmail.com>
>> wrote:
>>
>>> I have it set to true:
>>>
>>> $active_user_friends = get_user_meta($active_user, 'friends', true);
>>> But the issue is that it only shows the "friended" code for the last
>> user I
>>> added. If I click add on one profile, and then to a second, the first no
>>> longer shows friend added. Even if I have clearly added several to the
>>> array:
>>>
>>>
>> a:2:{i:0;a:2:{i:0;a:2:{i:0;a:2:{i:0;a:2:{i:0;a:2:{i:0;s:0:"";i:1;s:2:"16";}i:1;s:2:"12";}i:1;s:2:"13";}i:1;s:2:"12";}i:1;s:1:"3";}i:1;s:2:"13";}
>>>
>>>
>>>
>>>
>>> On Thu, Oct 31, 2013 at 1:40 PM, J.D. Grimes <jdg at codesymphony.co>
>> wrote:
>>>
>>>> No, you don’t need to use unserialize, that is all done automatically by
>>>> the WordPress functions.
>>>>
>>>> In the code you posted you still aren’t calling get_user_meta() with the
>>>> third parameter set to true. You need to do that. Right now the array
>> it is
>>>> returning looks something like this:
>>>>
>>>> array(
>>>> 0 => array( 3, 45, 6, 33 )
>>>> )
>>>>
>>>> When you call in_array() it is checking if the user ID (say, 3 ) is in
>> the
>>>> outer array. But it isn’t, the only thing in it is another array. When
>> you
>>>> call get_user_meta() with the third parameter set to true, the returned
>>>> value won’t be wrapped in the outer array like that, so it will work.
>>>>
>>>>
>>>> On Oct 31, 2013, at 4:30 PM, Gregory Lancaster <
>> greglancaster71 at gmail.com>
>>>> wrote:
>>>>
>>>>> Ah I see. Thank you for explaining JD. It sounds like maybe the easier
>>>>> option is to just create a separate table to store the friends list in.
>>>>> Trying to work with user_meta this way seems like a bad idea.
>>>>>
>>>>> Quick question, should I be using unserialize to check the array values
>>>>> using in_array? Because right now this code isnt working. Thats the
>>>> only
>>>>> thing that seems to be left out - but when I tried using $unserialize
>>>> like
>>>>> this:
>>>>>
>>>>> $unserialize = unserialize($active_user_friends);
>>>>> if (in_array($author_id, $unserialize)) {
>>>>>
>>>>> it says this:
>>>>>
>>>>>
>>>>> *Warning*: unserialize() expects parameter 1 to be string, array given
>>>>> and
>>>>> *Warning*: in_array() expects parameter 2 to be array, boolean given
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --------
>>>>>
>>>>>
>>>>>
>>>>> add_action('wp_ajax_my_add_friend_action', 'my_add_friend_action');
>>>>> add_action('wp_ajax_nopriv_my_add_friend_action',
>>>> 'my_add_friend_action');
>>>>> function my_add_friend_action() {
>>>>> global $wpdb;
>>>>> $profileID = $_POST['profileID'];
>>>>> $userID = $_POST['userID'];
>>>>>
>>>>> $chkMetaValue = get_user_meta($userID,"friends");
>>>>> if ( ! is_array($chkMetaValue) )
>>>>> $chkMetaValue = array();
>>>>> $chkMetaValue[] = $profileID;
>>>>>
>>>>> // activity_tracker($current_user, 'added_friend', 'prof');
>>>>> update_user_meta( $userID, 'friends', $chkMetaValue );
>>>>> $response = array( 'success' => true );
>>>>> wp_send_json_success($response);
>>>>>
>>>>> die();
>>>>> }
>>>>>
>>>>>
>>>>> function friend_status($author_id) {
>>>>> global $wpdb, $current_user;
>>>>> get_currentuserinfo();
>>>>>
>>>>> //authorID is the userID of the profile owner
>>>>>
>>>>> $active_user = $current_user->ID;
>>>>> $active_user_friends = get_user_meta($active_user, 'friends');
>>>>>
>>>>> if (in_array($author_id, $active_user_friends, true)) {
>>>>> $friend_status = "<button id='remove_friend'>Remove Friend</button>";
>>>>> } else {
>>>>> $friend_status = "<button id='add_friend'>Add Friend</button>";
>>>>> }
>>>>>
>>>>> return $friend_status;
>>>>> }
>>>>>
>>>>>
>>>>> That is basically the code I am using to insert the users id into their
>>>>> user_meta table.
>>>>>
>>>>>
>>>>> On Thu, Oct 31, 2013 at 1:08 PM, J.D. Grimes <jdg at codesymphony.co>
>>>> wrote:
>>>>>
>>>>>> There are two ways to use the *_meta functions. The way it looks like
>>>> you
>>>>>> are doing it is that each user has a single entry in the usermeta
>> table,
>>>>>> with the key ‘friends’. The value for this meta key will be stored in
>>>> the
>>>>>> database as a serialized array, and when it is pulled out (by
>>>>>> get_user_meta()) it gets unserialized into a PHP array.
>>>>>>
>>>>>> Alternative is this: Each user has multiple ‘friend’ meta key rows in
>>>> the
>>>>>> usermeta table, each one’s meta_value the ID of a single user that the
>>>> user
>>>>>> has friended.
>>>>>>
>>>>>> The benefit of the second option is that the values may be easier to
>>>>>> search. Much easier. But that may not be important to you right now.
>>>> (But
>>>>>> then that could change later…) What if you want to show a list of
>> users
>>>> who
>>>>>> have friended a user? You will be able to do that easily with this.
>> With
>>>>>> the first option, it is possible, but more complex and probably harder
>>>> on
>>>>>> the DB.
>>>>>>
>>>>>> The downside is that there are many more rows in usermeta table.
>>>>>>
>>>>>> So each of these functions let you target a single row (as in first
>>>> case)
>>>>>> or all rows with a key (as in the later case). Whichever way you go,
>> you
>>>>>> just need to be consistent through all of the code, obviously.
>>>>>>
>>>>>> -J.D.
>>>>>>
>>>>>> On Oct 31, 2013, at 3:30 PM, Gregory Lancaster <
>>>> greglancaster71 at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> What would be the benefit of storing the friends in separate rows? I
>>>> did
>>>>>>> not know that was an option, but don't see any clear advantages
>> either.
>>>>>>> Also, I did just search the codex but dont see anything about unique
>>>>>> rows.
>>>>>>> (I checked get_user_meta, delete_user_meta, update_user_meta. )
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Oct 31, 2013 at 12:24 PM, J.D. Grimes <jdg at codesymphony.co>
>>>>>> wrote:
>>>>>>>
>>>>>>>> Yes, when you call get_user_meta() you need to set the third
>> parameter
>>>>>>>> ($single) to true:
>>>>>>>>
>>>>>>>> $active_user_friends = get_user_meta( $active_user, ‘friends’, true
>> );
>>>>>>>>
>>>>>>>> Otherwise it will return a nested array. Also, just FYI,
>> alternatively
>>>>>> you
>>>>>>>> could leave the get_user_meta() call the way it is, and change it so
>>>>>> that
>>>>>>>> each friend is stored in a separate meta row (but with the same meta
>>>>>> key -
>>>>>>>> have a look at the *_user_meta functions on the codex).
>>>>>>>>
>>>>>>>> -J.D.
>>>>>>>>
>>>>>>>> On Oct 31, 2013, at 3:14 PM, Gregory Lancaster <
>>>>>> greglancaster71 at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> I thought so. One more question if you dont mind helping;
>>>>>>>>>
>>>>>>>>> This is the function I wrote to determine what button to show on
>> page
>>>>>>>> load.
>>>>>>>>> But regardless if someone has been friended or not, it shows the
>> add
>>>>>>>>> friend option. Is something wrong with this?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> function friend_status($author_id) {
>>>>>>>>> global $wpdb, $current_user;
>>>>>>>>> get_currentuserinfo();
>>>>>>>>>
>>>>>>>>> //authorID is the userID of the profile owner
>>>>>>>>>
>>>>>>>>> $active_user = $current_user->ID;
>>>>>>>>> $active_user_friends = get_user_meta($active_user, 'friends');
>>>>>>>>>
>>>>>>>>> if (in_array($author_id, $active_user_friends)) {
>>>>>>>>> $friend_status = "<button id='remove_friend'>Remove
>> Friend</button>";
>>>>>>>>> } else {
>>>>>>>>> $friend_status = "<button id='add_friend'>Add Friend</button>";
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> return $friend_status;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> Then on page: echo $friend_status;
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Oct 31, 2013 at 11:53 AM, J.D. Grimes <jdg at codesymphony.co
>>>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Yes, I would write a separate function for removal, and hook it
>> to a
>>>>>>>>>> different AJAX action for removal.
>>>>>>>>>>
>>>>>>>>>> On Oct 31, 2013, at 2:48 PM, Gregory Lancaster <
>>>>>>>> greglancaster71 at gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> That works easier :) Once someone is friended I have it set so
>> an
>>>>>>>>>> unfriend
>>>>>>>>>>> button replaces the add friend button via ajax. Is it necessary
>> to
>>>>>>>> write
>>>>>>>>>>> another function for deleting a person? Not sure exactly how to
>>>> make
>>>>>>>> the
>>>>>>>>>>> new button function since the data being sent is not attached to
>>>> the
>>>>>>>>>> button
>>>>>>>>>>> in any way. maybe I could add a value to the button that says
>>>> remove
>>>>>>>> or
>>>>>>>>>>> add, which would be passed to the function and determine what
>>>> action
>>>>>> to
>>>>>>>>>>> take?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Oct 31, 2013 at 11:32 AM, J.D. Grimes <
>> jdg at codesymphony.co
>>>>>
>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I would do this:
>>>>>>>>>>>>
>>>>>>>>>>>> $profileID = $_POST['profileID'];
>>>>>>>>>>>>
>>>>>>>>>>>> $chkMetaValue = get_user_meta($userID,"friends");
>>>>>>>>>>>>
>>>>>>>>>>>> if ( ! is_array($chkMetaValue) )
>>>>>>>>>>>> $chkMetaValue = array();
>>>>>>>>>>>>
>>>>>>>>>>>> $chkMetaValue[] = $profileID; // or use array_push()
>>>>>>>>>>>>
>>>>>>>>>>>> update_user_meta( $userID, 'friends', $chkMetaValue );
>>>>>>>>>>>>
>>>>>>>>>>>> -J.D.
>>>>>>>>>>>>
>>>>>>>>>>>> On Oct 31, 2013, at 1:32 PM, BenderisGreat <
>>>>>> greglancaster71 at gmail.com
>>>>>>>>>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> I am not sure exactly how this would work because I start with
>> an
>>>>>>>> empty
>>>>>>>>>>>>> meta_value field. I dont think I can use array_push if there
>> is
>>>>>> not
>>>>>>>> at
>>>>>>>>>>>>> least one value in the field, correct?
>>>>>>>>>>>>>
>>>>>>>>>>>>> So maybe something like this:
>>>>>>>>>>>>>
>>>>>>>>>>>>> $profileID = $_POST['profileID'];
>>>>>>>>>>>>>
>>>>>>>>>>>>> $chkMetaValue = get_user_meta($userID,"friends");
>>>>>>>>>>>>> if (!empty($chkMetaValue))
>>>>>>>>>>>>> {
>>>>>>>>>>>>> array_push($profileID);
>>>>>>>>>>>>> } else {
>>>>>>>>>>>>> $profileID;
>>>>>>>>>>>>> }
>>>>>>>>>>>>>
>>>>>>>>>>>>> update_user_meta( $userID, 'friends', $chkMetaValue );
>>>>>>>>>>>>>
>>>>>>>>>>>>> Is that right?
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> View this message in context:
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> http://wordpress-hackers.1065353.n5.nabble.com/array-push-on-update-user-meta-tp42688.html
>>>>>>>>>>>>> Sent from the Wordpress Hackers mailing list archive at
>>>> Nabble.com.
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> wp-hackers mailing list
>>>>>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> wp-hackers mailing list
>>>>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> wp-hackers mailing list
>>>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> wp-hackers mailing list
>>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> wp-hackers mailing list
>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> wp-hackers mailing list
>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> wp-hackers mailing list
>>>>>>> wp-hackers at lists.automattic.com
>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>
>>>>>> _______________________________________________
>>>>>> wp-hackers mailing list
>>>>>> wp-hackers at lists.automattic.com
>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>
>>>>> _______________________________________________
>>>>> wp-hackers mailing list
>>>>> wp-hackers at lists.automattic.com
>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>
>>>> _______________________________________________
>>>> wp-hackers mailing list
>>>> wp-hackers at lists.automattic.com
>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>
>>> _______________________________________________
>>> wp-hackers mailing list
>>> wp-hackers at lists.automattic.com
>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
More information about the wp-hackers
mailing list