2013-01-23 49 views
12

Tôi muốn xóa nhiều hàng khỏi cơ sở dữ liệu MYSQL. Tôi đã tạo tệp delete.php này để chọn các liên kết khác nhau và xóa chúng bằng cách sử dụng hộp kiểm.Xóa nhiều hàng bằng cách chọn hộp kiểm bằng cách sử dụng PHP

<html> 
<head> 

<title>Links Page</title> 

</head> 

<body> 

<h2>Choose and delete selected links.</h2> 

<?php 

$dbc = mysqli_connect('localhost','root','admin','sample') 
or die('Error connecting to MySQL server'); 

$query = "select * from links ORDER BY link_id"; 

$result = mysqli_query($dbc,$query) 
or die('Error querying database'); 

$count=mysqli_num_rows($result); 
?> 

<table width="400" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<td><form name="form1" method="post" action=""> 
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td bgcolor="#FFFFFF">&nbsp;</td> 
<td colspan="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td> 
</tr> 
<tr> 
<td align="center" bgcolor="#FFFFFF">#</td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td> 
</tr> 

<?php 

while ($row=mysqli_fetch_array($result)) { 
?> 

<tr> 
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td> 
</tr> 

<?php 
} 
?> 

<tr> 
<td colspan="4" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" value="Delete"></td> 
</tr> 
<table width="400" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<td><form name="form1" method="post" action=""> 
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td bgcolor="#FFFFFF">&nbsp;</td> 
<td colspan="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td> 
</tr> 
<tr> 
<td align="center" bgcolor="#FFFFFF">#</td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td> 
</tr> 

<?php 

while ($row=mysqli_fetch_array($result)) { 
?> 

<tr> 
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td> 
</tr> 

<?php 
} 
?> 

<tr> 
<td colspan="4" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" value="Delete"></td> 
</tr> 



<?php 

// Check if delete button active, start this 

if(isset($_POST['delete'])) 
{ 
    $checkbox = $_POST['checkbox']; 

for($i=0;$i<count($checkbox);$i++){ 

$del_id = $checkbox[$i]; 
$sql = "DELETE FROM links WHERE link_id='$del_id'"; 
$result = mysqli_query($sql); 
} 
// if successful redirect to delete_multiple.php 
if($result){ 
echo "<meta http-equiv=\"refresh\" content=\"0;URL=view_links.php\">"; 
} 
} 

mysqli_close($dbc); 

?> 

</table> 
</form> 
</td> 
</tr> 
</table> 

</body> 

</html> 

Điều này dường như không xóa bất kỳ hàng nào. Dữ liệu của tôi được điền trong bảng. Tôi đoán vấn đề là với mã PHP. Xin hãy giúp tôi ra khỏi đây.

+0

tôi hoàn toàn mới để lập trình trong PHP. Bạn có thể vui lòng cho tôi biết về bất kỳ công cụ PHP gỡ lỗi miễn phí nào không? – spyder

+1

bật báo cáo lỗi và tìm hiểu cách đọc tin nhắn. – tradyblix

+0

Ngoài ra hãy thử di chuyển phần PHP cuối cùng (isset ($ _ POST ['delete'])) trước thẻ HTML để đảm bảo không có dữ liệu nào được đặt lại khi trang được gửi. Ngoài ra nó có thể giúp sử dụng các thẻ biểu mẫu: '

' –

Trả lời

9

Bạn nên đối xử với nó như một mảng như thế này,

<input name="checkbox[]" type="checkbox" value="<?php echo $row['link_id']; ?>"> 

Sau đó, chỉ, bạn có thể đếm và lặp nó để xóa nó.

Bạn cũng cần chuyển kết nối cơ sở dữ liệu cho truy vấn.

$result = mysqli_query($dbc, $sql); 

Trân không bao gồm nó:

$result = mysqli_query($sql); 
+0

thay đổi nó từ tên = " hộp kiểm "to name =" checkbox [] ".... vẫn còn, nó không xóa bất kỳ dữ liệu – spyder

+0

đặt echo cho truy vấn xóa của bạn để xem liệu dữ liệu $ del_id có hoàn hảo hay không. Nếu giá trị $ del_id xuất hiện một cách hoàn hảo, hãy chạy truy vấn trong trình soạn thảo mysql của bạn. bạn sẽ biết nếu có lỗi nào ở phía cơ sở dữ liệu –

