CI 묻고 답하기

제목 게시판을 만들고 있는데, 궁금한 부분이 있어 질문합니다.
카테고리 CI 2, 3
글쓴이 lsh955 작성시각 2017/05/28 22:36:03
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 17146   RSS

등록할때는 문제없는데, 수정페이지 에서 만 한글로 작성하고 저장을 누르는데 한글이 깨지면서 데이터베이스 오류가 뜹니다...

그 이유를 몰라 포럼에 질문드립니다.........

 

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Main extends CI_Controller // URL과 상호작용하는 클래스 파일
{
	function __construct() 
	{
		parent::__construct();

		$this->load->helper(array('form', 'url'));

		$this->load->library('javascript');
	}
	
	// public은 클래스내, 클래스외의 어디에서라도 엑세스 가능
	// function은 사용자 정의 함수
	public function index() {
		$this->lists();
	}

	//리스트
	public function lists() {

		$this->load->model('board_m');
		
		$data['list'] = $this->board_m->get_list();
		
		$this->load->view('board/lists.html', $data);
	
	}

	//작성
	public function write() {

		// 라이브러리 로드
		$this->load->library('form_validation');

		$this->load->view('board/write.html');

	}

	//저장
	function save() {
		$this->load->model('board_m');

		// 두번째 파라미터의 TRUE는 데이터를 XSS 필터링 하게만듬.
		$itile		= $this->input->post('itile', TRUE);
		$content	= $this->input->post('content', TRUE);
		$name		= $this->input->post('name', TRUE);
		
		// 폼 검증 라이브러리 로드
		$this->load->library('form_validation');

		// required : 검사대상이 비어있으면 FALSE 를 리턴 한다.
		$this->form_validation->set_rules('itile', '제목', 'required');
		$this->form_validation->set_rules('name', '이름', 'required');
		$this->form_validation->set_rules('content', '내용', 'required');
		
		if ($this->form_validation->run() == FALSE) {

			$this->load->view('board/write.html');

		} else {

			$id	= $this->input->post('id', TRUE);	//수정,저장 구분자 	
			
			if($id) {

				$up_data = "itile = ".$itile.", content =".$content.", name=".$name;
				
				$where	 =	"id = ".$id;
								
				$data	 = $this->board_m->get_modify('items', $up_data, $where);
			
			} else {
				
				$data	= $this->board_m->post_write($itile, $content, $name);
			}
			

			header('Location: /index.php/main');
		}
	}


	//수정
	function modify() {

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

		$id = $this -> uri -> segment(3);

		$data['views'] = $this -> board_m -> get_view($id);

		$this->load->view('board/modify.html',$data);

	}	

	//조회
	function view() {
		$this->load->model('board_m');
	
		// 3번째 세그먼트인 id값을 가져와서 $id로 대입한다.q
		$id = $this -> uri -> segment(3);

		$data['views'] = $this -> board_m -> get_view($id);

		$this->load->view('board/view.html', $data);
	}

	//삭제
	function deletes() {
		$this->load->model('board_m');
		$id = $this -> uri -> segment(3);
		$this -> board_m -> get_deletes($id);

		// 삭제버튼을 누르면 바로 리스트페이지로 넘어간다.
		header('Location: /index.php/main');

	}
}

 

 

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Board_m extends CI_Model // 데이터베이스와 연동하여 사용하기위한 PHP 클래스 파일
{

	function __construct()
	{
		parent::__construct();

		$this->load->database();

	}
	
	//목록
	function get_list() {

		// items 테이블에 있는 모든 데이터를 불러와서 $sql 변수에 대입..
		$sql = "SELECT * FROM items";

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

		//마지막으로 사용한 쿼리 문자열을 리턴
		$this->db->last_query();
		
		// 쿼리수행의 결과로 순수한 배열을 리턴한다.
		$result = $query->result_array();
		return $result;
	}

	//작성
	function post_write($itile, $content, $name) {

		$sql = "INSERT INTO items (itile, content, name) VALUES ('" . $itile . "', '" . $content . "', '" . $name . "')";

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

	//수정
	function get_modify($table, $up_data, $where) {

		$sql ="update ".$table." set ".$up_data." where ".$where;
		
		$query = $this->db->query($sql);		
	
	}
	
	//조회
	function get_view($id) {

		// items 테이블에 id 컬럼을 찾아 id인 데이터만을 찾는다. 
		$sql	= "SELECT * FROM items WHERE id='" . $id . "'";

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

		// row();는 한줄의 결과만을 리턴하여 $result; 변수로 대입한다.
		$result = $query -> row();
		
		return $result;
	}

	//삭제
	function get_deletes($id) {
		
		// DELETE는 데이터 행을 삭제하며, id 컬럼을 찾아 id인 데이터만 골라서 삭제..
		$sql = "DELETE FROM items WHERE id = '" . $id . "'";
		
		$this -> db -> query($sql);
		
	}
}

 

<!DOCTYPE html>
<html>
	<head>
	<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
	<meta http-equiv="content-language" content="ko" />
	<meta name="apple-mobile-web-app-capable" content="yes" />
	<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
	<title>게시판 수정</title>
	<link type="text/css" rel='stylesheet' href="/application/css/board.css" />
	<link type="text/css" rel='stylesheet' href="/application/css/button.css" />
	</head>
	<body>
		<div id="board_write">
			<article id="board_area">
				<form name="f" method="post" action="/index.php/main/save/<?php echo $this->uri->segment(3); ?>" id="write_action" onsubmit="return check();">
				<input type="hidden" name='id' value="<?php echo $this->uri->segment(3); ?>">
				<input type="hidden" id="<?= $this->security->get_csrf_token_name() ?>" name="<?= $this->security->get_csrf_token_name() ?>" value="<?= $this->security->get_csrf_hash() ?>" />
					<table>
						<tbody>
							<tr>
								<th scope="row" style="height: 50px;">제목<span class="star">*</span></th>
								<td>
									<input type="text" name="itile" value="<?php echo $views -> itile;?>" autofocus/>
									<?php echo form_error('itile', '<div class="error">', '</div>'); ?>
									<?php echo form_error('username'); ?>
								</td>
							</tr>
							<tr>
								<th scope="row" style="height: 50px;">이름<span class="star">*</span></th>
								<td>
									<input type="text" name="name" value="<?php echo $views -> name;?>"/>
									<?php echo form_error('name', '<div class="error">', '</div>'); ?>
									<?php echo form_error('username'); ?>
								</td>
							</tr>
						</tbody>
					</table>
					<table>
						<tbody>
							<tr>
								<th scope="row" style="padding-right: 98px;">내용<span class="star">*</span></th>
								<td>
									<textarea name="content" rows="10" cols="60"><?php echo $views -> content;?></textarea>
									<?php echo form_error('content', '<div class="error">', '</div>'); ?>
									<?php echo form_error('username'); ?>
								</td>
							</tr>
						</tbody>
					</table>
					<div id="board_btn">
						<div class="fl">
							<span class="button small icon">
								<span class="icon_cancel"></span><a href="/index.php/main"><input type="button" value="취소"/></a>
							</span>
								<span class="button small icon"><span class="icon_save"></span><input type="submit" value="저장"/>
							</span>	
						</div>
					</div>
				</form>
			</article>
		</div>
	</body>
</html>

<script type="text/javascript">
	/*window.ready({
		$("#write_action").submit(function(){
			alert("dd");
			return false;
		});
	})*/
	function check(){
		 if(document.f.itile.value.length == 0){
		  alert("제목은 필수 이다");
		  document.f.focus();
		  return false;
		 }
		 if(document.f.name.value.length == 0){
		  alert("이름은 필수 이다");
		  document.f.focus();
		  return false;
		 }
		 if(document.f.content.value.length == 0){
		  alert("내용은 필수 이다");
		  document.f.focus();
		  return false;
		 }

		document.f.submit();
	}
</script>

 

 다음글 ajax long polling 방식으로 데이터를 주고... (6)
 이전글 foreach 문 입니다. 제가 작성한 코드보다 더 간... (3)

댓글

변종원(웅파) / 2017/05/29 08:23:05 / 추천 0
수정 페이지 캐릭터셋 확인해보세요.