CI 묻고 답하기

제목 CI와 jQuery를 접한지 일주일정도된 초보입니다..! 디버깅하는 방법을 모르겠습니다 ㅠ
카테고리 CI 2, 3
글쓴이 도롱뇽이 작성시각 2017/08/28 09:28:57
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 18572   RSS

CI를 접하게 되고 기본적인 MVC패턴을 이해하는데까지 시간이 꽤나 걸렸습니다..

이전에 PHP를 가지고 개발 공부를 할때는 상황에 따른 에러메세지가 직관적으로 나오면서 디버깅을 수월하게 했는데

CI는 당최 어디서 에러가 나고 어디가 문제인건지 확인할 수 있는 방법을 모르겠습니다.. ㅠ

 

예를들자면.. 

로그인 페이지를 만들고 있는데, 뷰단에서 ID, PW 값을 AJAX 통신하여 컨트롤러단으로 넘겼습니다.

예전같으면 버튼 onclick 이벤트를 통해 폼에서 넘긴 파라미터를 넘겨받는 페이지에서 값이 잘 넘어왔는지 echo 처리를 해보면 됐는데

CI에서는 구조상 불가능한건지.. 제가 방법을 모르는건지 어렵기만하네요 ㅠㅠ

 

조금더 쉽게 요약하자면

V 에서 C 로 넘겼을때 V에서 C로 값이 정상적으로 넘어왔는지를 직관적으로 확인할 수 있는 방법..

또, C에서 M을 호출했을때 M에서 값을 제대로 이어받아 정상적으로 DB 쿼리를 돌렸는지를 직관적으로 확인하고 싶습니다..

 

아래는 만들어놓은 소스 복사붙여넣기 한것입니다..!

 

Controller

<?php

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

class Music_Cafe extends CI_Controller

{

    /**

     * Index Page for this controller.

     *

     * Maps to the following URL

     *      http://example.com/index.php/welcome

     *  - or -

     *      http://example.com/index.php/welcome/index

     *  - or -

     * Since this controller is set as the default controller in

     * config/routes.php, it's displayed at http://example.com/

     *

     * So any other public methods not prefixed with an underscore will

     * map to /index.php/welcome/<method_name>

     * @see https://codeigniter.com/user_guide/general/urls.html

     */

    public function __construct()

    {

        parent:: __construct();

        $this->load->model('cafe_model');

    }

    public function index()

    {

        $this->load->view('musiccafe_view');

    }

    public function login_chk()

    {

        $str_id = $this->input->post('id',true);

        $str_pw = $this->input->post('pw',true);

        $result = $this->cafe_model->login_chk($str_id, $str_pw);

        

        $returnArray['status'] = "200";

        $returnArray['responseText'] = $result;

        echo json_encode($returnArray);

        exit;

    }

}

 

 

Model

<?

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

class Cafe_model extends CI_Model

{

   function __construct()

   {

      $this->load->database();

   }

   public function login_chk($str_id, $str_pw)

   {

   $qry = "SELECT COUNT(*) CNT FROM USERTB WHERE ID = '".$str_id."' AND PW = password('".$str_pw."')";

   $query = $this->db->query($qry);

   if($query->num_rows() > 0)

   {

      return "yes";

   }

   else

   {

      return "no";

   }

}

}

?>

 

 

 View

<?php

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

echo "로그인해주세요 ";

?>

<HTML>

<HEAD>

<TITLE> </TITLE>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<script>

$(function(){

$("#btn_login").click(function()

{

params1 = $("#id").val();

params2 = $("#pw").val();

$.ajax(

{

url: "/music_cafe/login_chk/",

type: "post",

dataType: "json",

data: { "id": params1,

"pw": params2

},

success: function(data)

{

if(data.responseText == "no")

{

alert("nono");

}

else

{

alert("로그인 성공!");

}

},

error: function(xhr, status, error)

{

alert("error : " + error + " / status : " + status);

return ;

},

complete: function()

{

}

});

});

});

</script>

</HEAD>

<BODY>

<form id=data_form>

<TABLE BORDER=1>

<TR>

<TD align=center>ID</TD>

<TD align=center><input type=text name=id id=id maxlength=20></TD>

</TR>

<TR>

<TD align=center>PW</TD>

<TD align=center><input type=password name=pw id=pw maxlength=20></TD>

</TR>

<TR>

<TD align=center colspan=2><input type=button value='로그인' id=btn_login> <input type=button value='회원가입'> <input type=button value='초기화'></TD>

</TR>

</TABLE>

</form>

</BODY>

<?

?>

 

찾아보겠다고 찾아봤는데  키워드를 '디버깅 방법', '코드이그나이터 디버깅' 이런식으로 찾아봐도 나오는 정보가 없네요.. ㅠ

