foreach문에 대해 질문드립니다.
본문
안녕하세요
매번 sir회원님들의 도움을 많이 받아가고있는 클래스는영원히라고합니다.
정말 감사드립니다.
오전에 질문글을 올렸었는데 댓글채택을 잘못눌러버려 다시 질문글을 올리게되었습니다.
이런적이 처음인데 질문글의 답변을 채택하면 질문글이 그냥 종결되어버리는것인지도 여쭙습니다^^;;
다름이아니라
foreach ($f_idx_arr as $f_idx) {
$result = $db->Execute($stmt, array($f_idx));
}
foreach문에서 이렇게 나열되어있을경우는
http://www.foodmall2020.com/check_proc.php?f_idx=1234&SqlType=food_delete
이런식 단일값을 집어서 삭제를 못하는지 궁금합니다.
혹시 누가 상품을 외부에서 f_idx값을 바꿔서 지운다고하면 문제가 커질 것 같아 여쭙습니다.
홈페이지 내부에서는 다행히 해결하여 잘 작동하는데 외부주소로 삭제는 불가할지 여쭙습니다.
감사합니다!
답변 2
1.
foreach ($f_idx_arr as $f_idx) {
$result = $db->Execute($stmt, array($f_idx));
}
> $f_idx_arr 변수의 값이 Array나 Object일 때, 그 크기만큼 반복합니다.
Array나 Object가 아니면 실행이 될까요?
2.
http://www.foodmall2020.com/check_proc.php?f_idx=1234&SqlType=food_delete
이런식 단일값을 집어서 삭제를 못하는지 궁금합니다.
> check_proc.php에서 어떻게 처리하느냐에 따라 삭제 여부가 달라집니다.
삭제할 수도 있고, 삭제하지 못할 수도 있지요. 아래에 추가.
3.
혹시 누가 상품을 외부에서 f_idx값을 바꿔서 지운다고하면 문제가 커질 것 같아 여쭙습니다.
홈페이지 내부에서는 다행히 해결하여 잘 작동하는데 외부주소로 삭제는 불가할지 여쭙습니다.
URL을 통해 f_idx, SqlType 값 2가지만을 이용해 정상적으로 레코드를 삭제할 수 있다면
그 값을 변경해 얼마든지 지울 수 있겠죠?
무작위 대입으로 인한 삭제를 막으려면
- 관리자 여부 체크
- 해당 레코드의 작성자 여부 체크
- 접속 경로 체크(조작이 가능한 정보이긴 하지만)
- 기타 등등(예로 하나 적어보자면 일회성 작업[사전에 밑준비가 필요하긴 하지만])
이런저런 추자적인 조건을 넣어 처리를 해주면 됩니다.
구현 나름이지요.
만약 걱정이되시면 로직을 조금 개선해보세요
foreach ($f_idx_arr as $f_idx) {
$result = $db->Execute($stmt, array($f_idx));
}
이렇게 된 문장을
if (is_array($f_idx_arr)) {
foreach($f_idx_arr as $_idx) {
$result = $db->Execute($stmt, array($_idx));
}
}
와 같이 하셔도 되고
이외에도 다양한 보강방법은 있습니다만
가장 간단하게 배열일때 해당 변수를 별도 분해를 하는건 안전한 방법입니다.