CI 묻고 답하기

제목 [초보] 폼체크 후 되돌아올때 URL
글쓴이 제키 작성시각 2012/11/08 16:30:04
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 19465   RSS
안녕하세요.
요즘 CI 한참 공부하면서 게시판을 만들어보고 있는데요.

form.php 에서 폼 작성 후 submit 해서

form_validation.php 에서 $this->load->library('form_validation');  을 이용해 폼을 체크하도록 했습니다.

form_validation.php 에서
// rule 을 정하고...
$this->form_validation->set_rules('subject', '제목', 'trim|htmlspecialchars|required');
.....

// 폼 유효성 검사한 후 실패하면 form.php로 돌아감
if($this->form_validation->run() == FALSE) {
     $this->load->view('form');
}

여러 메뉴얼과 예제를 살펴보며 따라고하고 있는데, form.php 에서 submit 하면
브라우저 URL에 http://localhost/form_validation.php 로 항상 고정되어 있습니다.


원래는

브라우저URL : http://localhost/form.php http://localhost/form 에서 submit 하면,

http://localhost/form_validation.php http://localhost/form_validation 에서 유효성 검사한 후 문제가 발생하면

다시 http://localhost/form.php http://localhost/form 로 URL에 표시되어야 하는데 한번 submit하고 나면
 
브라우저 URL에 http://localhost/form_validation.php http://localhost/form_validation 로만 보여집니다.



기능에 대한 문제는 없는데 브라우저에 위와 같이 URL이 보여지는데 어떻게 하면 올바르게 출력될까요?


 다음글 Ci 2.1.0 CART 질문입니다 (7)
 이전글 세션질문입니다! (3)

댓글

한대승(불의회상) / 2012/11/08 16:46:51 / 추천 0
여러가지 방법이 있겠지만...

아래 주소의 샘플을 참조 하세요.

http://sample.cikorea.net/sample_view/class/form_validation
헛발이 / 2012/11/08 16:51:51 / 추천 0
앗! 한발 늦었땅~
위의 예제를 보시면 금방 아실테지만.. ㅋㅋ 덧붙여 보면...

입력 이나 수정 삭제 등등 보통 하나의 콘트롤러에서 합니다...

즉 입력받아 submit 하는 화면 즉 view에서 form의 action은

<?php echo form_open(); ?>
이렇게만 하시면 action의 값은 자기 자신을 불러지게 됩니다...
이론상으로 좀 이상하시겠지만요...

submit하면 다시 자기 자신을 불러 폼체크를 하고 에라가 나면 그냥 흘러나가 동일한 view를 화면에
찍어 주고 대신 에라들도 같이 가져가 화면에 출력하게 되죠....

위의 예제를 다시 확인 해 보시고 다시 해보시기 바랍니다..
제키 / 2012/11/08 17:28:43 / 추천 0

//불의화상님
저도 질문게시판에서 검색해서 알려주신 URL 문서 참고해서 작성했던 겁니다.

//헛발이
말씀처럼 form_open() 만하면 action이 없어서 form_validation.php로 넘길 수가 없잖아요.


화면상으로는 validate 하고나서 form으로 다시 넘어오기는 하는데
브라우저 url에는 계속 http://localhost/form_validation 로 남아있더라구요.

제가 예제로 작성한 소스를 보여드릴테니 조언 부탁드립니다.
(기초적인걸로 버벅되니 많이 답답하네요 ㅠㅠ)


############ VIEW (form.php) ############

<?=form_open('form_validation')?>
제목
<input type="text" name="subject" value="<?=set_value('subject');?>" style="width:400px" />
<?=form_error("subject")?>
<br/>
내용
<textarea name="content" style="width:400px;height:300px;"><?=set_value('content');?></textarea>
<?=form_error("content")?>
<br/>
<input type="submit" value="저장" />
</form>


############ CONTROLLER (form_validation.php) ############

class Form_validation extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
 
        //load lib
        $this->load->library('form_validation');
        $this->load->helper(array('form','url'));
    } 

    public function index()
    {
        // rules
        $this->form_validation->set_rules('subject', '제목', 'trim|htmlspecialchars|required');
        $this->form_validation->set_rules('content', '내용', 'htmlspecialchars|required');
       
        // 폼검증 실패
        if($this->form_validation->run() == FALSE) {
            $this->load->view('form');
        }
       
    }
}
 

헛발이 / 2012/11/08 17:41:09 / 추천 0
당연한거에요....

view의 form.php가 URL이 아니거든요...

URL에 보이는것은

http://도메인.com/콘트롤러/함수 

이렇게 되거든요...

view는 단순히 콘트롤러에서 불러주는 것뿐이에요...

주소를 form으로 하고 싶으시면 콘트롤러의 파일명과 class명을 form으로 하시면 되는데..

form 이거 예약어 아닌가 생각이 드네요 ...확인은 안해봤지만...
제키 / 2012/11/08 17:45:01 / 추천 0
아. 그렇군요.
( 제가 원래는 bbs_form.php 라고 파일명을 지정했는데 그냥 예를 들다보니 form.php 라고 했네요. )

그럼 view 에서 bbs_form.php 라고 했다면, controller 에서도 bbs_form.php 라고 하는게 맞다는거죠?

이런... CI 패턴을 이해했다고 생각했는데 ... ㅠㅠ

아무튼 감사드립니다.
헛발이 / 2012/11/09 11:56:45 / 추천 0
뭐 만드는 사람들의 맘이겠지만...
저를 예를 들면 파일명같은건 이렇게 하고 있답니다..
(표준은 아니니 참고만 하세요~)


예를 들어 도메인이 이런게 있습니다.

http://도메인.com/news

이 페이지에 접속해 보면 공지사항 같은 리스트 화면이 보여지게 하는 화면입니다..



그럴 경우 파일명은 다음과 같이 하고 있습니다...

application
    - controllers
        - news.php
    - libraries
        - news_lib.php
    - models
        - news_m.php
    - views
        - news
            - list_form.php
            - regist_form.php
            - modify_form.php
            - ....등등
변종원(웅파) / 2012/11/09 12:04:01 / 추천 0
 뷰 소스를 보면 당연히 form_validation으로 가게 되어 있습니다.
<?=form_open('form_validation')?>

이 부분을 원하는 주소로 바꿔주셔야죠.