CI 묻고 답하기

제목 ajax 이용해 데이터베이스에 값 삽입
글쓴이 코드10 작성시각 2015/07/21 01:51:15
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 18417   RSS
처음으로 ajax라는 걸 배워서 써먹어보려고 하는데 잘 안되네요.
ajax 통해 간단한 숫자를 데이터베이스에 삽입하려고 하는데 어디서부터 잘못된건지 감이 안와요ㅠ
구글 개발자도구를 통해 보니 status code: 500 Internal Server Error 이라는 메세지가 뜹니다.
뭐가 문제일까요?ㅠㅠ 고수님들 신통한 답변 주시면 감사하겠습니다


views
-------------------------------------------------------------------------------------------------------------------------------------
<input type="text" class="form-control" id="house_id" value="1230055">
<i style="font-size:30px" id="favorite-add-button" class="glyphicon glyphicon-star-empty"></i>

<script>
$('#favorite-add-button').click(function(){
    $.ajax({
        url:'/index.php/test/favorite_add',
        dataType:'json',
        type:'post',
        data:{'house_id':$('#house_id').val()},
        success:function(){
            alert('success');
        }
    })
})
</script>
-------------------------------------------------------------------------------------------------------------------------------------



controllers
-------------------------------------------------------------------------------------------------------------------------------------
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test extends CI_Controller {
    
    function __construct(){
        parent::__construct();

        $this->load->database();
    }

    function index(){
        $this->load->view('test');
    }

    function favorite_add(){
        $data = $this->input->post('house_id',true);
        $this->load->model('test_model');
        $this->test_model->favorite_add(array(
            'favorite' => $house_id
            ));
        redirect('test');
    }
}
?>
-------------------------------------------------------------------------------------------------------------------------------------


models
-------------------------------------------------------------------------------------------------------------------------------------
<?php 

class Test_model extends CI_Model {
    
    function __construct()
    {       
        parent::__construct();
    }

    function fovorite_add($option){
        $this->db->insert('test',$option);
    }
}
?>
-------------------------------------------------------------------------------------------------------------------------------------



database
-------------------------------------------------------------------------------------------------------------------------------------
mysql 이구요. test라는 데이터베이스 안에, favorite (varchar 255) 이라는 테이블이 하나 있습니다. 이 테이블에 값을 넣으려고 하는거구요.
-------------------------------------------------------------------------------------------------------------------------------------
 다음글 세그먼트 갯수 질문 (2)
 이전글 코드이그나이터 구성시 공용 기능(로그인, 회원가입등)들... (2)

댓글

변종원(웅파) / 2015/07/21 07:42:17 / 추천 0
ajax 작업시 500 에러 나오는 것은 대부분 데이터베이스 관련 에러입니다.
mysql 연결이 되는지 확인해보세요.

$data = $this->input->post('house_id',true);
$option = array('favorite' => $house_id);
$this->db->insert('test',$option);

값을 $data 변수로 받았는데 할당은 $house_id로 해서 빈값을 전달해서 문제가 된것 같네요.
그리고 위 구문은 test 테이블의 favorite필드에 값을 넣는 것입니다.

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

$option = array('favorite' => $house_id);
$this->db->insert('test',$option);
 
한대승(불의회상) / 2015/07/21 09:22:49 / 추천 0
'test' 가 db 인가요? table 인가요? insert() 함수의 첫번째 인자는 table명입니다.
코드10 / 2015/07/21 22:50:50 / 추천 0
제가 잘못 적었네요! test 테이블의 favorite 필드에 입력하는게 맞습니다!

$data = $this->input->post('house_id',true);
        $this->load->model('test_model');
        $this->test_model->favorite_add(array(
            'favorite' => $data
            ));

말씀하신대로 할당을 $data로 바꿨는데도 여전히 500 Internal Server Error 가 뜨네요.
데이터베이터도 잘 연결되 있구요.



