Phaser/jQuery AJAX2019. 1. 19. 19:08

jQuery의 AJAX 를 사용한 서버측 PHP 간의 비동기 요청과 응답처리 예


jQuery 설정 및 테스트

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>HTML Example</title>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<script>

$(document).ready(function(){

  $("p").click(function(){

    $(this).hide();

  });

});

</script>

</head>

<body>

    <p>여기를 클릭하세요

</body>

</html>



위의 방법보다 더 간단하게 jQuery 의 ready 함수를 실행하는 방법

<script>

$().ready(function(){

  $("p").click(function(){

    $(this).hide();

  });

});

</script>

가장 간단한 jQuery ready 함수 호출 방법

$(function(){

  $("p").click(function(){

    $(this).hide();

  });

});


jQuery의 AJAX 기능을 사용한 서버측(PHP)과의 비동기 통신

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>AJAX Example</title>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<script>

$().ready(function(){

  $("p").click(function(){

    $(this).hide();

    $.ajax(

        {

            url : 'server.php',

            data : {name:'smith', phone:'010-9578-2154'},

            dataType : 'json',               /*html, text, json, xml, script*/

            method : 'post',

            success : function(res){

                alert(res.name + ', '+res.phone);

                $('p').show();

            },

            error : function(xhr, status, error){

                alert(xhr.status);           // 에러코드(404, 500 등)

                alert(xhr.responseText); // html 포맷의 에러 메시지

                alert(status);                // 'error'

                alert(error);                 // 'Not Found'

            }

        }

    );

  });

});

</script>

</head>

<body>

    <p>AJAX Request Test

</body>

</html>



위의 요청에 응답하는 서버측 PHP 스크립트(server.php)

<?php

    $name = $_REQUEST['name'];

    $phone = $_REQUEST['phone'];

    

    $arr['name'] = $name;

    $arr['phone'] = $phone;

    

    $json_str = json_encode($arr);

    echo $json_str;

?>




Posted by cwisky
PHP/CI Session2019. 1. 14. 16:07

CodeIgniter 에서 Session 사용하기


원문참조 : https://www.codeigniter.com/user_guide/libraries/sessions.html



PHP 표준 방법으로 세션을 다루는 예

session_start();


$_SESSION['id'] = 'Smith'; // 세션에 'id' 란 키를 이용해서 값을 저장한다

$_SESSION['id'] = 'Andy';  // 세션에 'id' 란 키로 저장된 값을 업데이트한다

unset ( $_SESSION['id'] );  // 세션에 'id' 란 키로 저장된 값을 제거한다


