2014-03-04 7 views
1

삭제 버튼이있는 양식이 있습니다. 나는 사용자가 한번에 삭제하고자하는 모든 항목을 선택할 수 있기를 바랍니다. 에코를 표시 할 수 있었지만 항목이 여전히 페이지에 남아 있습니다. 왜 그런 일이 일어 났는지 지적 해 주시겠습니까? 어떤 도움을 주셔서 감사합니다!PHP가 체크 박스가있는 여러 행을 삭제하는 중

삭제 버튼 :

<input name="del_btn" type="submit" value="Delete"> 

체크 :

if (isset($_POST['del_btn']) && $_POST['del_btn']){ 
     for($i = 0; $i < count($_POST['checkbox']); $i++){ 
      if (isset($_POST['checkbox'])) { 
       mysql_query("DELETE FROM `posts` WHERE `id` = '" . $_POST['checkbox'][$i] . "' LIMIT 1"); 
       echo 'deleted'; 
      } 
     } 
} 

항목 '확인란이 정말 컨트롤러에 정의하는 방법을 변수에 따라 달라집니다

<input name="checkbox[]" type="checkbox" id="<?php echo $id; ?>" /> 
+0

양식에 게시물 값이 표시됩니다. 일부 입력 코드를보기 파일에 표시 할 수 있습니까? – Dan

+0

보기 필드는 해당 게시물 (ID, 제목 ..)의 필요한 변수를 검색하는 while 루프 안에있는 div입니다. – Gadgetster

+0

좋아, 그럼 내 대답은 # 1을 참조하십시오. if 문 끝에서 리디렉션을 만듭니다. 페이지에 텍스트 필드가 있는지 확실하지 않았습니다. 지금 네가하는 말을 이해한다. 또 다른 옵션은 jquery를 사용하여 체크 된 숨기기 행을 추가하는 것입니다. – Dan

답변

2

, 어떻게 보기 파일에 표시됩니다.

당신이/숨기기 할 수있는 양식의 값을 삭제하려면 :

  1. 페이지를 새로 고침 : 새 페이지로 다시 사용자를 전송하여 if (isset($_POST['del_btn']) && $_POST['del_btn']){ 문장의 끝에 리디렉션을 만들 수 있습니다.
  2. jQuery를 사용하여 체크 박스가 선택된 div를 숨 깁니다.
  3. 게시물의 뒤에 컨트롤러에서 변수를 재정의하면 NULL이됩니다.
  4. 뷰의 값에 3 진 연산자를 추가하십시오 (예 : <input name="form_input" type="text" value=<?=isset($_POST['del_btn'] ? NULL : $form_input?>>). 즉, del_btn이 제출 될 때 양식이 NULL로 표시됨을 의미합니다.
+0

명확하지 않거나 숨기지 않습니다. 데이터베이스에서 영원히 거래를 삭제하고 싶습니다. 내가 아는 바로는, 귀하의 제안은 바로보기 필드에서 숨기는 것입니까? – Gadgetster

+0

예, mysql_query ("DELETE FROM'posts' WHERE'id' = '". $ _POST ['checkbox '] [$ i]. "'LIMIT 1");을 사용하여 데이터베이스에서 삭제됩니다. 그러나 제출시 자동으로 페이지가 다시로드되지 않습니다. 이 쿼리는 제대로 작동하고 있다고 가정합니다. – Dan

+0

리다이렉트를하는 것은 페이지를 새로 고침하는 것과 같으므로 두 경우 모두 삭제 버튼을 클릭 한 후에도 게시판에 계속 표시됩니다. – Gadgetster

0

당신이 당신의 요소는 여러 방법 사용할 수있는 것보다 배열 된 체크 박스를 사용하고 있습니다 : 제출 피하기 위해

사용 아약스 (jQuery로 예) :

<script> 
$(document).ready(function() { 
    $('[name="del_btn"]').click(function() { 
     $.post('/my/action.php', $('form').serialize(), function(r) { 
     if (r.success) { 
      alert('deleted....'); 
     } else { 
      alert('error'); 
     } 
     },'json'); 
     return false; // prevent submit 
    }); 
}); 
</script> 

를 사용하면 간단하게 할 수있는 것보다 당신 이와 코드 :

<?php 
if (isset($_POST['checkbox']) && count($_POST['checkbox'])){ 
    $c = implode(',', array_map('intval', $_POST['checkbox'])); // sanitize data 
    $r = mysql_query("DELETE FROM `posts` WHERE `id` IN(" . $c .")"); 
    echo json_encode(array('success' => $r)); 
} 
+0

나는 단지 jquery와 잘 맞지 않아서 PHP로 할 수 있기를 바랐다. – Gadgetster

0
<input name="checkbox[]" type="checkbox" id="<?php echo $id; ?>" /> 

I

<input name="checkbox[]" type="checkbox" value="<?php echo $id; ?>" /> 

"id"대신 "value"라는 단어에 유의하십시오. ID 속성에 ID를 넣습니다. 값을 가져 오려면 특정 대상을 지정하는 것입니다. Javascript 또는 JQuery를 사용하여이 작업을 수행 할 수 있습니다.

"value"태그를 사용하여 확인란의 ID 값이 올바른지 확인하십시오. 쿼리를 반향하고 "삭제됨"이라는 단어를 반향하지 마십시오.

$queryDel = "DELETE FROM posts WHERE id = " . $_POST['checkbox'][$i] . " LIMIT 1"; 
echo $queryDel; 

mysql_query()를 사용하는 경우 SQL 주입을주의하십시오. 대신 mysqli를 사용하십시오. 준비된 성명서를 사용하여 그것을 막거나 최소한의 백인 성명서 또는 유효성 확인서를 제공하십시오.

희망이 도움이됩니다. 고맙습니다.

+0

id를 값으로 변경하고 여전히 아무것도하지 않았다. – Gadgetster

0
<input name="checkbox[]" type="checkbox" value ="<?php echo $id; ?>" id="<?php echo $id; ?>" /> 

시도해보십시오. print_r ($ _ POST) 값을 확인하면 모든 게시 값을 볼 수 있고 올바른 값을 얻을 수 있습니다.

+0

나는 print_r을 수행하고 Array ([del_btn] => Delete Selected [checkbox] ] => 배열 ([0] => 267)) – Gadgetster

관련 문제