Avatar billede compac Seniormester
20. maj 2008 - 10:34 Der er 21 kommentarer og
1 løsning

Sletning af record v.h.a. ckeckbox

Jeg har en database, hvor jeg laver en checkbox ud for hver record når jeg skriver ud.
Jeg ønsker, at den markerede checkbox skal kunne slette den pågældende record.

Min kode:



$sql="select * fromm $branch order by sn";
          $result=mysql_query($sql) or die(mysql_error());
          while($row=mysql_fetch_array($result))
          {
  ?>
           
        <input type="checkbox" name="checkbox[]" id="checkbox[]" value="<?php echo $row['sn']?>" >
          <a href="<?php echo "slet.php?del=".$row['sn']."&mode=delete"; ?>">Slettes</a>


og slet.php:

<?php
if($_POST['delete'])
  $slet=$_GET['del'];
 
{for($i=0;$i<$count($checkbox);$i++){
$del_id = $checkbox[$i];
$sql = "DELETE * FROM $branch WHERE sn='$del_id'";
$result = mysql_query($sql);}
}
if($result)
{
header("Location: http://index.php");

?


Hvordan får jeg overført den markerede checkbox til slet.php?
Avatar billede w13 Novice
20. maj 2008 - 10:36 #1
Jeg ville lave det som en form rundt om checkboxene. Så kunne "Slettes"-linket blot submitte formen. Det ville være meget nemmere.
Avatar billede compac Seniormester
20. maj 2008 - 10:36 #2
Hov der kom en fejl i "select"-sætningen:
$sql="select * from $branch order by sn";
-men det løste ikke problemet.
Avatar billede compac Seniormester
20. maj 2008 - 10:41 #3
Det vil kræve et stort indgreb i resten af koden. Det må da være muligt at overføre oplysningen via linkets parametre.
Avatar billede w13 Novice
20. maj 2008 - 10:43 #4
Ja, reelt set ville du kunne lægge noget JavaScript på linksene i stedet.
Avatar billede w13 Novice
20. maj 2008 - 10:44 #5
En onclick som retter linkets HREF til at indeholde den valgte checkbox. Det kan dog ikke gøres uden JavaScript, hvis du ikke vil bruge <form>-elementer.
Avatar billede compac Seniormester
20. maj 2008 - 10:56 #6
Jeg vil helst være fri for Javascript.

Jeg har inspirationen til min metode fra denne link:

<a href="<?php echo "formbal.php?mode=add&amp;an=$a"; ?>">Tilføj</a>

-hvor man tilføjer en record til databasen.
Avatar billede w13 Novice
20. maj 2008 - 11:06 #7
Men i dette tilfælde er $a jo sat, når siden loader.

PHP kan kun udføre kommandoer ved sideload - så når man senere klikker på nogle checkbokse, vil ændringen ikke kunne ses med PHP.

Det kunne løses med JavaScript ved at indsætte denne funktion et sted på siden:

<script type="text/javascript">
function CheckboxValues(o,s){
var sValues="";for(var i=0;i<o.length;i++)if(o[i].getAttribute("checked"))sValues+=(sValues==""?o[i].value:s+o[i].value);return sValues
}
</script>

Og så kan du rette linket til:
<a href="<?php echo "slet.php?del=".$row['sn']."&mode=delete"; ?>" onclick="this.href+="&checkbox"+CheckboxValues(document.checkboxnavn,',')">Slettes</a>

Så skal document.checkboxnavn bare rettes, så det henviser til den rigtige gruppe checkboxe.
Avatar billede compac Seniormester
20. maj 2008 - 12:13 #8
Checkboxoplysningerne kommer ikke med til slet.php.

Jeg formoder at document.checkboxnavn skal rettes til document.checkbox[] - svarende til name=checkbox[]  i input-boxen ??
Avatar billede compac Seniormester
20. maj 2008 - 12:15 #9
Skal jeg rette name til en alm. variabel i stedet for et array?
Avatar billede w13 Novice
20. maj 2008 - 12:16 #10
Ja, men jeg ville nok give boksene et andet navn end checkbox[]
Især når du jo har rigtig mange rækker med forskellige grupper af bokse.

Så på én række bør de f.eks. hedde checkbox1, på den næste checkbox2, osv.
Avatar billede compac Seniormester
20. maj 2008 - 12:23 #11
Hvorfra ville du så styre navnet?
Avatar billede w13 Novice
20. maj 2008 - 12:33 #12
Det er noget, du henter fra din database, ikke?
Hvorfor så ikke bare indsætte postens ID i navnet?
Avatar billede showsource Seniormester
20. maj 2008 - 13:46 #13
Her er et ex. på hvordan du kan slette fra DB.
for løkken skal erstattes af din while()

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<?php
for($i = 1; $i < 6; $i++) {
?>
<input type="checkbox" name="del[]" value="<?php echo $i; ?>">Checkbox <?php echo $i; ?><br />
<?php
}
?>

<input type="submit" value="vis">
</form>

<?php
if(isset($_POST["del"]) && is_array($_POST["del"])) {

$sql = "DELETE FROM `tabel` WHERE `id` IN (".implode(",",$_POST["del"]).")";

echo $sql;

}
?>
Avatar billede w13 Novice
20. maj 2008 - 13:47 #14
showsouce>> Compac ville ikke bruge en form. :)
Avatar billede compac Seniormester
20. maj 2008 - 13:55 #15
Mener du sådan her:
<input type="checkbox" name="<?php echo $row['sn']?>" id="<?php echo $row['sn']?>" value="<?php echo $row['sn']?>" >

og i linksætningen sådan:
<a href="<?php echo "slet.php?del=".$row['sn']."&mode=delete"; ?>"onclick="this.href+="&checkbox"+CheckboxValues(document."<?php echo $row['sn']?>",',')">Slettes</a>
Avatar billede showsource Seniormester
20. maj 2008 - 13:59 #16
Hmm, man kan jo ikke slette alle valgte ved klik på et link med en get ud for hvert row?

Altså, jeg er ikke helt med! :O)
Og der bruges jo en checkbox, så en <form......> </form> skal jo med.
Avatar billede compac Seniormester
20. maj 2008 - 14:10 #17
Jeg stiller ikke krav om, at der må slettes mere end een af gangen.
Så der kan godt refereres til ID (som jeg er kommet til at kalde sn i mit eksempel).
Jeg er blot i tviivl om hvordan jeg får overført ID  værdien via linksætningen.
Avatar billede showsource Seniormester
20. maj 2008 - 14:28 #18
Det kan gøres så'n:

<a href="<?php echo "slet.php?del=".$row['sn']; ?>&mode=delete" onclick="return(confirm('Slet valgte row?'));">Slettes</a>

<?php

if(isset($_GET["del"])) {

$sql = "DELETE FROM `tabel` WHERE `id` = ".(int)$_GET["del"];

echo $sql;

}

?>
Avatar billede compac Seniormester
20. maj 2008 - 15:14 #19
Den får stadig ikke row-nummeret med.
Jeg har tilføjet $result = mysql_query($sql);} i slet.php-filen (jeg ved ikke om det betyder noget).
Men den kommer med en side http500 i slet.php-filen.
Avatar billede compac Seniormester
22. maj 2008 - 15:54 #20
Jeg har stadig problemer, men læg nogle svar, så prøver jeg at forelægge et forslag i et nyt spørgsmål.
Avatar billede w13 Novice
23. maj 2008 - 12:34 #21
oki
Avatar billede showsource Seniormester
23. maj 2008 - 13:19 #22
Jeg springer over.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester