728x90

PHP 배열로 넘겨주는 함수에 따라서 처리를 다르게 해야 동작된다는 걸 확인하고 코드를 다시 적어둔다.


http://link2me.tistory.com/1134 게시글에서 가져오는 함수에서 넘겨주는 값이

문자열로 넘겨줄 경우와 배열로 넘겨줄 경우 각각 상황에 맞게 구현해야 한다.


<?php
require_once 'connect.php'; // db접속 성공
require_once 'statsClass.php'; // 통계 클래스
$b = new statsClass();
$R = $b->extract_YM();
date_default_timezone_set('Asia/Seoul');
if(isset($_GET['ym'])){
    $ym = $_GET['ym'];
} else {
    $ym = date("Ym");
}
$ticks = json_encode($b->maxdate_YM($ym));
$line1 = json_encode($b->dailyCnt_value($ym));
$line2 = json_encode($b->userCnt_value($ym));
?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<meta name="robots" content="noindex,nofollow"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA Compatible" />
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<!-- http://www.jqplot.com 제공 자바스크립트 include -->
<script type="text/javascript" src="../js/jqplot/jquery.jqplot.js"></script>
<script type="text/javascript" src="../js/jqplot/plugins/jqplot.barRenderer.js"></script>
<script type="text/javascript" src="../js/jqplot/plugins/jqplot.pointLabels.js"></script>
<script type="text/javascript" src="../js/plugins/jqplot.categoryAxisRenderer.js"></script>
<link rel="stylesheet" type="text/css" href="../js/jqplot/jquery.jqplot.css" />
<script type="text/javascript">
$(document).ready(function(){
    var plot1;

    var obj1 = <?php echo $line1; ?>;
    var line1 = $.map(obj1, function(el) { return el });
    var obj2 = <?php echo $line2; ?>;
    var line2 = $.map(obj2, function(el) { return el });
    var ticks = JSON.parse('<?php echo $ticks; ?>');

    renderChart(line1,line2,ticks);

    $('#selectmonth').on('change',function(){
        if(this.value !== ""){
            var optVal=$(this).find(":selected").val();
            //var pageURL = "<?php echo $_SERVER['PHP_SELF'];?>?ym=" + optVal;
            //$(location).attr('href', pageURL);

            var year = optVal.substr(0,4); // 년
            var month = optVal.substr(4,2); // 월
            $.post('stats_db.php',{optVal:optVal},function(msg){
                //alert(msg); // 배열 형태로 넘어오는지 확인 목적
                var jsonObj = $.parseJSON(msg); // JSON 문자열을 JavaScript object 로 반환
                //alert(typeof jsonObj.ticks);
                //alert(jsonObj.data1);
// string 인지 object 인지 확인 목적
                var data1 = $.map(jsonObj.data1, function(el) { return el });
                var data2 = $.map(jsonObj.data2, function(el) { return el });
                //alert(jsonObj.ticks);
                var xAxis = jsonObj.ticks;
                updatePlot(data1,data2,xAxis);
            });
        }
    });

});


function renderChart(line1,line2,xAxis){
    plot1 = $.jqplot('chartDiv', [line1,line2], CreateBarChartOptions(xAxis));
}

function updatePlot(line1,line2,xAxis){
    plot1.destroy();
    plot1 = $.jqplot('chartDiv', [line1,line2], CreateBarChartOptions(xAxis));
}

function CreateBarChartOptions(xAxis) {
    var optionsObj = {
        title: '일자별 접속 통계',
        seriesDefaults:{
            renderer:$.jqplot.BarRenderer, // 막대 그래프
            rendererOptions: { barWidth: 10 }, // bar의 너비 수동으로 설정
            pointLabels: { show: true } // 레이블 값
        },
        axes: {
            xaxis: {
                renderer: $.jqplot.CategoryAxisRenderer,
                ticks: xAxis,
                tickOptions: {
                    formatString: '%d' // 정수형으로 표시
                }
                //label:'일자'
            },
            yaxis:{
                //renderer:$.jqplot.DateAxisRenderer,
                min:0,
                //max:80
            }
        },
        highlighter: { show: false }
    };
    return optionsObj;
}
</script>

</head>
<body>
<div id="chartDiv" style="height:400px;width:1500px; "></div>
<div style="height:300px;width:1490px;margin-top:10px;text-align:right;">
<select name="month" id="selectmonth">
<option value="">년월 선택</option>
<?php
    while ($row = mysql_fetch_array($R)){
        echo "<option value='".$row[0]."' ";
        if($row[0] === $ym) echo "selected='selected'";
        echo ">".$row[0]."</option>\n";
    }
?>
</select>
</div>
</body>
</html>


=== stats_db.php ===

<?php
if(isset($_POST['optVal'])){
    require_once 'connect.php'; // db접속 성공
    require_once 'statsClass.php'; // 통계 클래스
    $b = new statsClass;
    $ym = $_POST['optVal'];
    $data1 = $b->dailyCnt_value($ym); // 배열로 받은 결과
    $data2 = $b->userCnt_value($ym); // 배열로 받은 결과
    $ticks = $b->maxdate_YM($ym);  // 배열로 받은 결과
    $R = array('data1'=>$data1,'data2'=>$data2, 'ticks'=>$ticks);
    echo json_encode($R);
}
?>

블로그 이미지

Link2Me

,