2011-03-29 61 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

像'DELETE FROM表名WHERE自動IN( '.implode(' 'array_map(' INTVAL」,$ _ POST [ 'selected']))'')'' – Wrikken 2011-03-29 00:36:58

+0

您應該謹慎使用這種直接使用$ _POST值的方法。您發佈的查詢容易受到XSS攻擊。 Wrikken有它的要點,但你會想要使用implode。 – 2011-03-29 00:42:31

回答

1

簡單回答你的問題是使用:

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

然而,由於人們會跳,並告訴你,你很容易受到SQL注入。你永遠不應該信任用戶的輸入。你正在使用一個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)); 

其他問題:

你似乎使用的ID,但沒有選擇在您的初始查詢該字段。

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

然後你參考:

$id = $get_info->id; 

檢查HTML輸出實際上是你所期望的。

在您的刪除查詢中,您引用的是Auto字段。這是你的ID字段嗎?

最後,沒有檢查用戶是否有權這樣做。如果這是一個公共站點,任何人都可以從該表中刪除。使用兩個一個表格內提交按鈕的


例子:

<?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 - 是Auto是ID字段。此外,這不是一個公共網站,而是一個個人網站。 – jmg0880 2011-03-29 01:02:46

+0

@ jmg0880,那麼您需要在查詢中選擇自動字段,並按照這種方式引用它。 '$ id = $ get_info-> Auto'。 – Jacob 2011-03-29 01:13:20

+0

@Jacob,我仍然遇到麻煩。我怎麼不知道如何得到這個。 – jmg0880 2011-03-29 01:26:44