CI 묻고 답하기

제목 게시판 리스트 페이지 이동시 500에러가 납니다.
카테고리 CI 4 관련
글쓴이 허접한개똥이 작성시각 2021/03/09 14:44:28
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 9867   RSS

-model-

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

/*
 * @Fnc : 게시판 모델구현
 * @Create Date : 2017-11-23
 * @Author : MS
 */
class Project_m extends CI_Model {
	
	function __construct() {
		
		parent::__construct();
		
	}
	
	/**
	 * 공지사항 자료실 최근게시물 조인 추출
	 *
	 */
	public function get_total_recent($args){
		$sql ="select * from ".$args['tb1']." union select * from ".$args['tb1']."";
		$query = $this->db->query($sql);
		return $query->result();
	}
	
	
	public function get_category_info($args){
		$this->db->select('*');
		$this->db->from('project_category');
		if($args['category']){
			$this->db->where('project_category.category', $args['category']);
		}
		$query = $this->db->get();
		$ret = '';
		if ($query->num_rows() > 0) {
			$result = $query->row_array();
			$ret = $result;
		}
		return $ret;
	} 
	
	/**
	 * 최근게시물 추출
	 * @param unknown $args
	 * @return unknown|boolean
	 */
	public function get_recent($args){
		$this->db->select('project.SEQ');
		$this->db->select('project.SUBJECT');
		$this->db->select('project.CONTENTS');
		$this->db->select('project.REGDT');
		$this->db->select('sysaccount.SYSID');
		$this->db->from('project');
		$this->db->join('sysaccount', 'project.REGID = sysaccount.SEQ', 'left');
		$this->db->limit($args['limit']);
		$this->db->where('project.DELYN !=', '1');
		/$this->db->where('project.category', $args['category']);
		$this->db->order_by('project.'.$args['orderby'],'desc');
		
		$query = $this->db->get();
		//echo $this->db->last_query();
		if ($query->num_rows() > 0) {
			$ret = $query->result_array();
			foreach($ret as $k=>$v){
				$ret[$k]['SUBJECT'] = trim(strip_tags($ret[$k]['SUBJECT']));
			}
			return $ret;
		} else {
			return FALSE;
		}
	}
	
