본문 바로가기

과목/데이터 베이스

PHP 파일에서 DB 접근 후 랭킹 출력

header는 크로스 오리진으로 인한 다른 서버 접속 불가(자신의 IP가 아니면 서버에 접근 못함(?))를 허용해주는 크로스 오리진 리소스 쉐어링

include는 DB 연결을 위한 코드 파일


웹앱에서 ajax로 클라우드 서버의 파일에 접근한다.

서버에서는 year, month 등의 값을 받는다. 그리고 month는 2018-09-01부터 2018-09-31까지, 이런식으로 검색되게 하려고 수정하고 ym1, ym2 변수에 넣었다.

query에서 랭킹 생성하고 그 밖에 선택할 칼럼을 적는다. table join을 해준다.

query 실행 후 나온 결과를 res에 담고 while문을 돌면서 레코드를 한 줄씩 row에 넣는다.

row에 있는 칼럼을 쭉 돌면서 result에 넣는다.

json 형식으로 반환해서 웹앱에서 값을 받을 수 있도록 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
        header("Access-Control-Allow-Origin: *");
        include "../include/dbCon.php";
    try{
     $year = $_POST['year'];
        $month = $_POST['month'];
        if($month<10){
         $month='0'.$month;
        }
        $ym1=$year.'-'.$month.'-'.'01';
        $ym2=$year.'-'.$month.'-'.'31';
        $workout_id=intval($_POST['workout']);
        $sql="select (@rank:=@rank+1) as rank,nickname,sets,reps,weight,point,date
         from(                
                 select nickname,title,sets,reps,weight,done_sets*done_reps*weight as point,date                
                 from intensity as i, users as u, dates as d,workout as w
                 where i.user_id=u.user_id and w.workout_id=i.workout_id and w.workout_id=$workout_id and d.date_id=i.date_id
                 and d.date>='".$ym1."' and d.date<='".$ym2."'
             ) as rankT, (select @rank:=0) as b";
        $res=mysqli_query($dbConnect,$sql);
        $result['success']=true;
        $i=0;
        $arr = array("rank","nickname","title","sets","reps","weight","point","date");
        while($row = mysqli_fetch_array($res)){ //fetch_array는 키 저장, 컬럼명 저장 방식이 라 배열에 두개 변수가 중복으로 저장된다.
         $j=0;
            while($j<8){
                $result[$i][$j= $row[$arr[$j]];
                $j++;
            }
            $i++;
        }
        $result['date']=$ym1;
    }catch(exception $e) {
        $result['success']  = false;
        $result['msg']      = $e->getMessage();
        $result['code']     = $e->getCode();
    } finally{
        echo json_encode($result,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
    }
?>

cs




크로스 오리진 https://developer.mozilla.org/ko/docs/Web/HTTP/Access_control_CORS