簡體   English   中英

如何使用$ _POST解碼php中隱藏字段中存儲的javascript json?

[英]How to decode javascript json stored in a hidden field in php using $_POST?

我將json值存儲在一個隱藏字段中,我想在$ _POST中的php中解碼json。 該值存儲在名為alldata的隱藏字段中,而我正在$ _POST ['alldata']中檢索,並且我正在此$ _POST ['alldata']變量上嘗試名為json_decode的php函數。 請告訴我如何解碼php中的json。 請幫我。 提前致謝。

HTML

<input type="hidden" name="alldata" id="alldata" value="{"email2":"nitinjohnson316@gmail.com","class_rate":"10.000","admin_rate":"20.000","late_charge":"10.000","final_data":[{"pre_assignment_id":"4","user_id":"2","session_id":"52","school":"Admin","day_of_week":"","start_date":"1970-01-01","end_date":"1970-01-01","expense_allowance_value":"0","hours_allowed":"5","event_id":"999999","event_title":"Admin","event_description":null,"event_category":"Admin","event_status":"Active","event_status_num":"5","event_timecard":"A","session_dayofweek":"","session_start_date":"0000-00-00","session_end_date":"0000-00-00","refresh_tmstp":"2015-10-10 18:02:35"},{"pre_assignment_id":"3","user_id":"2","session_id":"16","school":"Bethany Elementary","day_of_week":"Wed","start_date":"2015-09-09","end_date":"2015-12-12","expense_allowance_value":"5","hours_allowed":"0","event_id":"3481","event_title":"Fall 2015 - Bethany Elementary Chess Program - Plano ISD","event_description":null,"event_category":"Bethany Elementary","event_status":"Ongoing","event_status_num":"3","event_timecard":"C","session_dayofweek":"Wed","session_start_date":"2015-09-09","session_end_date":"2015-12-09","refresh_tmstp":"2015-10-10 18:02:35"},{"pre_assignment_id":"2","user_id":"2","session_id":"15","school":"Ashley Elementary","day_of_week":"Mon","start_date":"2015-09-14","end_date":"2015-12-12","expense_allowance_value":"15","hours_allowed":"0","event_id":"3511","event_title":"Fall 2015 - Ashley Elementary Chess Program - Frisco ISD","event_description":null,"event_category":"Ashley Elementary","event_status":"Ongoing","event_status_num":"3","event_timecard":"C","session_dayofweek":"Mon","session_start_date":"2015-09-14","session_end_date":"2015-12-07","refresh_tmstp":"2015-10-10 18:02:35"},{"pre_assignment_id":"1","user_id":"2","session_id":"14","school":"Anderson Elementary","day_of_week":"Mon","start_date":"2015-09-21","end_date":"2015-12-12","expense_allowance_value":"5","hours_allowed":"0","event_id":"3613","event_title":"Fall 2015 - Anderson Elementary Chess Program - Frisco ISD","event_description":null,"event_category":"Anderson Elementary","event_status":"Active Hidden","event_status_num":"2","event_timecard":"C","session_dayofweek":"Mon","session_start_date":"2015-09-21","session_end_date":"2015-12-07","refresh_tmstp":"2015-10-10 18:02:35"}]}">

使用Javascript

