Slette data fra mysql med php form

En tråd i 'PHP, SQL og databaser' startet av sondre251, 25 Mar 2009.

  1. sondre251 Medlem

    Innlegg:
    19
    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!
     
  2. Børge AJ Medlem

    Innlegg:
    67
    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";
    
     
  3. sondre251 Medlem

    Innlegg:
    19
    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....
     
  4. Børge AJ Medlem

    Innlegg:
    67
    Da er jeg veldig usikker :p
    Prøv å fjern ed etter $count=mysql_num_rows($result);ed
     
  5. sondre251 Medlem

    Innlegg:
    19
    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..
     
  6. skogtrollet

    skogtrollet Medlem

    Innlegg:
    208
    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?
     
  7. sondre251 Medlem

    Innlegg:
    19
  8. skogtrollet

    skogtrollet Medlem

    Innlegg:
    208
    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.
     
  9. sondre251 Medlem

    Innlegg:
    19
    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>
     

Del denne siden