$this->test_model->favorite_add($data);
controllers를 위처럼 바꾸고,


    function fovorite_add($option){
        $this->db->set('favorite',$option)
        $this->db->insert('test');

위처럼 model 에서 set을 이용해 입력할 필드를 지정한 후 삽입하니, 200ok가 뜨네요.
근데 데이터베이스에는 입력이 안되요...

그래서 ajax 세팅부분에서 dataType:'json' 부분을 주석처리하니,
200ok가 뜨고 success시 발생하게 되있는 함수가 작동하면서 success 메시지까지 뜨네요.
근데 정작 데이터베이스에는 입력이 안됩니다ㅠㅠ
변종원(웅파) / 2015/07/21 22:56:31 / 추천 0
ci 로그 활성화해서 보시고 아파치 로그도 보세요.

그리고 모델에 값 전달하지 말고 그냥 변수 선언해서 컨트롤러에서 insert 해보세요. 
우선 데이터베이스 연결이 됐는지 확인이 필요합니다
코드10 / 2015/07/22 00:27:53 / 추천 0
컨트롤러에서도 데이터베이스 입력이 되는거였네요! 몰랐는데 말씀해주신대로 하니까 데이터베이스에 입력이 됐습니다!
model 부분 코딩이 문제가 있던걸까요?

function favorite_add(){
        $data = $this->input->post('house_id',true);
        $this->db->set('favorite',$data);
        $this->db->insert('test');
        
        redirect('test');
    }

아파치로그는 어떻게 하는지 잘 모르겠지만 ci 로그는 대략 어떻게 하는지 알아서 해봤어요!

INFO - 2015-07-21 08:23:28 --> Config Class Initialized
INFO - 2015-07-21 08:23:28 --> Hooks Class Initialized
DEBUG - 2015-07-21 08:23:28 --> UTF-8 Support Enabled
INFO - 2015-07-21 08:23:28 --> Utf8 Class Initialized
INFO - 2015-07-21 08:23:28 --> URI Class Initialized
INFO - 2015-07-21 08:23:28 --> Router Class Initialized
INFO - 2015-07-21 08:23:28 --> Output Class Initialized
INFO - 2015-07-21 08:23:28 --> Security Class Initialized
DEBUG - 2015-07-21 08:23:28 --> Global POST, GET and COOKIE data sanitized
INFO - 2015-07-21 08:23:28 --> Input Class Initialized
INFO - 2015-07-21 08:23:28 --> Language Class Initialized
INFO - 2015-07-21 08:23:28 --> Loader Class Initialized
INFO - 2015-07-21 08:23:28 --> Helper loaded: url_helper
INFO - 2015-07-21 08:23:28 --> Controller Class Initialized
INFO - 2015-07-21 08:23:28 --> Database Driver Class Initialized
INFO - 2015-07-21 08:23:28 --> Config Class Initialized
INFO - 2015-07-21 08:23:28 --> Hooks Class Initialized
DEBUG - 2015-07-21 08:23:28 --> UTF-8 Support Enabled
INFO - 2015-07-21 08:23:28 --> Utf8 Class Initialized
INFO - 2015-07-21 08:23:28 --> URI Class Initialized
INFO - 2015-07-21 08:23:28 --> Router Class Initialized
INFO - 2015-07-21 08:23:28 --> Output Class Initialized
INFO - 2015-07-21 08:23:28 --> Security Class Initialized
DEBUG - 2015-07-21 08:23:28 --> Global POST, GET and COOKIE data sanitized
INFO - 2015-07-21 08:23:28 --> Input Class Initialized
INFO - 2015-07-21 08:23:28 --> Language Class Initialized
INFO - 2015-07-21 08:23:28 --> Loader Class Initialized
INFO - 2015-07-21 08:23:28 --> Helper loaded: url_helper
INFO - 2015-07-21 08:23:28 --> Controller Class Initialized
INFO - 2015-07-21 08:23:28 --> Database Driver Class Initialized
INFO - 2015-07-21 08:23:28 --> File loaded: C:\Bitnami\wampstack-5.4.35-0\apache2\htdocs\application\views\test.php
INFO - 2015-07-21 08:23:28 --> Final output sent to browser
DEBUG - 2015-07-21 08:23:28 --> Total execution time: 0.1250
코드10 / 2015/07/22 01:18:58 / 추천 0
 function fovorite_add($option){
        $this->db->insert('test',$option);
    }

자세히보니 model의 함수명이 favorite이 아니라 fovorite으로 잘못 적혀있었네요...
물의를 일으켜 죄송합니다...
답변주신 변종원님, 한대승님 정말 감사드립니다!!!