首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过AJAX将序列化数据从单选按钮的形式添加到wp数据库

通过AJAX将序列化数据从单选按钮的形式添加到wp数据库
EN

Stack Overflow用户
提问于 2018-06-09 05:05:19
回答 1查看 20关注 0票数 0

我有一个wordpress帖子,它显示了一个由几首列出的歌曲组成的表单,每首歌都有两个单选按钮(“播放”和“不播放”)。

我想将这些单选按钮的数据作为2组序列化数据存储在我的数据库中,也就是说,如果选中了“播放”单选按钮

1:do_play =歌曲名称1 2:do_play =歌曲名称2 3:do_play =歌曲名称3 4:do_play =歌曲名称4 5:do_play =歌曲名称5

a:5:{i:0;s:11:"Song name 1";i:1;s:11:"Song name 2";i:2;s:11:"Song name 3";i:3;s:11:"Song name 4";i:4;s:11:"Song name 5";}

对于从“不播放”中选择的歌曲,相同,但在不同的DB行中:

1:do_play =歌曲名称6 2:do_play =歌曲名称7 3:do_play =歌曲名称8 4:do_play =歌曲名称9 5:do_play =歌曲名称10

a:5:{i:0;s:11:"Song name 6";i:1;s:11:"Song name 7";i:2;s:11:"Song name 8";i:3;s:11:"Song name 9";i:4;s:11:"Song name 10";}

我想通过AJAX完成这项工作,并将条目添加到wp_postmeta表中。下面是我的表单html的一个示例:

<form id="songChoices-12028" method="POST">
        <input type="hidden" id="booking_id" name="booking_id" value="12028">
        <ul class="setlist_container">


            <li class="song_entry ">Ain’t No Sunshine - 
                <em>Bill Withers</em>
                <br>

                    <input type="radio" id="doPlay" name="songChoice-397">
                    <label for="doPlay">Do</label>
                    <input type="radio" id="dontPlay" name="songChoice-397">
                    <label for="dontPlay">Don't</label>
                    <a href="#" id="clear-button">Clear</a>
            </li>

            <li class="song_entry ">No Diggity - 
                <em>Blackstreet</em>
                <br>

                    <input type="radio" id="doPlay" name="songChoice-12036">
                    <label for="doPlay">Do</label>
                    <input type="radio" id="dontPlay" name="songChoice-12036">
                    <label for="dontPlay">Don't</label>
                    <a href="#" id="clear-button">Clear</a>
            </li>

            <li class="song_entry 7-8-piece drinks-reception">Pricetag - 
                <em>Jessie J</em>
                <br>

                    <input type="radio" id="doPlay" name="songChoice-12038">
                    <label for="doPlay">Do</label>
                    <input type="radio" id="dontPlay" name="songChoice-12038">
                    <label for="dontPlay">Don't</label>
                    <a href="#" id="clear-button">Clear</a>
            </li>

            <li class="song_entry 4-5-piece">Rehab - 
                <em>Amy Winehouse</em>
                <br>

                    <input type="radio" id="doPlay" name="songChoice-12039">
                    <label for="doPlay">Do</label>
                    <input type="radio" id="dontPlay" name="songChoice-12039">
                    <label for="dontPlay">Don't</label>
                    <a href="#" id="clear-button">Clear</a>
            </li>

            <li class="song_entry 4-5-piece">Rolling in the Deep - 
                <em>Adele</em>
                <br>

                    <input type="radio" id="doPlay" name="songChoice-12035">
                    <label for="doPlay">Do</label>
                    <input type="radio" id="dontPlay" name="songChoice-12035">
                    <label for="dontPlay">Don't</label>
                    <a href="#" id="clear-button">Clear</a>
            </li>

            <li class="song_entry 4-5-piece">Sittin’ on the Dock of the Bay - 
                <em>Otis Redding</em>
                <br>

                    <input type="radio" id="doPlay" name="songChoice-398">
                    <label for="doPlay">Do</label>
                    <input type="radio" id="dontPlay" name="songChoice-398">
                    <label for="dontPlay">Don't</label>
                    <a href="#" id="clear-button">Clear</a>
            </li>

            <li class="song_entry 4-5-piece">Summer of ’69 - 
                <em>Bryan Adams</em>
                <br>

                    <input type="radio" id="doPlay" name="songChoice-12037">
                    <label for="doPlay">Do</label>
                    <input type="radio" id="dontPlay" name="songChoice-12037">
                    <label for="dontPlay">Don't</label>
                    <a href="#" id="clear-button">Clear</a>
            </li>
                        </ul>
    </form>

然后在我的ajax JS文件中,我有:

var response;

// AJAX for song request details
$('form[id^="songChoice-"]').on('change', function(e) {

e.preventDefault();

$.post( update_user_info.ajaxurl, {
      action : 'update_user_setlist',
      nonce : update_user_info.nonce,
      post : $(this).serialize()
  },
  function(response) {
      console.log(response);
      responseSuccess(response);
  });

return false;

});

然后,最重要的是处理向DB发送数据的函数:

function updateSetlistInfo() {

    if(empty($_POST) || !isset($_POST)) {
        self::ajaxStatus('error', 'Nothing to update.');
    } else {
        $data = $_POST;

        $dataString = $data['post'];
        parse_str($dataString, $dataArray);

        $nonce = $data['nonce'];

        if(wp_verify_nonce($nonce, 'update_user_info') !== false) {

            $user_ID = get_current_user_id();
            $post_id = $dataArray['booking_id'];
            //$dataArray['user_addressLine1'] = isset($dataArray['user_addressLine1']) ? $dataArray['user_addressLine1'] : false;


            if($user_ID != NULL) {
                foreach($dataArray as $key=>$value) {

                $status = update_post_meta($post_id, $key, $value);

            }
                self::ajaxStatus('success', 'Meta fields updated.', $dataArray);

            } else {
                self::ajaxStatus('error', 'You are unauthorized to perform this action.', $dataArray);
            }
        } else {
            self::ajaxStatus('error', 'Nonce check cannot fail.');
        }
    }
}

上面的内容取自我的页面上的另一个表单,该表单通过ajax将用户地址详细信息提交到数据库。但是,这只是为每个表单项添加一个新行-我想要有两行,"do_play“和"dont_play”,并在其中构建一个序列化数据数组。在这一点上,任何建议都将是一个很大的帮助,因为我有点卡住了

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档