찾는 정보가 나오질 않네요..ㅠ 

 

답변은 받기에 앞서 미리 인사 올립니다.. 시간 내주셔서 감사합니다..!

 다음글 모델쪽에서 sql문에서 변수를 사용하면.. (9)
 이전글 쿼리결과를 사용하는 법에 대한 질문입니다... (1)

댓글

한대승(불의회상) / 2017/08/28 09:52:35 / 추천 0

디버깅 방법은 여러가지가 있겠지만, CI에 내장된 프로파일러를 이용하는 방법을 제안 합니다.

디버깅하고자 하는 컨트롤러에 추가 하시면 됩니다.

$this->output->enable_profiler();

 

도롱뇽이 / 2017/08/28 10:04:21 / 추천 0

한대승(불의회상) 님 댓글 감사합니다 ㅠㅠ 

어떤 기능인지 한번 사용해보도록 하겠습니다~!!!

도롱뇽이 / 2017/08/28 10:58:01 / 추천 0

안녕하세요 한대승님 ㅠㅠ 알려주신 방법으로 디버깅 확인 해봤는데.. 뭔가 아무런 결과가 안나옵니다..!

 

컨트롤러
public function login_chk()
    {
        $str_id = json_decode('id');
        $str_pw = json_decode('pw');
 
        $result = $this->cafe_model->login_chk($str_id, $str_pw);
        
        $returnArray['status'] = "200";
        $returnArray['responseText'] = $result;
 
        echo json_encode($returnArray);
        exit;
 
        $this->output->enable_profiler($this->cafe_model->login_chk($str_id, $str_pw) );
    }
 
 
 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 
echo "로그인해주세요 ";
 
?>
 
<HTML>
 
<HEAD>
<TITLE> </TITLE>
 
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
 
<script>
 
$(function(){
$("#btn_login").click(function()
{
params1 = $("#id").val();
params2 = $("#pw").val();
 
$.ajax(
{
url: "/music_cafe/login_chk/",
type: "post",
dataType: "json",
data: { "id": params1,
"pw": params2
},
success: function(data)
{
if(data.responseText == "no")
{
alert("nono");
}
else
{
alert("로그인 성공!");
}
},
error: function(xhr, status, error)
{
alert("error : " + error + " / status : " + status);
return ;
},
complete: function()
{
 
}
});
});
});
 
</script>
 
</HEAD>
 
<BODY>
<form id=data_form>
<TABLE BORDER=1>
 
<TR>
<TD align=center>ID</TD>
<TD align=center><input type=text name=id id=id maxlength=20></TD>
</TR>
 
<TR>
<TD align=center>PW</TD>
<TD align=center><input type=password name=pw id=pw maxlength=20></TD>
</TR>
 
<TR>
<TD align=center colspan=2><input type=button value='로그인' id=btn_login> <input type=button value='회원가입'> <input type=button value='초기화'></TD>
</TR>
 
</TABLE>
</form>
</BODY>

 

 

 

모델

<?
 
defined('BASEPATH') OR exit('No direct script access allowed');
 
class Cafe_model extends CI_Model
{
 
function __construct()
{
$this->load->database();
}
 
public function login_chk($str_id, $str_pw)
{
 
$qry = "SELECT COUNT(*) CNT FROM USERTB WHERE ID = '".$str_id."' AND PW = password('".$str_pw."')";
 
$query = $this->db->query($qry);
 
if($query->num_rows() > 0)
{
return "yes";
}
else
{
return "no";
}
}
}
 
?>
 
이렇게 작성을 해놨는데.. 현재 문제는 뷰에서 로그인 버튼을 눌렀을때 컨트롤러를 호출하는 ajax를 작성해놨고
컨트롤러를 호출했을때 model을 다녀오도록 처리해놨는데.. 분명히 DB상에 존재하지 않는 id, pw를 입력해도
 
무조건 yes 값을 반환하고 있습니다.. 어딘가 잘못된 상황인데.. 쿼리가 잘못돌아가고 있는건지..
그외 뭔가 제가 구문을 이상하게 사용한건지 ㅠㅠ 어렵네요..
한대승(불의회상) / 2017/08/28 11:02:23 / 추천 0

exit 아래 있으면 활성화가 안됩니다.

메뉴얼을 참고 하세요.

http://www.ciboard.co.kr/user_guide/kr/general/profiling.html

 

도롱뇽이 / 2017/08/28 11:07:30 / 추천 0

헐 감사합니다 ㅠㅠ

exit; 위에다가 올려놔도 아무런 반응이 없길래 아래로 옮겨본건데..

exit 날려버리고나니까 정상적으로 나옵니다 ㅠㅠ 정말 감사해요!