CI 묻고 답하기

제목 post방식으로 받고 데이터베이스에 저장할 때 값 누락
카테고리 CI 2, 3
글쓴이 하재 작성시각 2017/09/14 20:58:16
댓글 : 15 추천 : 0 스크랩 : 0 조회수 : 15150   RSS

 

코드이그나이터를 이용해서 게시판을 짜고있습니다

 

if (isset($_POST['subject'])) {
    $subject = $_POST['subject'];
    $context = $_POST['context'];
}

$this->board_model->modify("board", $subject, $context, $id);

 

이러한 방식으로 모델에 modify라는 함수를 만들어서 update 쿼리문을 실행하는 것입니다.

public function modify($table, $subject, $context, $id) {
    $sql = "update $table set subject='$subject', context='$context' where id=$id";
    $this->db->query($sql);
}

 

위 내용을 실행하면 값이 들어가지 않고 공백으로 업데이트됩니다.

모델의 $sql문을 출력해보면 

string(59) "update board set subject='asdf', context='asdf' where id=32"

이런식으로 잘 나옵니다. 이것을 그대로 복사해서 db에서 실행시키면 값이 제대로 들어갑니다.

그리고

$this->board_model->modify("board", $subject, $context, $id);  이부분을
$this->board_model->modify("board", "asdf", "asdf", $id); 이렇게 실행시키면 값이 제대로 들어갑니다.

이런 이유로 $_post 쪽의 문제가 아닐까라고 생각해보고 여러가지 시도해봤지만 안됬습니다....

정확한 이유를 알고싶습니다.

 

 다음글 URL 이 바로 사이트 첫패이지가 될수 없나요? (포워... (3)
 이전글 완전 초보) MVC 질문드립니다! (2)

댓글

빛그림 / 2017/09/14 21:28:27 / 추천 0

$subject = $_POST['subject'] 으로 쓰지 마시고

$subject = $this->input->post('subject', true); 이렇게 쓰시는게 코드이그나이터 스럽게 쓰는 방법이고요.

딱이 안될만한건 없고, $_POST로 받은 데이터가 $subject, $context 등의 변수에 저장이 잘 안되서 그런듯 보이네요.

echo문으로 함 찍어보시는 테스트가 필요해보입니다.

 

하재 / 2017/09/14 22:19:34 / 추천 0

$subject = $this->input->post('subject', true); 이렇게 바꿨는데도 잘안됩니다..

값을 출력해봐도 string으로 잘 출력되고 잘 넘어가는데 update할때만 공백으로 들어갑니다 

한대승(불의회상) / 2017/09/15 07:54:04 / 추천 0
$this->output->enable_profiler() 를 사용하여 입력 받는 데이터를 확인해 보세요.
변종원(웅파) / 2017/09/15 09:11:35 / 추천 0
컨트롤러에서 출력, 모델에서 출력해서 비교해보세요.
하재 / 2017/09/15 11:11:41 / 추천 0
POST DATA  
$_POST['subject']   asdf
$_POST['context']   asdfaa

 

 

  DATABASE:  onlyboard (onlyBoard:$db)   QUERIES: 3 (0.0503 seconds)  (Hide)

0.0008   SELECT GET_LOCK('8b81ee6917cfd057ac90ab6086b84844'300) AS ci_session_lock 
0.0006   SELECT `data`
FROM `ci_sessions`
WHERE `id` = '4kjkd65tjnggjil3i72fr8oftjh6tmtj' 
0.0489   update board set subject='asdf'context='asdfaa' where id=24 

 

 

이런식으로 값은 잘들어가는데 역시 공백이 들어갑니다 ...ㅠ

하재 / 2017/09/15 11:16:34 / 추천 0
모델, 컨트롤러 두군데 다 출력해봤는데 문자열로 잘나옵니다...ㅠㅠ
변종원(웅파) / 2017/09/15 11:18:59 / 추천 0

그럼 ci 문제는 아닌 걸로 판단됩니다.

php, mysql 버전 및 php-mysql 연결, mysql, mysql-server 버전등 체크해보셔야 할 것 같네요.

배강민 / 2017/09/15 15:21:26 / 추천 0
아무리 봐도 오류가 안보여서 답이 나오길 기다리고 있었는데, 아직 안나왔네요. 정말 신기하네요. 뭐가 저걸 막는걸지 코드상으로는 도저히 모르겠네요. 흠
하재 / 2017/09/15 15:40:10 / 추천 0
답변주신분들 정말 감사합니다. mysql 쪽으로 한번 오류 찾아보고 답이 나오면 올리도록 하겟습니다 ㅠㅠ 감사합니다
개락 / 2017/09/16 08:39:08 / 추천 0
 $sql = "update $table set subject='".$subject."', context='".$context."' where id=$id";

위처럼 안써도 된다는걸 오늘 처음 알았어요 헛...

변종원(웅파) / 2017/09/16 21:22:02 / 추천 0
개락/ 그렇게 하시는게 가독성에서 유리하고 그래야하는게 맞습니다.
하재 / 2017/09/18 19:24:02 / 추천 0
update를 사용하면 쿼리가 두번실행되는거 같습니다 update로 조회수를 1올리는것을 실행시켯는데 2씩 올라가네요.. 어디서 문제인지 감이 안잡힙니다 아마 이거 때문에 값이 들어갓다가 어디서 빈값이 들어간거같은데 이 문제는 어떻게 해결하면 좋을까요
하재 / 2017/09/18 22:02:03 / 추천 0
<!-- jQuery (부트스트랩의 자바스크립트 플러그인을 위해 필요합니다) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 -->
<script src="js/bootstrap.min.js"></script>

이부분이 문제였습니다... 그 footer로빼놧었는데 뭐가 문제인지 모르겟지만 스크립트 부분 두군데를 주석처리하니까 모든게 해결되었습니다... 어디가 문제였을까요... 저게 문제가 될수있나요 ㅠㅠ?

배강민 / 2017/09/19 09:13:34 / 추천 0
허허 전X민님과 구두로 해당 이슈에 대해서 얘기해봤을때 전X민님이 "두번 실행되는거 아닌가?"라고 해서, 제가 상황상 그럴 수가 없다라고 했는데, 두번 이었다니 신기하네요
kaido / 2017/09/19 13:53:09 / 추천 0

jqeury 가 문제가 되진 않았으나 저도 비슷한 경우를 경험 했습니다

그냥 스크립트 하나 로드 하는건데 이상하게 조회수가 2개씩 올라가는 겁니다.

그래서 찾아보니 파트너사의 외부 js 때문에 update 가 2번때리고 있었.... 왜 그랬는지는 아직도 이해 불가...

[그렇다고 그 js 가 새로고침을 하거나 하는것도 아니었는데 말이죠]

 

참고로 ASP 에서 그랬으니... CI하고는 전혀 무관했었습니다.