우선 스터디용으로 하시는 작업이라면, html, js, php 이 세가지에 대해서 기본적인 처리 프로세스 및 데이터 전달 형식에 대해 우선 공부하시고 진행하시는것을 추천을 드립니다.
저도 잘 모르고 했을땐 적잖은 스트레스를 받았었거든요..
답변을 드리자면, g_chk 데이터는 POST 로 넘어올때 array 형식으로 넘어옴니다.
이유는 html 에서 name 값을 [] ( array) 로 선언했기 때문에 그렇고요,
에러의 예상되는 곳은 if( $g_chk == "Y" ) 일거같네요,
배열을 문자열과 비교해서 발생된게 아닐까 싶네요. 한번 if 구문 부터 함수 끝나는 곳까지 주석처리 해보고 실행시 에러가 발생하는지를 확인해보세요.,
if구문을 주석처리하고 실행하면 메시지 자체가 없어서 no message 에러가 발생합니다.
if( $g_chk == "Y" ) 이 붑ㄴ에서 문자열 Y를 어떤식으로 변경해주면 될까요?
$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( "삭제하실 항목을 선택해 주세요. " ) ;
}
알려주신대로 했는데도 no Message에러가 발생합니다. 값을 아예 받아오지 못하는거 같아요
그런데 저는 laravel 에대해서 잘 알지못해서 그러는데
$_POST 값이 있나요? request 에는어떤값이 들어있나요?
값이 전혀 들어가지가 않고 있습니다.
둘다 값이 없다고하면,,,, 그 전에 adm_bbs_group_Delete 를 호출하는곳을 찾아봐야 겠군요.
page not found 에러가 발생하지 않는걸로 보아 경로 문제는 아닌거 같습니다.
방금 검색해서 봤는데 라라벨에서는 $_POST를 사용하지 않고 $request를 통해 HTTP메소드를 조회
하더라구요. 그런데도 no message 에러가 발생하는걸로 보아 어느 부분에서 에러가 발생하는지가
감이 오지 않습니다. 물론 $_POST 대신 $request를 사용했습니다.
이전글을 보니
html 에서 form 에 onsubmit()이벤트로 처리하시던데,
그 함수안에서는 어떻게 처리가되고있는건가요?
아 그부분 삭제했습니다. 자바 스크립트로 위에 나와있는 return값으로 체크박스 체크시 삭제 / 아니면 삭제되지 않습니다. 문구를 작성했었습니다.
그리고 궁금한 점이 있는데 g_chk 데이터베이스 타입을 tinyint를 줬는데 이부분에서 타입을 잘못 줘서 그런거일수도 있지 않을까요?
우선 정확히 확인을 해야할 것은 request 에 값을 넘겨주는것을 확인하셔야 되요.
그래야 그 데이터로 삭제할 대상을 정할수 있으니까요.
tinyint로 타입을 설정했다면 Y가 아닌 1과0으로 표현해보는건 어떨까요?
1이면 체크박스에 체크된 것, 0이면 체크 안된 것
제가 이해하기로는 지금 adm_bbs_group_Delete 함수의 파라미터값이 아무것도 전달이 안되는것으로 이해가 되는데,
그 문제는 해결이 되었나요?
아직 해결이 되지 않았습니다ㅠㅠ
그 부분이 해결되야 지금 질문하신 부분이 처리되기 때문에,
그 부분을 먼저 해결하신 뒤에 다른곳을 보셔야 할꺼에요.
우선은 submit 되고 나서의 프로그램 처리 순서를 확인해보세요, 그러면 라라벨을 이해하는데 도움은 될꺼에요.
-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에러가 나옵니다.
라우트에서 post로 설정하고
checkbox의 form method를 post로 줬습니다
컨트롤러는 아래와 같이 작성했습니다.