jQuery("#txtweek").change(function(){
        if(jQuery("select[name='txtuser'] option:selected").text()=='--select--'){          
            alert("Please select a user first to proceed");
            return false;
        } else {
            jQuery.ajax({
                url:ajaxurl,
                type:'post',
                data:{action:'timecardapp_manage_timecard_stepone',user_id: jQuery("#txtuser").val()},
                success: function(response){                            
                    var data=JSON.parse(response);
                    // i am adding json value to hidden field from here
                    jQuery("#alldata").val(JSON.stringify(data));                   
                    var currentweek = jQuery("#txtweek option:selected").text();
                    var days_date = new Array();
                    function pad(str) {
                      return ("0"+str).slice(-2);
                    }
                    function getNextDay(str) { 
                      var parts = str.split("-");
                      var mon_day = new Date(parts[2], parts[0] - 1, parseInt(parts[1], 10) + 0, 12, 0, 0, 0);
                      var tue_day = new Date(parts[2], parts[0] - 1, parseInt(parts[1], 10) + 1, 12, 0, 0, 0);
                      var wed_day = new Date(parts[2], parts[0] - 1, parseInt(parts[1], 10) + 2, 12, 0, 0, 0);
                      var thu_day = new Date(parts[2], parts[0] - 1, parseInt(parts[1], 10) + 3, 12, 0, 0, 0);
                      var fri_day = new Date(parts[2], parts[0] - 1, parseInt(parts[1], 10) + 4, 12, 0, 0, 0);
                      days_date[0] = ""+pad(mon_day.getMonth()+1)+"-"+ pad(mon_day.getDate())+"-"+mon_day.getFullYear();
                      days_date[1] = ""+pad(tue_day.getMonth()+1)+"-"+ pad(tue_day.getDate())+"-"+tue_day.getFullYear();
                      days_date[2] = ""+pad(wed_day.getMonth()+1)+"-"+ pad(wed_day.getDate())+"-"+wed_day.getFullYear();
                      days_date[3] = ""+pad(thu_day.getMonth()+1)+"-"+ pad(thu_day.getDate())+"-"+thu_day.getFullYear();
                      days_date[4] = ""+pad(fri_day.getMonth()+1)+"-"+ pad(fri_day.getDate())+"-"+fri_day.getFullYear();

                    }

                    var currentweek = jQuery("#txtweek option:selected").text(), // no values available
                    next_day = new Date(); // or some other default

                    if (currentweek && currentweek.indexOf("--") == -1) { // not the first
                      next_day=getNextDay(currentweek);
                    }

                    var trHTML = '';
                    var number_of_classes = 0;
                    var totalexpense = 0;
                    var totaladminhours = 0;

                    jQuery.each(data.final_data, function (i, item) {
                        if(item.event_title == 'Admin'){
                            //Monday
                            trHTML += '<tr>';
                            trHTML += '<td>'+item.event_title+'</td>';
                            trHTML += '<td>Mon</td>';
                            trHTML += '<td>'+days_date[0]+'</td>';
                            trHTML += '<td>Y</td>';
                            trHTML += '<td>'+item.start_date+'</td>';
                            trHTML += '<td>'+item.end_date+'</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>'+item.expense_allowance_value+'</td>';
                            trHTML += '<td>'+item.hours_allowed+'</td>';
                            trHTML += '</tr>';

                            //Tuesday
                            trHTML += '<tr>';
                            trHTML += '<td>'+item.event_title+'</td>';
                            trHTML += '<td>Tue</td>';
                            trHTML += '<td>'+days_date[1]+'</td>';
                            trHTML += '<td>Y</td>';
                            trHTML += '<td>'+item.start_date+'</td>';
                            trHTML += '<td>'+item.end_date+'</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>'+item.expense_allowance_value+'</td>';
                            trHTML += '<td>'+item.hours_allowed+'</td>';
                            trHTML += '</tr>';

                            //Wednesday
                            trHTML += '<tr>';
                            trHTML += '<td>'+item.event_title+'</td>';
                            trHTML += '<td>Wed</td>';
                            trHTML += '<td>'+days_date[2]+'</td>';
                            trHTML += '<td>Y</td>';
                            trHTML += '<td>'+item.start_date+'</td>';
                            trHTML += '<td>'+item.end_date+'</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>'+item.expense_allowance_value+'</td>';
                            trHTML += '<td>'+item.hours_allowed+'</td>';
                            trHTML += '</tr>';

                            //Thursday
                            trHTML += '<tr>';
                            trHTML += '<td>'+item.event_title+'</td>';
                            trHTML += '<td>Thu</td>';
                            trHTML += '<td>'+days_date[3]+'</td>';
                            trHTML += '<td>Y</td>';
                            trHTML += '<td>'+item.start_date+'</td>';
                            trHTML += '<td>'+item.end_date+'</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>'+item.expense_allowance_value+'</td>';
                            trHTML += '<td>'+item.hours_allowed+'</td>';
                            trHTML += '</tr>';

                            //Friday
                            trHTML += '<tr>';
                            trHTML += '<td>'+item.event_title+'</td>';
                            trHTML += '<td>Fri</td>';
                            trHTML += '<td>'+days_date[4]+'</td>';
                            trHTML += '<td>Y</td>';
                            trHTML += '<td>'+item.start_date+'</td>';
                            trHTML += '<td>'+item.end_date+'</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>&nbsp;</td>';
                            trHTML += '<td>'+item.expense_allowance_value+'</td>';
                            trHTML += '<td>'+item.hours_allowed+'</td>';
                            trHTML += '</tr>';

                        } else {
                            trHTML += '<tr>';
                            trHTML += '<td>'+item.event_title+'</td>';
                            trHTML += '<td>'+item.day_of_week+'</td>';
                            if(item.day_of_week=='Mon'){
                                trHTML += '<td>'+days_date[0]+'</td>';
                            }
                            if(item.day_of_week=='Tue'){
                                trHTML += '<td>'+days_date[1]+'</td>';
                            }
                            if(item.day_of_week=='Wed'){
                                trHTML += '<td>'+days_date[2]+'</td>';
                            }
                            if(item.day_of_week=='Thu'){
                                trHTML += '<td>'+days_date[3]+'</td>';
                            }
                            if(item.day_of_week=='Fri'){
                                trHTML += '<td>'+days_date[4]+'</td>';
                            }
                            trHTML += '<td>Y</td>';
                            trHTML += '<td>'+item.start_date+'</td>';
                            trHTML += '<td>'+item.end_date+'</td>';
                            trHTML += '<td><input type="checkbox" name="presentdays[]" /></td>';
                            trHTML += '<td><input type="checkbox" name="latedays[]" /></td>';
                            trHTML += '<td>'+item.expense_allowance_value+'</td>';
                            trHTML += '<td>'+item.hours_allowed+'</td>';
                            trHTML += '</tr>';

                            number_of_classes++;
                            totalexpense = +totalexpense + +item.expense_allowance_value;
                            totaladminhours = totaladminhours + item.hours_allowed;
                        }

                    });

                    jQuery('#steptwotable').find('tbody').empty();
                    jQuery('#steptwotable').find('tbody').append(trHTML);

                    var totalclasses = number_of_classes * jQuery("input[name='txtclassrate']").val();
                    var totaladminrate = totaladminhours * jQuery("input[name='txtadminrate']").val();
                    var trHTML2 = '';
                    trHTML2 += '<tr>';
                    trHTML2 += '<td>'+number_of_classes+'</td>';
                    trHTML2 += '<td><input type="text" value="'+totalclasses+'" readonly /></td>';
                    trHTML2 += '<td><input type="text" value="" readonly /></td>';
                    trHTML2 += '<td><input type="text" value="'+totalexpense+'" readonly /></td>';
                    trHTML2 += '<td><input type="text" value="'+totaladminrate+'" readonly /></td>';
                    trHTML2 += '</tr>';
                    jQuery('#stepthreetable').find('tbody').empty();
                    jQuery('#stepthreetable').find('tbody').append(trHTML2);

                }
            });
        }
    });

