| 제목 | [예제] 폼검증 필드배열 사용하기 | ||
|---|---|---|---|
| 글쓴이 | ci세상 | 작성시각 | 2009/08/26 17:17:23 | 
|  | |||
| 메뉴얼 : 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
                             | 
| 
                                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
                             
                                네 저런 비슷한 방법으로 우회해서 사용 햇었던거같네요 감사합니다 | 
예를 들어 ip를 적는 input이 10개가 (name="ip[]") 있고 rule에 valid_ip 를 넣게되면
에러메세지를 input마다 나눠주어 잘못된 ip에만 에러나도록 만들어야 하는 일이 생기게 됩니다.
그럴땐 조금 귀찮지만 key값을 넣어서 넘겨주면 깨끗이 해결이 되긴합니다..
아무튼 버그는 맞는가보군요
감사합니다