2013-01-23 23 views
12

Chcę usunąć wiele wierszy z bazy danych MYSQL. Stworzyłem ten plik delete.php, aby wybrać różne łącza i usunąć je za pomocą pól wyboru.Usuń wiele wierszy, zaznaczając pola wyboru przy użyciu 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> 

Nie wydaje się, aby usunąć dowolny wiersz. Moje dane są wypełnione w tabeli. Chyba problem jest z kodem PHP. Proszę pomóż mi tutaj.

+0

jestem zupełnie nowe do programowania w PHP. Czy możesz dać mi znać o dowolnym bezpłatnym narzędziu PHP do debugowania? – spyder

+1

włącz raportowanie błędów i naucz się czytać wiadomości. – tradyblix

+0

Spróbuj także przenieść ostatnią część PHP (isset ($ _ POST ['delete'])) przed znacznikami HTML, aby upewnić się, że żadne dane nie są resetowane po przesłaniu strony. Pomocne może być także użycie tagów formularzy: '

' –

Odpowiedz

9

Należy traktować go jako tablicę jak ta,

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

Tylko wtedy można wziąć swój licznik pętli i to dla usunięcia.

Należy również przekazać połączenie z bazą danych do zapytania.

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

Yours nie obejmują go:

$result = mysqli_query($sql); 
+0

zmienił go z name = " checkbox "to name =" checkbox [] ".... nadal, nie usuwając żadnych danych – spyder

+0

wstaw echo dla zapytania kasowania, aby sprawdzić, czy dane $ del_id są perfekcyjne. Jeśli wartość $ del_id jest idealna, uruchom zapytanie w edytorze mysql. dowiesz się, czy jakikolwiek błąd w bazie danych po stronie –

+0

@spyder Powodem, dla którego nie został usunięty po tym, jak Edwin zamieścił swoją odpowiedź, jest to, że nigdy nie przekazałeś połączenia db do '$ result = mysqli_query ($ sql);'. Które powinny przeczytać jako '$ result = mysqli_query ($ dbc, $ sql);'. @ Edwin: Dokonałem edycji. –

12

Używaj tablicy notacji jak name="checkbox[]" w elemencie input. To da ci $_POST['checkbox'] jako tablicę. W zapytaniu można użyć go jako jednego zapytania, aby je wszystkie skasować.

Uwaga: Musisz uciec wartości przekazywane w $_POST['checkbox'] z mysql_real_escape_string lub podobnym, aby zapobiec SQL Injection.

1

Coś, co czasami może się crops/maynot być świadomi

nie zawsze będzie odbierane przez przez $ _POST [ 'usuń'] podczas korzystania z IE. Firefox i chrome powinny jednak działać dobrze. Używam oddzielnej isntead, która rozwiązuje problem dla IE Jeśli nie usuwasz kodu w powyższym oknie, wydaje ci się, że wyświetlasz dwa zestawy pól wyboru, które pobierają te same dane? Czy to tylko błąd kopiowania i wklejania, czy tak naprawdę jest to, jaki jest twój kod?

Jeśli to, w jaki sposób twój kod będzie stanowił problem, może oznaczać, że użytkownik zaznaczył jeden element pola wyboru, ale drugi będzie odznaczony, aby kod php do usunięcia był zagmatwany. Zmień nazwę drugiego pola wyboru lub usuń ten blok html z pewnością nie musisz wyświetlać tej samej listy dwa razy?

+0

Chcę, aby formularz wyświetlał identyfikator jako oddzielną kolumnę ... również, muszę pola wyboru, aby połączyć z kluczem podstawowym, który jest ponownie kolumna link_id..thus, te same dane dla obu kolumn – spyder

+0

erm, dlaczego nie zrobić to wszystko w jednej tabeli w pojedynczej pętli jest zaśmiecanie nie ma potrzeby pętli tego samego zestawu danych dwa razy, ponieważ naprawdę wyświetlają identyczne informacje w obu zgodnie z powyższym kodem. – Dave

+0

Usunąłem jeden zestaw danych/kolumnę :) – 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

Usuń Multiple wyboru za pomocą kodu PHP

<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) . ")"; 
Powiązane problemy