PHP

<?php
if($_POST['addtimecard']){
        // print_r($_POST);
        echo json_decode($_POST['alldata']);
    }
?>

PHP print_r輸出

Array ( [txtuser] => 2 [txtemail2] => nitinjohnson316@gmail.com [txtclassrate] => 10.000 [txtadminrate] => 20.000 [txtweek] => 08-31-2015 [txtcomment] => [alldata] => {\"email2\":\"nitinjohnson316@gmail.com\",\"class_rate\":\"10.000\",\"admin_rate\":\"20.000\",\"late_charge\":\"10.000\",\"final_data\":[{\"pre_assignment_id\":\"4\",\"user_id\":\"2\",\"session_id\":\"52\",\"school\":\"Admin\",\"day_of_week\":\"\",\"start_date\":\"1970-01-01\",\"end_date\":\"1970-01-01\",\"expense_allowance_value\":\"0\",\"hours_allowed\":\"5\",\"event_id\":\"999999\",\"event_title\":\"Admin\",\"event_description\":null,\"event_category\":\"Admin\",\"event_status\":\"Active\",\"event_status_num\":\"5\",\"event_timecard\":\"A\",\"session_dayofweek\":\"\",\"session_start_date\":\"0000-00-00\",\"session_end_date\":\"0000-00-00\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"},{\"pre_assignment_id\":\"3\",\"user_id\":\"2\",\"session_id\":\"16\",\"school\":\"Bethany Elementary\",\"day_of_week\":\"Wed\",\"start_date\":\"2015-09-09\",\"end_date\":\"2015-12-12\",\"expense_allowance_value\":\"5\",\"hours_allowed\":\"0\",\"event_id\":\"3481\",\"event_title\":\"Fall 2015 - Bethany Elementary Chess Program - Plano ISD\",\"event_description\":null,\"event_category\":\"Bethany Elementary\",\"event_status\":\"Ongoing\",\"event_status_num\":\"3\",\"event_timecard\":\"C\",\"session_dayofweek\":\"Wed\",\"session_start_date\":\"2015-09-09\",\"session_end_date\":\"2015-12-09\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"},{\"pre_assignment_id\":\"2\",\"user_id\":\"2\",\"session_id\":\"15\",\"school\":\"Ashley Elementary\",\"day_of_week\":\"Mon\",\"start_date\":\"2015-09-14\",\"end_date\":\"2015-12-12\",\"expense_allowance_value\":\"15\",\"hours_allowed\":\"0\",\"event_id\":\"3511\",\"event_title\":\"Fall 2015 - Ashley Elementary Chess Program - Frisco ISD\",\"event_description\":null,\"event_category\":\"Ashley Elementary\",\"event_status\":\"Ongoing\",\"event_status_num\":\"3\",\"event_timecard\":\"C\",\"session_dayofweek\":\"Mon\",\"session_start_date\":\"2015-09-14\",\"session_end_date\":\"2015-12-07\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"},{\"pre_assignment_id\":\"1\",\"user_id\":\"2\",\"session_id\":\"14\",\"school\":\"Anderson Elementary\",\"day_of_week\":\"Mon\",\"start_date\":\"2015-09-21\",\"end_date\":\"2015-12-12\",\"expense_allowance_value\":\"5\",\"hours_allowed\":\"0\",\"event_id\":\"3613\",\"event_title\":\"Fall 2015 - Anderson Elementary Chess Program - Frisco ISD\",\"event_description\":null,\"event_category\":\"Anderson Elementary\",\"event_status\":\"Active Hidden\",\"event_status_num\":\"2\",\"event_timecard\":\"C\",\"session_dayofweek\":\"Mon\",\"session_start_date\":\"2015-09-21\",\"session_end_date\":\"2015-12-07\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"}]} [addtimecard] => Save ) {\"email2\":\"nitinjohnson316@gmail.com\",\"class_rate\":\"10.000\",\"admin_rate\":\"20.000\",\"late_charge\":\"10.000\",\"final_data\":[{\"pre_assignment_id\":\"4\",\"user_id\":\"2\",\"session_id\":\"52\",\"school\":\"Admin\",\"day_of_week\":\"\",\"start_date\":\"1970-01-01\",\"end_date\":\"1970-01-01\",\"expense_allowance_value\":\"0\",\"hours_allowed\":\"5\",\"event_id\":\"999999\",\"event_title\":\"Admin\",\"event_description\":null,\"event_category\":\"Admin\",\"event_status\":\"Active\",\"event_status_num\":\"5\",\"event_timecard\":\"A\",\"session_dayofweek\":\"\",\"session_start_date\":\"0000-00-00\",\"session_end_date\":\"0000-00-00\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"},{\"pre_assignment_id\":\"3\",\"user_id\":\"2\",\"session_id\":\"16\",\"school\":\"Bethany Elementary\",\"day_of_week\":\"Wed\",\"start_date\":\"2015-09-09\",\"end_date\":\"2015-12-12\",\"expense_allowance_value\":\"5\",\"hours_allowed\":\"0\",\"event_id\":\"3481\",\"event_title\":\"Fall 2015 - Bethany Elementary Chess Program - Plano ISD\",\"event_description\":null,\"event_category\":\"Bethany Elementary\",\"event_status\":\"Ongoing\",\"event_status_num\":\"3\",\"event_timecard\":\"C\",\"session_dayofweek\":\"Wed\",\"session_start_date\":\"2015-09-09\",\"session_end_date\":\"2015-12-09\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"},{\"pre_assignment_id\":\"2\",\"user_id\":\"2\",\"session_id\":\"15\",\"school\":\"Ashley Elementary\",\"day_of_week\":\"Mon\",\"start_date\":\"2015-09-14\",\"end_date\":\"2015-12-12\",\"expense_allowance_value\":\"15\",\"hours_allowed\":\"0\",\"event_id\":\"3511\",\"event_title\":\"Fall 2015 - Ashley Elementary Chess Program - Frisco ISD\",\"event_description\":null,\"event_category\":\"Ashley Elementary\",\"event_status\":\"Ongoing\",\"event_status_num\":\"3\",\"event_timecard\":\"C\",\"session_dayofweek\":\"Mon\",\"session_start_date\":\"2015-09-14\",\"session_end_date\":\"2015-12-07\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"},{\"pre_assignment_id\":\"1\",\"user_id\":\"2\",\"session_id\":\"14\",\"school\":\"Anderson Elementary\",\"day_of_week\":\"Mon\",\"start_date\":\"2015-09-21\",\"end_date\":\"2015-12-12\",\"expense_allowance_value\":\"5\",\"hours_allowed\":\"0\",\"event_id\":\"3613\",\"event_title\":\"Fall 2015 - Anderson Elementary Chess Program - Frisco ISD\",\"event_description\":null,\"event_category\":\"Anderson Elementary\",\"event_status\":\"Active Hidden\",\"event_status_num\":\"2\",\"event_timecard\":\"C\",\"session_dayofweek\":\"Mon\",\"session_start_date\":\"2015-09-21\",\"session_end_date\":\"2015-12-07\",\"refresh_tmstp\":\"2015-10-10 18:02:35\"}]}

我從中創建JSON的PHP函數

<?php
add_action('wp_ajax_timecardapp_manage_timecard_stepone','timecardapp_manage_timecard_stepone');
add_action('wp_ajax_nopriv_timecardapp_manage_timecard_stepone','timecardapp_manage_timecard_stepone');

function timecardapp_manage_timecard_stepone(){
    global $wpdb;
    $wpdb->sessions = $wpdb->prefix . 'tc_sessions';    
    $wpdb->contractor = $wpdb->prefix . 'tc_contractor';
    $get_results=$wpdb->get_results("SELECT * FROM $wpdb->contractor WHERE user_id='".$_POST['user_id']."' ");
    $result;
    foreach($get_results as $row){
        $result['email2'] = $row->email2;
        $result['class_rate'] = $row->class_rate;
        $result['admin_rate'] = $row->admin_rate;
        $result['late_charge'] = $row->late_charge;
    }

    $wpdb->pre_assignments = $wpdb->prefix . 'tc_pre_assignments';
    $session_ids;
    $get_pre_assignments=$wpdb->get_results("SELECT * FROM $wpdb->pre_assignments WHERE user_id='".$_POST['user_id']."' ORDER BY start_date, FIELD(start_date,'Sun','Mon','Tue','Wed','Thu','Fri','Sat') ");
    foreach($get_pre_assignments as $row){
        $session_ids[] = $row->session_id;
    }

    $final_session_ids=implode(",",$session_ids);
    $get_pre_assignments=$wpdb->get_results("SELECT * FROM $wpdb->pre_assignments join $wpdb->sessions ON $wpdb->pre_assignments.session_id=$wpdb->sessions.session_id WHERE $wpdb->sessions.session_id IN(".$final_session_ids.") and user_id='".$_POST['user_id']."' ORDER BY start_date, FIELD(start_date,'Sun','Mon','Tue','Wed','Thu','Fri','Sat') ");

    $final_data;
    foreach($get_pre_assignments as $row){
        $final_data[] = $row;
    }
    $result['final_data']=$final_data;
    $session_names=get_session_detail_by_id($final_session_ids);

    echo json_encode($result);
    die();
}
?>

問題在於您的報價。 JSON中的雙引號與您用來定界值的雙引號匹配,因此該值在第一個{之后結束。 將定界符引號更改為單引號。

<input type="hidden" name="alldata" id="alldata" value='{"email2":"nitinjohnson316@gmail.com","class_rate":"10.000","admin_rate":"20.000","late_charge":"10.000","final_data":[{"pre_assignment_id":"4","user_id":"2","session_id":"52","school":"Admin","day_of_week":"","start_date":"1970-01-01","end_date":"1970-01-01","expense_allowance_value":"0","hours_allowed":"5","event_id":"999999","event_title":"Admin","event_description":null,"event_category":"Admin","event_status":"Active","event_status_num":"5","event_timecard":"A","session_dayofweek":"","session_start_date":"0000-00-00","session_end_date":"0000-00-00","refresh_tmstp":"2015-10-10 18:02:35"},{"pre_assignment_id":"3","user_id":"2","session_id":"16","school":"Bethany Elementary","day_of_week":"Wed","start_date":"2015-09-09","end_date":"2015-12-12","expense_allowance_value":"5","hours_allowed":"0","event_id":"3481","event_title":"Fall 2015 - Bethany Elementary Chess Program - Plano ISD","event_description":null,"event_category":"Bethany Elementary","event_status":"Ongoing","event_status_num":"3","event_timecard":"C","session_dayofweek":"Wed","session_start_date":"2015-09-09","session_end_date":"2015-12-09","refresh_tmstp":"2015-10-10 18:02:35"},{"pre_assignment_id":"2","user_id":"2","session_id":"15","school":"Ashley Elementary","day_of_week":"Mon","start_date":"2015-09-14","end_date":"2015-12-12","expense_allowance_value":"15","hours_allowed":"0","event_id":"3511","event_title":"Fall 2015 - Ashley Elementary Chess Program - Frisco ISD","event_description":null,"event_category":"Ashley Elementary","event_status":"Ongoing","event_status_num":"3","event_timecard":"C","session_dayofweek":"Mon","session_start_date":"2015-09-14","session_end_date":"2015-12-07","refresh_tmstp":"2015-10-10 18:02:35"},{"pre_assignment_id":"1","user_id":"2","session_id":"14","school":"Anderson Elementary","day_of_week":"Mon","start_date":"2015-09-21","end_date":"2015-12-12","expense_allowance_value":"5","hours_allowed":"0","event_id":"3613","event_title":"Fall 2015 - Anderson Elementary Chess Program - Frisco ISD","event_description":null,"event_category":"Anderson Elementary","event_status":"Active Hidden","event_status_num":"2","event_timecard":"C","session_dayofweek":"Mon","session_start_date":"2015-09-21","session_end_date":"2015-12-07","refresh_tmstp":"2015-10-10 18:02:35"}]}'>

嘗試這個,

$a = $_POST['alldata'];
$arr = json_decode($a);

$email = $arr->email2;
$class_rate = $arr->class_rate;

...

要訪問final_data

foreach($arr->final_data as $row) {
     echo $row->pre_assignment_id;
     echo $row->user_id;

     ....

}

以相同的方式嘗試訪問所有必需的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM