Kjapp og trygg hosting for Wordpress

Slette data fra mysql med php form

sondre251

Medlem
Halla folkens:)

Det har seg slik at jeg holder på med en webside for et grendalag. Alt er ferdig, foruten 1 ting. Har laget et admin område, hvor man kan legge til tekst til en side, og holder på med et script for å slette data fra denne siden. Dataene er lagret i en mysql database... Så langt, fungerer det å vise teksten på siden, oppdatere teksten på siden, og slette...INTILL id'en er over 9!
Irriterer meg grenseløst, siden det først funket konge, og nå ikke fungerer i det hele tatt igjen.

Dette er scriptet jeg bruker for å slette data.
PHP:
<?php

$host="localhost"; // Host navn

$username="xxxxxxxxxxxx"; // Mysql brukernavn

$password="xxxxxxxxxxx"; // Mysql passord

$db_name="xxxxxxxxxx"; // Database navn

$tbl_name="kva"; // Tabell navn



// Koble til server og velge database.

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);ed



?>

<table width="400" border="0" cellspacing="1" cellpadding="0">

<tr>

<td><form action="" method="post" name="form1">

<table width="650" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">

<tr>

<td width="44" bgcolor="#FFFFFF">&nbsp;</td>

<td colspan="4" bgcolor="#FFFFFF"><strong>Slett gamle oppdateringer</strong> </td>

</tr>

<tr>

<td align="center" bgcolor="#FFFFFF">#</td>

<td width="45" align="center" bgcolor="#FFFFFF"><div align="left"><strong>ID</strong></div></td>

<td width="289" align="center" bgcolor="#FFFFFF"><div align="left"><strong>Tekst</strong></div></td>

</tr>

<?php

while($rows=mysql_fetch_array($result)){

?>

<tr>

<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<? echo $rows['id']; ?>"></td>

<td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td>

<td bgcolor="#FFFFFF"><? echo $rows['Tekst']; ?></td>

</tr>

<?php

}

?>

<tr>

<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Slett"></td>

</tr>



<?php

// Sjekke om delete knappen er aktiv, så starte dette

if(isset($_POST['checkbox'])){

$checkbox = $_POST['checkbox'];

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

$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";

$result = mysql_query($sql);

}



// Om det var vellykket send bruker videre til admin.php

if($result){

echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";

}

}

mysql_close();

?>

</table>

</form>

</td>

</tr>

</table>

Er det noen som kan hjelpe meg?

Takker for alle svar!
 

Børge AJ

Medlem
Er ikke helt sikker,, men regner med at id i databasen er en int?
I såfall skal det ikke være ' ' rundt tallene så
Kode:
$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";
skal være:
Kode:
$sql = "DELETE FROM $tbl_name WHERE id=$del_id";
 

sondre251

Medlem
Det er INT ja...
Prøvde det du sa, men ingenting forandret.
Tror det er noe i denne linjen:
PHP:
for($i=0;$i<$count;$i++){
Siden det fungerte før iden ble over 9, og ikke etter....
 

sondre251

Medlem
Fjernet det nå, og ingenting skjedde... Fungerer fortsatt ikke.. Men jeg er rimelig sikker på at det er noe med den linjen jeg postet tidligere.. er jo kun den som jeg kan forstå, som kan forårsake dette..
 

skogtrollet

Medlem
PHP:
$checkbox = $_POST['checkbox'];

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

Du bruker $checkbox som et array. Er den ikke kun en variabel her?
 

skogtrollet

Medlem
Sånn som det er nå, ser det ut til at du ønsker å slette mange rader samtidig. Stemmer det?

Det kan fikses med å bruke sql kommandoer som mid() eller between eller noe sånt. Har ikke brukt det selv, men vet det er mulig. Vil heller anbefale deg å slette en og en rad. Da tar du rett og slett bare vekk den loopen.
 

sondre251

Medlem
Fikset...

Fikk hjelp av en annen fyr :)

koden ser slik ut nå, om noen skulle lure:)

PHP:
<?php

// MySQL userdata
$host = "localhost"; // hostname
$username = ""; // username
$password = ""; // password
$db_name = ""; // dB name
$tbl_name = ""; // table name

// Koble til mysql servern
mysql_connect ( $host, $username, $password ) or die ( "Can not connect." );
// Velg spesifikk database
mysql_select_db ( $db_name ) or die ( "Can not select DB." );

// Hvis "slett"-knappen er trykket, og det er valgt noe som skal slettes, og gyldig array.
if ( isset( $_POST['delete'] ) && !empty($_POST['checkbox']) && is_array($_POST['checkbox']) ) {
  
  // For hver oppføring i arrayet $_POST['checkbox'] ...
  foreach ( $_POST['checkbox'] as $id ) {
    $sql = "DELETE FROM {$tbl_name} WHERE id = ". (int)$id;
    $resultDel = mysql_query( $sql );
  } 
  
  // Om $resultDel returnerer sant ...
  if ( $resultDel ) {
    header("location: admin.php");
  }
} // if ...

// Hente tabelldata.
$sql = "SELECT * FROM {$tbl_name}";
$result = mysql_query($sql);

?>
<style type="text/css">
  table { 
    width: 400px;
  } 
  
  table, td {
    padding: 2px;
    border-width: 1px;
    border: 1px #cccccc solid;
    border-collapse: collapse;
    border-spacing: 0px; 
  } 
  
  .colCheck, .ColId {
    width: 70px;
    text-align: center;
  }
</style>

<form action="" method="POST">
  <table>
    <tr>
      <td class="colCheck"> </td>
      <td colspan="2" class="colTxt"><b>Slett gamle oppdateringer</b></td>
    </tr>
    
    <tr>
      <td class="colCheck">#</td>
      <td class="colId"><b>ID</b></td>
      <td class="colTxt"><b>Tekst</b></td>
    </tr>
   
  <?php while ( $rows = mysql_fetch_assoc($result) ) { ?>

    <tr>
      <td class="colCheck"><input name="checkbox[]" type="checkbox" value="<?php echo $rows['id']; ?>"></td>
      <td class="colId"><?php echo $rows['id']; ?></td>
      <td class="colTxt"><?php echo $rows['Tekst']; ?></td>
    </tr>

  <?php } ?>

    <tr>
      <td colspan="3"><input name="delete" type="submit" value="Slett"></td>
    </tr>
    
  </table>
</form>
 
Topp