| 제목 | 게시판 리스트 페이지 이동시 500에러가 납니다. | ||
|---|---|---|---|
| 카테고리 | CI 4 관련 | ||
| 글쓴이 | 허접한개똥이 | 작성시각 | 2021/03/09 14:44:28 | 
|  | |||
| -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
                             모드를 개발자 모드로 전환 하시고 에러를 확인 해보세요. 아니만 서버로그를 참조하세요. |