Ta bort flera rader i mysql med checkboxes

Permalänk

Ta bort flera rader i mysql med checkboxes

Hej,

Jag har lite problem med att få följande skript att fungera .. alla grejer blir listade men de går inte att ta bort med knappen .. det händer typ ingenting .. någon som kan komma med ideer?

Om det är någon som har en klurig lösning på problemet får ni gärna lista om hela koden, inte säkert jag får in det annars !

<?php
$host="localhost"; // Host name
$username="user"; // Mysql username
$password="pw"; // Mysql password
$db_name="dbname"; // Database name
$tbl_name="tblname"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

$count=mysql_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"> </td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>Column</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Object</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Row</strong></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $rows['id']; ?>"></td>
<td bgcolor="#FFFFFF"><? echo $rows['set']; ?></td>
<td bgcolor="#FFFFFF"><? echo $rows['item']; ?></td>
<td bgcolor="#FFFFFF"><? echo $rows['order']; ?></td>
</tr>
<?php
}
?>
<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td>
</tr>
<?
// Check if delete button active, start this
if($delete){
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";
$result = mysql_query($sql);
}

// if successful redirect to delete_multiple.php
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=delete_multiple.php\">";
}
}
mysql_close();
?>
</table>
</form>
</td>
</tr>
</table>

Permalänk
Medlem

Du har inte deklarerat $delete till något någonstans så koden kommer aldrig komma in i den if-satsen. Dessutom kommer ALLA rader att tas bort varje gång, ändra raden $del_id = $checkbox[$i]; till $delete_row = isset($checkbox[$i]); och sedan kolla if( $delete_row ) { ta bort raden }.
Sedan undrar jag varför du vill sätta en meta-tag där nere i koden, det kommer inte att fungera, den måste ligga i headern på sidan.

Permalänk

Hej,

Tack för ditt svar, tyvärr är jag helt nollad och får inte till det .. det här är vad jag skrivit:

<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete_row" type="submit" id="delete_row" value="Delete"></td>
</tr>
<?
// Check if delete button active, start this
for($i=0;$i<$count;$i++){
$delete_row = isset($checkbox[$i]);
if($delete_row){
$sql = "DELETE FROM $tbl_name WHERE id='$delete_row'";
$result = mysql_query($sql);
}

Jag har vänt saker fram och tillbaka men får det inte att fungera lite väl genomskinligt vem som är nybörjare !

Permalänk
Medlem

Ska se om jag kan förklara lite enklare, jag lade till lite kommentarer och kod.

<?php $host="localhost"; // Host name $username="user"; // Mysql username $password="pw"; // Mysql password $db_name="dbname"; // Database name $tbl_name="tblname"; // Table name // Connect to server and select databse. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); $sql="SELECT * FROM $tbl_name"; $result=mysql_query($sql); $count=mysql_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"> </td> <td colspan="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong> </td> </tr> <tr> <td align="center" bgcolor="#FFFFFF">#</td> <td align="center" bgcolor="#FFFFFF"><strong>Column</strong></td> <td align="center" bgcolor="#FFFFFF"><strong>Object</strong></td> <td align="center" bgcolor="#FFFFFF"><strong>Row</strong></td> </tr> <?php while($rows=mysql_fetch_array($result)){ ?> <tr> <td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $rows['id']; ?>"></td> <td bgcolor="#FFFFFF"><? echo $rows['set']; ?></td> <td bgcolor="#FFFFFF"><? echo $rows['item']; ?></td> <td bgcolor="#FFFFFF"><? echo $rows['order']; ?></td> </tr> <?php } ?> <tr> <td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td> </tr> <? // Check if delete button active, start this if($delete){ // VAR SÄTTS $delete? DU MÅSTE DEKLARERA DEN NÅGONSTANS. // ÄNDRA TILL: if( isset( $delete ) ) { kanske? for($i=0;$i<$count;$i++) { $delete_row = isset( $checkbox[$i] ); if( $delete_row ) { $sql = "DELETE FROM $tbl_name WHERE id='{$checkbox[$i]}'"; $result = mysql_query($sql); } } } // if successful redirect to delete_multiple.php // DET HÄR KOMMER INTE FUNGERA EFTERSOM METATAGGAR MÅSTE LIGGA I HEADERN PÅ SIDAN. if($result){ echo "<meta http-equiv=\"refresh\" content=\"0;URL=delete_multiple.php\">"; } } mysql_close(); ?> </table> </form> </td> </tr> </table>

Permalänk
Medlem

Om man har många checkboxar och vill minimera antalet querys mot databasen skulle man kunna köra en for sats som lägger ihop id nummrena från checkboxarna och köra en "DELETE FROM tabellen WHERE id IN (SammanslagningAvId)".

Igen höjdare på php så koden får du fixa själv

Visa signatur