	/**
	 * 공지사항 게시물 갯수 추출
	 * @param unknown $args
	 * @return unknown
	 */
	public function get_counts($args){
		#일반 검색
		if($args['searchstr'] != ''){
			switch ($args['searchtype']) {
				case 0 :
					$this->db->where('(project.SUBJECT like "%' . $args['searchstr'] . '%" or project.CONTENTS like "%' . $args['searchstr'] . '%" )');
					break;
				case 1 :
					$this->db->where('(project.SUBJECT like "%' . $args['searchstr'] . '%" )');
					break;
				case 2 :
					$this->db->where('(project.CONTENTS like "%' . $args['searchstr'] . '%" )');
					break;
			}
		}
		$this->db->where('project.category', $args['category']);
		$this->db->where('DELYN !=', '1');
		$this->db->from('project');
		$query = $this->db->get();
		$ret = $query->num_rows();
		return $ret;
	}
	
	
	/**
	 * 일반 게시물 목록 조회
	 * @param unknown $args
	 * @return unknown|boolean
	 */
	public function get_lists($args){
		#일반검색
		if($args['searchstr'] != ''){
			switch ($args['searchtype']) {
				case 0 :
					$this->db->where('(project.SUBJECT like "%' . $args['searchstr'] . '%" or project.CONTENTS like "%' . $args['searchstr'] . '%" )');
					break;
				case 1 :
					$this->db->where('(project.SUBJECT like "%' . $args['searchstr'] . '%" )');
					break;
				case 2 :
					$this->db->where('(project.CONTENTS like "%' . $args['searchstr'] . '%" )');
					break;
			}
		}
		
		$this->db->select('project.*');
		$this->db->select('
				sysaccount.SYSID,
				sysaccount.NAME,
				');
		$this->db->select('(select count(*) from project_file where project.SEQ = project_file.PROJECTSEQ) AS FILECNT');
		$this->db->from('project');
		$this->db->join('sysaccount', 'project.REGID = sysaccount.SEQ', 'left');
		$this->db->limit($args['limit'], $args['offset']);
		$this->db->where('project.category', $args['category']);
		$this->db->where('sysaccount.DELYN =', '0');
		$this->db->where('project.DELYN =', '0');
		$this->db->order_by('SEQ','desc');
		//echo $this->db->last_query();
		$query = $this->db->get();
		if ($query->num_rows() > 0) {
			$ret = $query->result_array();
			return $ret;
		} else {
			return FALSE;
		}
	}
	
	/**
	 * @공지 게시물 목록 조회
	 * @param unknown $args
	 * @return unknown|boolean
	 */
	/* public function get_notice2_lists($args){
		$this->db->select(
				$args["tb"].'.*'
				);
		$this->db->select('
				sysaccount.SYSID,
				sysaccount.NAME,
				');
		$this->db->from($args['tb']);
		$this->db->join('sysaccount', $args['tb'].'.REGID = sysaccount.SYSID', 'left');
		$this->db->limit($args['limit'], $args['offset']);
		$this->db->where($args['tb'].'.GUBUN =', '2');
		$this->db->where('sysaccount.DELYN !=', '1');
		$this->db->where($args['tb'].'.DELYN !=', '1');
		$this->db->order_by('project.SEQ','desc');
		//echo $this->db->last_query();
		$query = $this->db->get();
		if ($query->num_rows() > 0) {
			$ret = $query->result_array();
			return $ret;
		} else {
			return FALSE;
		}
	}
	 */
	
	/**
	 * 상세 조회
	 * @param unknown $args
	 * @return unknown|boolean
	 */
	public function get_detail($args){
		$this->db->select('project.*');
		$this->db->select('
				sysaccount.SYSID,
				sysaccount.NAME,
		');
		$this->db->from('project');
		$this->db->join('sysaccount', 'project.REGID = sysaccount.SEQ', 'left');
		$this->db->where('sysaccount.DELYN !=', '1');
		$this->db->where('project.SEQ', $args['seq']);
		$this->db->where('project.category', $args['category']);
		$this->db->where('project.DELYN !=', '1');
		$query = $this->db->get();
		if ($query->num_rows() > 0) {
			$ret = $query->row_array();
			return $ret;
		} else {
			return FALSE;
		}
	}
	/**
	 * 조회수
	 * @param unknown $args
	 * @return boolean
	 */
	public function pulus_hit($args){
		$this->db->set('READCNT', 'READCNT + 1', FALSE);
		$this->db->where('SEQ', $args['seq']);
		$this->db->update('project');
		//echo $this->db->last_query();
		if ($this->db->affected_rows() > 0) {
			return TRUE;
		} else {
			return FALSE;
		}
	}
	
	
	
	
	/**
	 * 이전글, 다음글 구현
	 * @param 테이블 $tb
	 * @param board PK $board_id
	 * @return 테이터 1 반환
	 */
	public function get_prev($board_id) {
		$query = $this->db->query("SELECT project.SEQ, project.SUBJECT, project.REGDT, sysaccount.NAME FROM `project` LEFT JOIN sysaccount ON project.REGID = sysaccount.SEQ WHERE (project.SEQ < '".$board_id."' AND project.DELYN = '0' AND project.CATEGORY = '".$category."') ORDER BY project.SEQ DESC LIMIT 0,1;" );
		return $query->row_array();
	}
	public function get_next($board_id) {
		$query = $this->db->query( "SELECT project.SEQ, project.SUBJECT, project.REGDT, sysaccount.NAME FROM `project` LEFT JOIN sysaccount ON project.REGID = sysaccount.SEQ WHERE (project.SEQ > '".$board_id."' AND project.DELYN = '0' AND project.CATEGORY = '".$category."')ORDER BY project.SEQ ASC LIMIT 0,1;" );
		return $query->row_array();
	}
	
	
	/**
	 * 파일첨부 정보
	 * @param unknown $args
	 * @return boolean
	 */
	public function get_file_info($args){
		$this->db->select('*');
		$this->db->from('project_file');
		$this->db->where('PROJECTSEQ', $args['seq']);
		$this->db->where('DELYN', 0);
		$query = $this->db->get();
		if ($query->num_rows() > 0) {
			$ret = $query->result_array();
			return $ret;
		} else {
			return FALSE;
		}
	}
	
}

/* End of file */

-컨트롤-

<?php if(!defined('BASEPATH')) exit ( 'No direct script access allowed' );
/*
 * @Fnc : 게시판 구현(notice, pds)
 * @Create Date : 2017-11-23
 * @Author : MS
 */
class Project extends CI_Controller {
	# 전역 view_data
	var $view_data = array ();
	#page
	var $context = 'contents1';
	
	var $langs = 'en';
	
	public function __construct() {
		parent::__construct ();
		
		#MY_Output class's nocache() method
		$this->output->nocache();
		
		#libraries / helpers
		$this->load->helper('url');
		$this->load->helper('alert');
		$this->load->helper('fnc');
		$this->load->helper('form');
		
		$this->load->library('form_validation');
		$this->load->library('pagination');
		
		//$this->load->model('member_m');
		$this->load->model('project_m');
		
		# login 체크
		/*
		$this->load->library('auth');
		$this->view_data ['logged'] = $this->auth->is_logged();
		$this->view_data ['admin_logged'] = $this->auth->is_admin_logged();
		
		# 로그인 후 회원 정보
		$this->view_data ['logged_data'] = $this->auth->get_member_info();
		*/
		
		# 카테고리 표시
		$this->category = $this->uri->segment(4,0);
		$this->project_info = $this->project_m->get_category_info(array('category'=>$this->category,'langs'=>$this->langs));
		if (empty($this->project_info['CATEGORY']) != FALSE) {
			alert('생성되지 않은 게시판입니다.');
		}
			
		$this->view_data['category_name'] = $this->project_info['NAMES'];
		$this->view_data['category'] = $this->project_info['CATEGORY'];
		
		#게시판 디자인
		$this->view_data['appearance'] = $this->project_info['APPEARANCE'];
		
		#카테고리 정보
		$this->view_data['category_list'] = $this->project_info;

		#홈페이지 정보
		$this->load->library('setupinfo');
		$this->view_data['setupinfo'] = $this->setupinfo->info($this->langs);
		
		#언어
		$this->view_data['langs'] = $this->langs;
		
		//프로파일러
		$this->output->enable_profiler(FALSE);
		
	}
	
	/**
	 * index
	 */
	public function index() {
		show_404();
	}
	
	
	/**
	 * 목록
	 * @param  $arg
	 */
	public function lists(){
		if (empty($this->category)){show_404();}
		#게시판종류
		$model_data['category'] = $this->category;
		
		#쿼리스트링
		$querystring = $_SERVER['QUERY_STRING'];
		$this->view_data['query_string'] = $querystring;
		
		# pagination 환경 설정
		$this->pagination_config = $this->config->item('pagination');
		//$this->pagination_config['per_page'] = 10; # 페이지당 표시할 게시물수
		$this->pagination_config['uri_segment'] = 5; # 페이지 번호가 지정될 세그먼트 번호
		$this->pagination_config['num_links'] = 2; # 표시될 페이지수 / 2 (5면 10개씩 표시됨)
		$this->pagination_config['base_url'] = site_url('/'.$this->langs.'/project/lists/'.$this->category.'/');
		$this->pagination_config['suffix'] = '?'.$querystring;
		
		#검색 값 추출
		$searchType = $this->input->get('searchType', TRUE); //제목, 내용 타입
		$searchStr= $this->input->get('searchStr', TRUE); //검색 단어
		
		#검색
		$model_data['searchtype'] = $searchType;
		$model_data['searchstr'] = $searchStr;
		
		#언어
		$model_data['langs'] = $this->langs;
		
		# 총 카운트 수
		$total_rows = $this->project_m->get_counts($model_data);
		$this->view_data['counts'] = $total_rows;
				
		# 페이지네이션 설정
		$this->pagination_config['total_rows'] = $total_rows;
		$this->pagination_config ['per_page'] = 10;
		$this->pagination->initialize($this->pagination_config);
			
		# 검색 설정이 완료 된 후 페이지네이션 추가.
		$this->view_data['pagination'] = $this->pagination->create_links();
				
		# 기본 view를 위한 모델 데이터
		$model_data['limit'] = $this->pagination_config['per_page'];
		$model_data['offset'] =$this->uri->segment($this->pagination_config['uri_segment'], 0);
				
		#게시물 추출
		$this->view_data['records'] = $this->project_m->get_lists($model_data);
		
		switch ($this->category){
			case 'en_project' :
				$this->load->view('/web/'.$this->langs.'/page/contents1/lists', $this->view_data);
				break;
			case 'en_notice' :
				$this->load->view('/web/'.$this->langs.'/page/contents1/lists', $this->view_data);
				break;
		}
		
		
	}
	
	
	/**
	 * url 중 키 값을 구분하여 값을 가져오도록
	 *
	 * @param Array $url : segment_explode 한 url 값
	 * @param String $key :  가져오려는 값의 key
	 * @return String $url[$k] : 리턴 값
	 */
	
	function url_explode($url, $key) {
		$cnt = count($url);
		
		for ($i = 0; $cnt > $i; $i++) {
			if ($url[$i] == $key) {
				$k = $i + 1;
				return $url[$k];
			}
		}
	}
	
	/**
	 * HTTP의 URL을 "/"를 Delimiter로 사용하여 배열로 바꿔 리턴한다.
	 *
	 * @param String 대상이 되는 문자열
	 * @return string[]
	 */
	function segment_explode($seg) {
		// 세그먼트 앞 뒤 "/" 제거 후 uri를 배열로 반환
		
		$len = strlen($seg);
		
		if (substr($seg, 0, 1) == '/') {
			$seg = substr($seg, 1, $len);
		}
		
		$len = strlen($seg);
		
		if (substr($seg, -1) == '/') {
			$seg = substr($seg, 0, $len - 1);
		}
		
		$seg_exp = explode("/", $seg);
		return $seg_exp;
	}
	
	
	
	
	
	
	/**
	 * 상세보기
	 * @param unknown $arg
	 */
	public function view() {
		if (empty($this->uri->segment(5,0))){show_404();}
		
		$model_data = array(
				'category' => $this->category,
				'seq' => $this->uri->segment(5,0)
		);
		
		$this->project_m->pulus_hit($model_data);
			
		# 이전글 다음글
		$this->view_data ['prev'] = $this->project_m->get_prev($this->uri->segment(4, 0), $this->uri->segment(5, 0) );
		$this->view_data ['next'] = $this->project_m->get_next($this->uri->segment(4, 0), $this->uri->segment(5, 0) );
		
		# 레코드
		$this->view_data['records'] = $this->project_m->get_detail($model_data);
		
		# 파일레코드
		$this->view_data['filerecords'] = $this->project_m->get_file_info($model_data);
		
		switch ($this->category){
			case 'en_project' :
				$this->load->view('/web/'.$this->langs.'/page/contents1/view', $this->view_data);
				break;
			/*case 'en_notice' :
				$this->load->view('/web/'.$this->langs.'/page/contents1/view', $this->view_data);
				break;*/
		}
		
	}
	
	/**
	 * 글작성
	 */
	public function write() {
		
		# 인증 되어 있지 않을 경우 목록으로 리디렉션
		if ($this->session->userdata ( 'logged_in' ) == FALSE) {
			alert('회원만 이용이 가능합니다.' ,'/member/login');
		}
		# 유저 정보 조회
		$model_data_retrieve = array();
		$this->view_data['memid'] = $this->session->userdata('memid');
		$model_data_retrieve['memid'] = $this->view_data['memid'];
		$retrieve = $this->member_m->get_member_info($model_data_retrieve);
		$this->view_data['retrieve'] = $retrieve;
		//print_r($model_data_retrieve);
		//print_r($this->view_data);
		
		# 밸리데이션
		$this->form_validation->set_rules('subject', '제목', 'trim|required|xss_clean');
		$this->form_validation->set_rules('gubun', '구분', 'trim|required');
		$this->form_validation->set_rules('secretYN', '공개여부', 'trim|required');
		$this->form_validation->set_rules('contents', '내용', 'trim|required');
		
		# error 설정
		$this->form_validation->set_message('required', '%s(는)은 필수 입력입니다!');
		
		$form_validate = $this->form_validation->run();
		//print_r($this->input->post());
		//print_r($_POST);
		# 밸리데이션 체크 실패 | 성공
		if ($form_validate == FALSE) {
			
			$this->load->view('/cs/qna_write', $this->view_data);
			
			//echo validation_errors();
		} else {
			# 모델데이터 세팅
			$model_data = array(
					'SUBJECT' => $this->input->post('subject', TRUE),
					'GUBUN' => $this->input->post('gubun', TRUE),
					'SECRETYN' => $this->input->post('secretYN', TRUE),
					//'CONTENTS'=> $_POST['contents'],
					'CONTENTS'=> $this->input->post('contents', TRUE),
					'REGID' => $retrieve['MEMID'],
					'REGDT' => date('Y-m-d h:i:s'),
					'DELYN' => 0
			);
			//print_r($model_data);
			
			# 게시물 작성
			if ($this->project_m->qna_write($model_data)) {
				redirect('/project/lists/'.$this->uri->segment(3,0));
			}
		}
	}
	
	/**
	 * QNA 취소
	 */
	public function cancel(){
		if($this->uri->segment(3,0) != 'qna'){
			alert('비정상적인 접근입니다.');
		}
		
		# 인증 되어 있지 않을 경우 목록으로 리디렉션
		if ($this->session->userdata ( 'logged_in' ) == FALSE) {
			alert('회원만 이용이 가능합니다.' ,'/member/login');
		}
		
		#유저 정보 조회
		$memseq = $this->session->userdata('memseq');
		$model_data ['seq'] = $memseq;
		$member_data = $this->member_m->get_member_info($model_data);
		
		// 유저 정보와 작성자가 같으면 삭제 가능
		if ($member_data['MEMBERSEQ'] != $memseq) {
			alert('작성자만 취소가 가능 합니다.');
		}
		
		# 게시물 히든처리
		$delmsg = $member_data['NAME'].'('.$member_data['MEMID'].') 님이 삭제 하였습니다.';
		$model_data = array (
				'QNASEQ' => $this->input->post('seq', TRUE),
				'DELYN' => '1',
				'DELDT' => date('Y-m-d H:i:s'),
				'DELID' => $member_data['MEMID'],
				'DELRSN' => $delmsg
		);
		
		//print_r($model_data);
		
		if ($this->project_m->qna_update($model_data)) {
			redirect('/project/lists/' . $this->uri->segment(3,0) . '/');
		}
		
		
	}
	
	
}
/* End of file */

url은 도메인/컨트롤파일이름/lists/카테고리 

순으로 들어가면 500에러가 뜹니다..

지금 현재의 페이지 모습은 아래와 같습니다..

선배님들의 따뜻한 조언좀 부탁드리겠습니다..

어디가 문제인지...ㅠㅠ

 

 다음글 트렌젝션 질문드립니다2 (5)
 이전글 Pagination 사용시 한글 깨지는 문제가 있어 문... (2)

댓글

PureAni / 2021/03/09 16:23:33 / 추천 0
lists 함수에 segment 를 넣어보시면 어떤가요?
테러보이 / 2021/03/09 16:33:04 / 추천 0

모드를 개발자 모드로 전환 하시고 에러를 확인 해보세요.

아니만 서버로그를 참조하세요.