질문을 삭제하지 말아주세요.!
 
1
0
-1

라우트에서 post로 설정하고

checkbox의 form method를 post로 줬습니다

컨트롤러는 아래와 같이 작성했습니다.

MethodNotAllowedHttpException에러가 나왔는데  어떤 부분이 틀린건가요?

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      우선 스터디용으로 하시는 작업이라면, html, js, php  이 세가지에 대해서 기본적인 처리 프로세스 및 데이터 전달 형식에 대해 우선 공부하시고 진행하시는것을 추천을 드립니다. 

      저도 잘 모르고 했을땐 적잖은 스트레스를 받았었거든요..

      답변을 드리자면, g_chk 데이터는 POST 로 넘어올때 array 형식으로 넘어옴니다.

      이유는 html 에서 name 값을 [] ( array) 로 선언했기 때문에 그렇고요,

      에러의 예상되는 곳은 if( $g_chk == "Y" ) 일거같네요, 

      배열을 문자열과 비교해서 발생된게 아닐까 싶네요. 한번 if 구문 부터 함수 끝나는 곳까지 주석처리 해보고 실행시 에러가 발생하는지를 확인해보세요.,

      1. 김은식

         if구문을 주석처리하고 실행하면 메시지 자체가 없어서 no message 에러가 발생합니다. 

         if( $g_chk == "Y" ) 이 붑ㄴ에서 문자열 Y를 어떤식으로 변경해주면 될까요?

      2. catchu87

        $g_chk 가 배열형식이기 때문에 리스트에 체크된 갯수만큼 배열형식으로 넘어올겁니다.

        배열이니까 각 요소별로 체크해서 삭제해주는 작업을 해주셔야해요.

        foreach 또는 for , while 문으로 반복을 하면서 처리해주셔야 하는데 

        방식을 foreach 를 예로 들면, 

        $deleteItemCnt = 0;

        foreach( $g_chk as  $checkValue ) 

        {

          if (  $checkValue == "Y" ) {

             DB:table ... .→delete();

             $delteItemCnt ++;

         } 

        }

        if( $deleteItemCnt > 0 ){

            return alert(   $deleteItemCnt  . "건이 삭제되었습니다.");

        }else{

           return alert( "삭제하실 항목을 선택해 주세요. " ) ;

        }


      3. 김은식

        알려주신대로 했는데도  no Message에러가 발생합니다. 값을 아예 받아오지 못하는거 같아요 

      4. catchu87

        그런데 저는 laravel 에대해서 잘 알지못해서 그러는데 

        $_POST 값이 있나요? request 에는어떤값이 들어있나요?

      5. 김은식

        값이 전혀 들어가지가 않고 있습니다.

      6. catchu87

        둘다 값이 없다고하면,,,, 그 전에 adm_bbs_group_Delete 를 호출하는곳을 찾아봐야 겠군요. 

      7. 김은식

        page not found 에러가 발생하지 않는걸로 보아 경로 문제는 아닌거 같습니다. 

        방금 검색해서 봤는데 라라벨에서는 $_POST를 사용하지 않고 $request를 통해 HTTP메소드를 조회

        하더라구요. 그런데도 no message 에러가 발생하는걸로 보아 어느 부분에서 에러가 발생하는지가

        감이 오지 않습니다. 물론 $_POST 대신 $request를 사용했습니다.

      8. catchu87

        이전글을 보니 

        html 에서 form 에 onsubmit()이벤트로 처리하시던데, 

        그 함수안에서는 어떻게 처리가되고있는건가요?

      9. 김은식

        아 그부분 삭제했습니다. 자바 스크립트로 위에 나와있는 return값으로 체크박스 체크시 삭제 / 아니면 삭제되지 않습니다. 문구를 작성했었습니다. 

        그리고 궁금한 점이 있는데 g_chk 데이터베이스 타입을 tinyint를 줬는데 이부분에서 타입을 잘못 줘서 그런거일수도 있지 않을까요?

      10. catchu87
        1. tinyint 면 숫자 밖에 입력되지않습니다
        2. 지금 저희가 비교하고있는것은 값이 전달되었는지 확인하는 것이기 때문에 현재 상태에서는 고려할 사항이 아니에요.

        우선 정확히 확인을 해야할 것은 request 에 값을 넘겨주는것을 확인하셔야 되요.

        그래야 그 데이터로 삭제할 대상을 정할수 있으니까요.


      11. 김은식

        tinyint로 타입을 설정했다면 Y가 아닌 1과0으로 표현해보는건 어떨까요?

        1이면 체크박스에 체크된 것,  0이면 체크 안된 것

      12. catchu87

        제가 이해하기로는 지금 adm_bbs_group_Delete  함수의 파라미터값이 아무것도 전달이 안되는것으로 이해가 되는데, 

        그 문제는 해결이 되었나요?

      13. 김은식

        아직 해결이 되지 않았습니다ㅠㅠ

      14. catchu87

        그 부분이 해결되야 지금 질문하신 부분이 처리되기 때문에, 

        그 부분을 먼저 해결하신 뒤에 다른곳을 보셔야 할꺼에요.

        우선은 submit 되고 나서의 프로그램 처리 순서를 확인해보세요, 그러면 라라벨을 이해하는데 도움은 될꺼에요.

      15. 김은식

        -view-
        <input type="checkbox" name="g_chk[]" value="Y">

        -컨트롤러-
        public function adm_bbs_groupDelete(Request $request) {
        $gr_id = $request->input("gr_id");
        $g_chk=$request->input('g_chk[]');

        $deleteItemCnt = 0;
        foreach( $g_chk as $checkValue )
        {
        if ( $checkValue == "Y" ) {
        DB::table(g5_group)->where("gr_id", $gr_id)->delete();
        $deleteItemCnt ++;
        }
        }
        if( $deleteItemCnt > 0 ){
        return alert($deleteItemCnt . "건이 삭제되었습니다.","/admpage/bbs/adm_bbs_group");
        }else{
        return alert("삭제하실 항목을 선택해 주세요. ","/admpage/bbs/adm_bbs_group" ) ;
        }
        }

        코드를 여기까지 수정하고 실행해본 결과 어디가 문제인지를 모르겠습니다. 여전히 no Message에러가 나옵니다.

      CommentAdd your comment...