2011-03-29 3 views
0

확인란을 사용하여 여러 레코드를 삭제해야하는 문제가 있습니다.PHP의 체크 박스를 사용하여 여러 레코드 삭제

여기에 현재 가지고있는 코드가 있습니다.

<?php 
$host  = "localhost"; 
$user  = "root"; 
$pass  = ""; 
$dbName  = "ticket_history"; 
$table_name = "ticket_history"; 

################ Connect to the Database and SELECT DATA #################################### 
$conn = mysql_connect($host, $user, $pass) or die ("Unable to connect"); 
mysql_select_db($dbName); 
$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name"; 
$result = mysql_query($query); 
$count=mysql_num_rows($result); 
############################################################################################# 
?> 
<HTML> 
<HEAD> 
<TITLE></TITLE> 
</HEAD> 
<BODY> 
<table width=50%> 
    <form method="post" action="insert_ticket.php"> 
     <table width border='0'> 
      <tr><td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date:<input type="text" name="date"/></td> 
      <td>Ticket #:<input type="text" name="ticket"/></td></tr> 
      <table> 
       <tr><td>Description:<TEXTAREA COLS=50 name="description"></TEXTAREA></td></tr> 
       <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result  :<TEXTAREA COLS=50 name="result"></TEXTAREA></td></tr> 
      <tr><td><input type="submit" name="submit" value="Add"/></td></tr> 
      </table> 
     </table> 
    </form> 
    <form method="post" action="delete_ticket.php"> 
    <input type="submit" name="delete" value="Delete"/> 
    </form> 
</table> 

<?php 
print "<table width=80% border=1>\n"; 
$cols = 0; 
while ($get_info = mysql_fetch_assoc($result)){ 
$id = $get_info->id; 
if($cols == 0) 
{ 
    $cols = 1; 
    print "<tr>"; 
    print "<th>Select</th>"; 
    foreach($get_info as $col => $value) 
    { 

    print "<th>$col</th>"; 
    } 
    print "<tr>\n"; 
} 
print "<tr>\n"; 
print "<td><input type='checkbox' name='selected[]' id='checkbox[]' value=$id></td>"; 
foreach ($get_info as $field) 
print "\t<td align='center'><font face=arial size=1/>$field</font></td>\n"; 
print "</tr>\n"; 
} 
print "</table>\n"; 
mysql_close(); 
?> 

<!------------------------------------------------------------!> 
</BODY> 
</HTML> 

Delete.php 
<?php 
$host  = "localhost"; 
$user  = "root"; 
$pass  = ""; 
$dbName  = "ticket_history"; 
$table_name = "ticket_history"; 

################ Connect to the Database and SELECT DATA #################################### 
$conn = mysql_connect($host, $user, $pass) or die ("Unable to connect"); 
mysql_select_db($dbName); 
$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name"; 
$result = mysql_query($query); 
$count=mysql_num_rows($result); 
##################################### 


if($_POST['delete']) { 
    $checkbox = $_POST['selected']; 
    $countCheck = count($_POST['selected']); 

    for($i=0;$i<$countCheck;$i++) { 
     $del_id = $checkbox[$i]; 

    $sql = "DELETE FROM ticket_history WHERE Auto = $del_id"; 
    $result = mysql_query($sql); 
    } 
} 
?> 

단지 체크 된 행을 삭제할 수 있기를 원합니다. 어떻게하면 효과적이고 효율적으로이 일을 진행할 수 있습니까?

미리 감사드립니다.

+0

'TABLENAME에서 삭제 같은 WHERE 자동 IN ('.implode (', '', array_map ('INTVAL, $ _ POST [ 'selected']))).) ')' ' – Wrikken

+0

$ _POST 값을 직접 사용하는이 방법에주의해야합니다. 게시 한 쿼리는 XSS 공격에 취약합니다. Wrikken 그것의 요점을 가지고 있지만, 당신은 implode을 사용하고자합니다. –

답변

1

귀하의 질문에 간단한 대답은 사용하는 것입니다 :

$sql = sprintf('DELETE FROM ticket_history WHERE Auto IN()', 
    implode(',', $checkbox)); 

그러나 사람들이 뛰어 당신을 말할 것이다, 당신은 SQL 주입에 취약하다. 사용자 입력을 절대 신뢰해서는 안됩니다. ID를 사용하여 삭제 중입니다. ID는 정수 여야합니다. 이 같은

사용하여 뭔가 그 유효성을 검사합니다 :

$ids = array(); 
foreach($_POST['selected'] as $selected) { 
    if (ctype_digit($selected)) { 
     $ids[] = $selected; 
    } 
    else { 
     // If one is invalid, I would assume nothing can be trusted 
     // Depends how you want to handle the error. 
     die('Invalid input'); 
    } 
} 

$sql = sprintf('DELETE FROM ticket_history WHERE Auto IN (%s)', 
    implode(',', $ids)); 

기타 문제 :

당신은 아이디의를 사용하고있는 것으로 보이지만, 초기 쿼리에서 해당 필드를 선택하지 않았습니다.

$query = "SELECT Date,Ticket_Number,Description,Result FROM $table_name"; 

는 그런 다음 참조 :

$id = $get_info->id; 

확인 HTML 출력은 당신이 무엇을 기대 실제로.

삭제 쿼리에서 필드 자동을 참조하고 있습니다. 그게 너의 신분증 필드 야?

그리고 마지막으로, 사용자가 그렇게 할 권한이 있는지 확인하지 않습니다. 공개 사이트 인 경우 누구나 해당 테이블에서 삭제할 수 있습니다. 두 사람은 하나 개의 형태 내에서 전송 버튼 사용


예 :

<?php 
if (isset($_POST['create'])) { 
    echo "Create!"; 
} 
elseif (isset($_POST['delete'])) { 
    echo "Delete!"; 
} 
?> 
<html> 
    <form method="post"> 
     <input type="submit" name="create" value="Create"/> 
     <input type="submit" name="delete" value="Delete"/> 
    </form> 
</html> 
+0

@Jacob - 예 ID 필드는 자동입니다. 또한이 사이트는 공개 사이트가 아니지만 개인 사이트입니다. – jmg0880

+0

@ jmg0880이면 조회에서 자동 필드를 선택하고이를 참조해야합니다. '$ id = $ get_info-> Auto'. – Jacob

+0

@Jacob, 아직 문제가 있습니다. 내가 어떻게 이걸 얻는 지 모르겠어. – jmg0880

관련 문제