2014-02-15 2 views
0

저녁,PHP MySQL 삭제 중 while 루프

나는 다소 여기에서 붙어있다. 직원들에게 새로운 인보이스를 쉽게 만들 수있는 로그인을했습니다. (덴마크어이지만 미안합니다.) 거의 모든 것이 완료되었습니다. 하지만 어떻게해야 할지를 알 수없는 한 가지 방법은 while 루프에서 재료 (덴마크어로 materiale)를 삭제하는 것입니다. 나는 그 안에 모든 루프를 가지고있는 폼을 가지고 있고, 머티리얼 입력 필드 바로 옆에 작은 href 링크를 만들었습니다.이 링크는 자바 스크립트의 도움을 받아 필드를 삭제해야합니다. 필드를 완벽하게 삭제하지만, mysql 데이터베이스에서 데이터를 삭제하지는 않습니다. 따라서 페이지를 새로 고칠 때마다 데이터가 다시 나타납니다. 업데이트 및 삽입은 문제가되지 않습니다. 코드는 다음과 같습니다.

바라는 바는 내가하고 싶은 것을 이해하고 그렇지 않으면 코멘트입니다. 즐거운 저녁 친구들이 :)

편집 :

나는 사용자가 제출 버튼 "변경 내용을 저장"을 클릭하면 삭제 쿼리가 제출되어야합니다. 이것은 내 자바 스크립트 코드입니다 :

<script type="text/javascript"> 
function myFunction() 
{ 
var table = document.getElementById("produkter_rows"); 
var row = table.insertRow(-1); 
var cell1 = row.insertCell(0); 
var cell2 = row.insertCell(1); 
var cell3 = row.insertCell(2); 
var cell4 = row.insertCell(3); 
var cell5 = row.insertCell(4); 
cell1.innerHTML = '<td><input style="width:450px;" class="text-input" type="text" name="beskrivelse_ny[]" value=""></td>'; 
cell2.innerHTML = '<td><input style="width:60px;" class="text-input" type="text" name="enhed_ny[]" value=""></td>'; 
cell3.innerHTML = '<td><input style="width:30px;" class="text-input" type="text" name="stk_ny[]" value=""></td>'; 
cell4.innerHTML = '<td><input style="width:205px;" class="text-input" type="text" name="vejl_eks_moms_ny[]" value=""></td>'; 
cell5.innerHTML = '<td><a href="#" onclick="removeRow(this)" id="addNew" title="Slet produkt"><img src="images/icons/slet.gif" width="16" alt="Slet" /></a></td>'; 
} 

removeRow = function(el) { 
    $(el).parents("tr").remove()  
} 
</script> 

사용자가 재료 바로 옆에있는 삭제 아이콘을 클릭하면 삭제됩니다. 그리고 그것은 입력 필드를 삭제하지만 mysql의 데이터베이스에서는 삭제하지 않습니다.

두 번째 편집 : 나는 업데이트하고 때

$materialer_query = $db->query("SELECT faktura_materialer.id as materialer_id, faktura.*, faktura_materialer.* FROM faktura, faktura_materialer WHERE faktura_materialer.faktura_id = faktura.id"); 

while($mat = $materialer_query->fetch_object()){ 
    ?> 

    <tr> 
     <input type="hidden" name="update_id[]" value="<? print $mat->id; ?>" /> 
     <td><input style="width:450px;" class="text-input" type="text" name="beskrivelse_update[]" value="<? print $mat->beskrivelse; ?>"></td> 
     <td><input style="width:60px;" class="text-input" type="text" name="enhed_update[]" value="<? print $mat->enhed; ?>"></td> 
     <td><input style="width:30px;" class="text-input" type="text" name="stk_update[]" value="<? print $mat->stk; ?>"></td> 
     <td><input style="width:205px;" class="text-input" type="text" name="vejl_eks_moms_update[]" value="<? print $mat->vejl_eks_moms; ?>"></td> 
     <td></td> 
     <td><a href="#" onclick="removeRow(this)" id="addNew" title="Slet produkt"><img src="images/icons/slet.gif" width="16" alt="Slet" /></a></td> 
    </tr> 

    <? 
} 

숨겨진 입력 필드 name="update_id[]" 양식에 추가됩니다

이 MySQL 데이터베이스에 현재 데이터를 업데이트하는 HTML과 PHP입니다. 이게 도움이되기를 바랍니다.

+6

위의 코드에서 'DELETE'쿼리를 찾을 수 없습니까? –

+0

위의 코드를 사용하여 쿼리를 실행하는 방법을 알 수 없기 때문에 그럴 수 있습니다. 'DELETE FROM table WHERE id = something'을 수행하는 방법을 알고 있지만이 것은 아닙니다. –

+0

HTML/삭제 작업을 처리하는 JavaScript. 귀하의 설명에서 그것은 href (AJAX 요청?) 레코드의 삭제를 처리해야하는 것처럼 들리 네요. –

답변

2

레코드를 삭제할 PHP 스크립트에 알릴 필요가 있습니다. 한 가지 해결책은 hiddenRow를 호출 할 때 설정된 숨겨진 입력을 사용하는 것입니다.

function removeRow(el) { 
    // get the table row 
    var row = $(el).parents('tr:first'); 

    // disable the input fields for the row 
    $('input', row).attr('disabled', 'disabled'); 

    // rename update_id to delete_id and re-enable the field 
    $('input[name="update_id[]"]', row).attr('name', 'delete_id[]').removeAttr('disabled'); 

    // hide the row 
    row.hide(); 
} 

이 메서드는 더 이상 DOM에서 테이블 행을 제거하지 않습니다. 그러나 행에 포함 된 입력 필드를 사용 불가능하게하고 이름이 beskrivelse_delete 인 숨겨진 입력을 추가합니다.

양식을 제출하면 PHP에서 삭제해야 할 레코드를 알 수 있습니다.

foreach ($_POST['delete_id'] as $deleteId) { 
    $deleteId = (int)$deleteId; 
    $db->query("DELETE FROM faktura_materialer WHERE id = $deleteId"); 
} 

업데이트 : 나는 당신이 배울 할 수있는 몇 가지 개선 사항이있는 phpfiddle을 만들었습니다. 이러한 포인트는

  • 자바 스크립트 는에 기초 추측 피할 htmlspecialchars
  • 명시 적으로 정의 입력 된 ID를 이용하여 prepared statements 사용
  • 출력 이스케이프 (add_slashes 선호)가 활성화되지 않고 삭제를 지원 증분 카운터
+0

죄송합니다. 충분히 설명하지 못했지만 자바 스크립트로 실행하고 싶습니다. 위의 편집 된 질문을 참조하십시오. :) 그러나 어쨌든 당신 덕분에 대답 –

+0

나는 그에 따라 내 대답을 업데이 트했습니다. ID 20을 하드 코드 했으므로 정확한 ID를 연결해야합니다. –

+0

흠, 코드를 시도했지만 슬프게도 제대로 작동하지 않습니다. : ( –