+0

@spyder Lý do tại sao nó không bị xóa sau khi Edwin đăng câu trả lời của mình là bạn không bao giờ chuyển kết nối db tới '$ result = mysqli_query ($ sql);'. Nên đọc là '$ result = mysqli_query ($ dbc, $ sql);'. @ Edwin: Tôi đã chỉnh sửa. –

12

Sử dụng ký hiệu mảng như name="checkbox[]" trong phần tử input của bạn. Điều này sẽ cung cấp cho bạn $_POST['checkbox'] làm mảng. Trong truy vấn, bạn có thể sử dụng truy vấn đó làm

$sql = "DELETE FROM links WHERE link_id in "; 
$sql.= "('".implode("','",array_values($_POST['checkbox']))."')"; 

Thats một truy vấn duy nhất để xóa tất cả.

Note: Bạn cần phải thoát khỏi các giá trị thông qua vào $_POST['checkbox'] với mysql_real_escape_string hoặc tương tự để ngăn chặn SQL Injection.

1

Cái gì mà đôi khi cây trồng lên bạn có thể/maynot được nhận thức của

Sẽ không luôn luôn được nhặt bởi bởi $ _POST [ 'xóa'] khi sử dụng IE. Firefox và chrome sẽ hoạt động tốt. Tôi sử dụng một isntead riêng biệt giải quyết vấn đề cho IE

Đối với bạn không xóa trong mã của bạn ở trên bạn xuất hiện để được lặp đi lặp lại 2x bộ hộp kiểm cả hai kéo cùng một dữ liệu? Đây có phải chỉ là lỗi sao chép + dán hay đây thực sự là mã của bạn không?

Nếu mã của bạn như thế nào thì đó sẽ là vấn đề khi người dùng có thể đánh dấu vào một mục trong hộp kiểm, nhưng mục còn lại sẽ bị bỏ chọn để mã php bị xóa bị nhầm lẫn. Hoặc đổi tên hộp kiểm thứ 2 hoặc xóa khối html đó chắc chắn bạn không cần hiển thị cùng một danh sách hai lần?

+0

tôi muốn biểu mẫu hiển thị id dưới dạng cột riêng biệt ... ngoài ra, tôi cần các hộp kiểm để liên kết đến khóa chính, một lần nữa là cột link_id..vì vậy, cùng một dữ liệu cho cả hai cột – spyder

+0

erm tại sao không làm tất cả trong một bảng trong một vòng lặp đơn lẻ, không cần lặp lại cùng một tập dữ liệu hai lần vì bạn thực sự đang hiển thị thông tin giống hệt nhau trong cả hai theo mã của bạn ở trên. – Dave

+0

tôi đã xóa một tập dữ liệu/cột :) – spyder

3
<?php $sql = "SELECT * FROM guest_book"; 
          $res = mysql_query($sql); 
          if (mysql_num_rows($res)) { 
          $query = mysql_query("SELECT * FROM guest_book ORDER BY id"); 
          $i=1; 
          while($row = mysql_fetch_assoc($query)){ 
          ?> 


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

<?php $i++; }} ?> 


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

if($_REQUEST['Delete'] != '') 
{ 
    if(!empty($_REQUEST['checkboxstatus'])) { 
     $checked_values = $_REQUEST['checkboxstatus']; 
     foreach($checked_values as $val) { 
      $sqldel = "DELETE from guest_book WHERE id = '$val'"; 
      mysql_query($sqldel); 

     } 
    } 
} 
4

Xóa Nhiều checkbox sử dụng PHP Mã

<input type="checkbox" name="chkbox[] value=".$row[0]."/> 
<input type="submit" name="delete" value="delete"/> 
<?php 
if(isset($_POST['delete'])) 
{ 
$cnt=array(); 
$cnt=count($_POST['chkbox']); 
for($i=0;$i<$cnt;$i++) 
    { 
    $del_id=$_POST['chkbox'][$i]; 
    $query="delete from $tablename where Id=".$del_id; 
    mysql_query($query); 
    } 
} 
0
$deleted = $_POST['checkbox']; 
$sql = "DELETE FROM $tbl_name WHERE id IN (".implode(",", $deleted) . ")"; 
Các vấn đề liên quan