CI 코드

제목 [예제] 폼검증 필드배열 사용하기
글쓴이 ci세상 작성시각 2009/08/26 17:17:23
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 14289   RSS

메뉴얼 : http://codeigniter-kr.org/user_guide/libraries/form_validation.html#arraysasfields

위의 메뉴얼대로 하시면 배열처리시 고생좀 하게 되는데요 아래 부분을 참조하시면 안되시는 부분들 해결이 되실것입니다.^^

## 컨트롤러 ##

<?php

class Welcome extends Controller {

	function Welcome()
	{
		parent::Controller();	
	}
	
	function index()
	{
	
		$this->load->helper(array('form', 'url'));
		$this->load->library('form_validation');
			
		$this->form_validation->set_rules('title[]', 'title', 'required');
			
		if ($this->form_validation->run() == FALSE)
		{
			$this->load->view('welcome_message');
		}
		else
		{
			$this->load->view('welcome_success');
		}		
	}
}

/* End of file welcome.php */
/* Location: ./system/application/controllers/welcome.php */
## 뷰처리 ##

<?php echo form_open(''); ?>

<?php $title = set_value ( 'title[]' ); ?> 
<input name = "title[]" type = "text" value = "<?=($title)?$title[0]:' '?>" /> 
<input name = "title[]" type = "text" value = "<?=($title)?$title[1]:' '?>" /> 
<input name = "title[]" type = "text" value = "<?=($title)?$title[2]:' '?>" /> 

<input type="submit" value="Submit" />

</form> 


<?php echo validation_errors(); ?>

참조 : http://codeigniter.com/forums/viewthread/111929/

=> 위코드도 처음 화면시 잘못된 부분이 있어서 제가 좀더 수정을 했습니다. 그래도 중요한 팁을 알려준 포럼글입니다.^^



 다음글 프로토타입을 이용한 자바스크립트에서 CI languag...
 이전글 데이타 global로 설정하여 view에 넘기기 (6)

댓글

케이든 / 2009/08/27 00:06:50 / 추천 0
위에 view에서 처럼 에러메세지를 하나로 처리하면 문제가 없지만

예를 들어 ip를 적는 input이 10개가 (name="ip[]") 있고 rule에 valid_ip 를 넣게되면

에러메세지를 input마다 나눠주어 잘못된 ip에만 에러나도록 만들어야 하는 일이 생기게 됩니다.

그럴땐 조금 귀찮지만 key값을 넣어서 넘겨주면 깨끗이 해결이 되긴합니다..

아무튼 버그는 맞는가보군요

감사합니다
ci세상 / 2009/08/27 01:47:47 / 추천 0
## 컨트롤러 ##

<?php

class Welcome extends Controller {

	function Welcome()
	{
		parent::Controller();	
	}
	
	function index()
	{
	
		$this->load->helper(array('form', 'url'));
		$this->load->library('form_validation');
			
		$this->form_validation->set_rules('title[0]', 'title1', 'required');
		$this->form_validation->set_rules('title[1]', 'title2', 'required');
		$this->form_validation->set_rules('title[2]', 'title3', 'required');
			
		if ($this->form_validation->run() == FALSE)
		{
			$this->load->view('welcome_message');
		}
		else
		{
			$this->load->view('welcome_success');
		}		
	}
}

/* End of file welcome.php */
/* Location: ./system/application/controllers/welcome.php */

## 뷰 ##

<?php echo form_open(''); ?>


<input name = "title[0]" type = "text" value = "<?php echo set_value('title[0]'); ?>" /> 
<input name = "title[1]" type = "text" value = "<?php echo set_value('title[1]'); ?>" /> 
<input name = "title[2]" type = "text" value = "<?php echo set_value('title[2]'); ?>" /> 

<input type="submit" value="Submit" />

</form> 


<?php echo form_error('title[0]'); ?>
<?php echo form_error('title[1]'); ?>
<?php echo form_error('title[2]'); ?>

위와 같이 키값을 정확히 넣어주면 해결이 되겠지만 귀찮다고 하시면 아래와 같이 그냥 돌려버리세요^^

<?=set_value('title['.$index.']')?> 

<?=$title['.$index.']')?> 

<?=form_error('title[]')?> 
참고로 Validation.php 코어를 보면요

	function set_rules($data, $rules = '')
	{
		if ( ! is_array($data))
		{
			if ($rules == '')
				return;
				
			$data = array($data => $rules);
		}
	
		foreach ($data as $key => $val)
		{
			$this->_rules[$key] = $val;
		}
	}
위와같이 배열키값이 잡혀 있어서 찍을때에도 원하는 위치에 잡으려면 키를 잡아주는것이 맞는것 같습니다. 만약 키를 안 잡아 버리면 어느 위치인지 정확하게 파악되기가 힘든것 같습니다.





케이든 / 2009/08/27 02:12:12 / 추천 0


저런 비슷한 방법으로 우회해서 사용 햇었던거같네요

감사합니다