if ( empty ( $_SESSION['id] ) ) // 세션에 'id' 란 키로 저장된 값이 있는지 확인한다

{

     echo "로그인 후에 이용해 주세요";

)



콘트롤러 클래스 작성

application/controllers/ 아래에 다음과 같은 테스트용 클래스를 작성한다

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


class SampleController extends CI_Controller 

{

    public function __construct() 

    {

        parent::__construct();

        $this->load->library('session'); // 생성자에서 세션을 초기화하면 이후 모든 페이지에서 사용가능

    }

    public function index()

    {

            $this->load->view('sample.php');

    }

}

?>


위와 같이 콘트롤러에서 세션을 초기화하지 않고 뷰에서 초기화하는 경우 오류가 발생한다

콘트롤러에서 세션의 초기화 뿐만 아니라 세션 관련 다른 모든 작업이 가능하다


콘트롤러에서 연결할 뷰 작성

application/views/ 아래에 다음과 같은 뷰(sample.php)를 생성한다

<?php


// 콘트롤러에서 초기화된 세션은 아래처럼 사용가능

//$this->session;


// PHP에서 세션에 값을 저장하려면

$_SESSION['key'] = "value";


// CodeIgniter에서는 ...

$this->session->set_userdata('key', 'value'); 


// 세션에 배열을 저장하려면..

$data = array(

    'id'=>'userid',

    'name'=>'username',

    'phone'=>'010-2547-9541'

);


$this->session->set_userdata($data);


foreach ($data as $key => $value) {

    echo $key. " : ". $value."<br>";

}


//PHP에서 세션에 저장된 값을 제거하려면..

unset($_SESSION['key']);


//CI에서 키를 이용하여 세션의 값 제거

$this->session->unset_userdata('key');


// CI에서 세션에 저장된 배열을 제거

$this->session->unset_userdata($data);


// CI에서 세션에 저장된 값을 가져와서 사용하는 예

$data = array(

    'id'=>'userid',

    'name'=>'username',

    'phone'=>'010-2547-9541'

);


$id = $this->session->userdata('id');


echo "이용자의 ID :".$id . "<br>";

?>



다른 페이지에서 로그인을 거쳤는지 확인하는 예

아래에서 사용된 base_url()함수는 url 헬퍼에 있으므로 콘트롤러에서 $this->load->helper('url'); 부분이 추가되어야 한다

<?php

    if( empty($_SESSION['id']) ) {?>

    <script>

        alert('로그인 후에 이용할 수 있습니다');

        location.href = '<?php echo base_url();?>logincontroller';

    </script>

<?php    

        return;

    }

?>



CodeIgniter 에서 실행 확인하기

웹브라우저에서 다음과 같이 요청한다

http://localhost/index.php/SampleController

http://localhost/index.php/sampleController

http://localhost/index.php/samplecontroller



요청 URL에서 콘트롤러 이름을 간결하게 사용하기

application/config/routes.php 파일의 끝에 다음과 같은 내용을 추가한다

route['sample'] = 'SampleController';

위와 같이 설정하면 웹브라우저에서 요청 URL은 다음과 같이 할 수 있다

http://localhost/index.php/sample

물론 원래의 URL도 사용할 수가 있다

Posted by cwisky
PHP/CI Model2019. 1. 14. 15:13

CodeIgniter 의 모델 콤포넌트에서 DB 다루기



application/config/database.php 에서 데이터베이스 정보 입력

$db['default'] = array(

'dsn' => '',

'hostname' => 'localhost',

'username' => 'root',

'password' => '',

'database' => 'sample_db',

'dbdriver' => 'mysqli',

        .........



Model  생성자 안에서 DB 초기화

$this->load->database();



데이터베이스 자동 연결

혹은 application/config/database.php에 자동로드 설정하면 위의 코드는 필요 없다

$autoload['libraries'] = array('database', 'session');



다수개의 행을 가져와서 배열로 변환

$result = $this->db->get('테이블명');

$data['rows'] = $result->result_array(); //각행이 연관배열로 표현된 2차원 배열 리턴

$data['title'] = 'Members List';



한행을 검색하여 가져오기

$result = $this->db->get_where('테이블명', array('id'=>11));

//위의 문장은 아래처럼 2개문장으로 표현할 수 있다

$this->db->where('id', 11);

$result = $this->db->get('테이블명');

$data = $result->row_array(); // 한행을 연관배열로 리턴, NULL



get_where() 함수

get_where([$table = ''[, $where = NULL[, $limit = NULL[, $offset = NULL]]]])

Parameters:

$table (mixed) – The table(s) to fetch data from; string or array

$where (string) – The WHERE clause

$limit (int) – The LIMIT clause

$offset (int) – The OFFSET clause



웹브라우저 파라미터를 추출하여 DB에 저장하기

$this->load->helper('url');

$title = $this->input->post('title');

$content = $this->input->post('content');

$data = array(

'title'=>$title,

'content'=>$content

);

$this->db->insert('테이블명', $data); //성공시 TRUE, 실패시 FALSE



특정 행의 컬럼 값을 변경하기

$data = array(

'title'=>$title,

'content'=>$content

);

$this->db->where('id', $id);

$this->db->update('테이블명', $data);  //성공시 TRUE, 실패시 FALSE

$this->db->update('테이블명', $data, $where);



특정 행 삭제

$this->db->where('id', $id);

$this->db->delete('테이블명'); // 실패시 FALSE

$this->db->delete('테이블명', $where);



SQL 문장을 직접 사용할 때

$this->db->query($sql); 

$this->db->query($sql, sql문장에 전달될 파라미터배열);


//$sql이 read type(SELECT)이라면 결과값 리턴

//$sql이 write type(INSERT,UPDATE,DELETE)이라면 TRUE|FALSE 리턴




Posted by cwisky