Avatar billede Slettet bruger
04. august 2009 - 07:41 Der er 14 kommentarer

Slette rækker

DELETE FROM `kompetencer` WHERE `kompetencer`.`id` = 17 LIMIT 1;

kan være en mulighed, når der skal slettes en række. Jeg har ikke oprettet en tabel med auto_increment, da jeg har læst, der er kan være fejl i MySQL, som gør at der sommetider vælges et tilfældet nummer, når der slettes.
Er der andre muligheder at gøre det på? En visning af min tabel ser sådan ud:

while ($row = mysql_fetch_array($svar))
{
print "<td>".$row["navn"]."</td>
<td>".$row["arb_sted"]."</td>
<td>".$row["mobil"]."</td>
<td>".$row["udd"]."</td>
<td>".$row["udd_aar"]."</td>
<td>".$row["ansat_bost"]."</td>
<td>".$row["kursus_1"]."</td>
<td>".$row["kursus_2"]."</td>
<td>".$row["kursus_3"]."</td>
<td>".$row["kursus_4"]."</td>
<td>".$row["kursus_5"]."</td>
<td>".$row["kursus_6"]."</td>
<td>".$row["kursus_7"]."</td>
</tr>";
}
print "</table>";

Hvad kan man sætte ind for at slette en række man selv udvælger?
Avatar billede showsource Seniormester
04. august 2009 - 08:01 #1
Det har jeg aldrig hørt om, det med mysql kunne finde på at vælge et tilfældigt tal.

Lyder mere som om det har skyldtes en dårlig query ?
Avatar billede erikjacobsen Ekspert
04. august 2009 - 09:11 #2
Jeg har også hørt at månen er lavet af grøn ost.

Du skal have en primær nøgle i din tabel, og bruge den ved sletning og opdatering.
Avatar billede Slettet bruger
04. august 2009 - 12:31 #3
Det ved jeg så den ikke er :-)
Hvis jeg nu sætter den primære nøgle til at være 'navn' skal jeg gerne kunne både redigere og slette rækker.
Da jeg er håbløs nybegynder, vil jeg være taknemlig for lidt vejledning ...!
Avatar billede showsource Seniormester
04. august 2009 - 13:51 #4
navn er nok ikke det bedstefelt at lade være unikt. Der kan vel formodentlig være flere med samme navn?
Men hvis du tilføjer f.eks. "id" og lader feltet være
int og unsigned,
primary og autoincrement
kan du identificere hvert row ud fra det.

INSERT INTO kompetencer (id, navn) VALUES (NULL,'ekkebeb')

SELECT * FROM kompetencer WHERE id = 2

UPDATE kompetencer SET mobil = 12345678, arb_sted = 'Eksperten.dk' WHERE id = 2

DELETE FROM kompetencer WHERE id = 2 LIMIT 1
Avatar billede Slettet bruger
05. august 2009 - 17:12 #5
Tak for svar vedr. autoincrement.
Min tabel vises på http://www.socialpsykiatri-silkeborg.dk/vis_kompetencer.php. En ny række bliver oprettet ved at bruge http://www.socialpsykiatri-silkeborg.dk/kompetencer.php.
Meningen er, at jeg gerne vil lave noget kode, hvor man kan indtaste (eller klikke på et ikon) id-nummeret for at rette/slette. Men hvordan får jeg indholdet af den eksisterende række frem, så man kan rette dét, man evt. er kommet til at indtaste forkert?

Jeg kunne forestille mig noget i retning af:

SELECT FROM kompentencer WHERE ID = (og her skal der så stå det navn, som man kan indtaste via en formular?)

Som sagt er jeg ret grøn på det her område, men vil gerne lære ...
Avatar billede showsource Seniormester
09. august 2009 - 07:33 #6
Du bruger så enten GET eller POST.


$sql = "SELECT * FROM kompentencer WHERE id = ".$_POST["idref"];
$row = mysql_query($sql) or die (mysql_error());

Du skal dog være opmærksom på sql-injections !
Avatar billede Slettet bruger
09. august 2009 - 09:24 #7
Jeg ved ikke om jeg har grund til at frygte hacker-angreb ...

Jeg har prøvet med noget andet kode i mellemtiden, men jeg er ret træt af, at der vises tomme rækker, når jeg opretter en ny post - hvorfor gør der det?

=======================
<?php
//Sletter række hvor man indskriver et id nummer
require_once("connect.php");
if($_GET['do'] == "delete" && isset($_POST['id']))
{
    $getrow = mysql_query("SELECT * FROM kompetencer WHERE id = '".$_POST['id']."'");
    $count_rows = mysql_num_rows($getrow);
    if($count_rows == 1)// Hvis der er én medarbejder med id'et, så sletter vi!
    {
        $delete_data = mysql_query("DELETE FROM kompetencer WHERE id = '".$_POST['id']."'");
        if($delete_data)
        {
            print"Medarbejderen blev slettet.<br /><br />";
        }
        else
        {
        print "<b>FEJL:</b> ".mysql_error();
        }
    }
    else
    {
    print"";
    }
}
?>
<form action="?do=delete" method="post">
<input type="hidden" name="redirect" value="http://www.socialpsykiatri-silkeborg.dk/vis_kompetencer.php">
Slet medarbejder med Id: <input type="text" name="id" />
<input type="submit" value="Udfør" />
</form>
=======================================
Avatar billede showsource Seniormester
09. august 2009 - 10:46 #8
Du bør ALTID forsøge at lave kode som er sikret med injections !!!!!

Den kode du viser der, er jo ikke noget "opret" noget.

Derudover kan du bruge DELETE i første query, og tjekke med mysql_affected_rows() for at få antal slettede rows.
Avatar billede Slettet bruger
10. august 2009 - 07:00 #9
Koden jeg viste, henviser til sletning af rækker og ikke mit problem med at der opstår tomme rækker.
Avatar billede showsource Seniormester
10. august 2009 - 09:56 #10
Nu forstår jeg ikke problemet ?
Avatar billede Slettet bruger
10. august 2009 - 19:36 #11
Indlæg nr. 3:
Jeg efterlyste hvordan jeg slettede rækker samt redigerede. Du  svarede på delete-delen i indlæg nr. 5.
Derefter beskrev jeg i indlæg nr. 7, hvordan jeg havde grebet delete-delen an.
Den sag er sådan set afklaret. Men jeg mangler stadig problematikken med redigeringsdelen, hvor jeg gerne vil have tidligere indtastede data i i formularens felter, så de kan redigeres ...
... samt at jeg ikke kan finde ud af, hvorfor der bliver lavet tomme rækker.
Avatar billede showsource Seniormester
11. august 2009 - 09:40 #12
Det med tomme rækker. må du vise noget kode fra.

Hvis du ex. vis har en query:

SELECT id, navn FROM tabel ORDER BY navn

while($n = mysql_fetch_object($query)) {
echo"<a href=\"".$_SERVER["PHP_SELF"]."?edit=".$n->id."\">".$n->navn."</a><br />";
}

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

$sql = "SELECT * FROM tabel WHERE id = ".(int)$_GET["edit"];

$row = mysql_query($sql) or die (mysql_error());

    if(mysql_num_rows($row) == 1) {
    $navn = mysql_fetch_object($row);
    // Vis indhold af række i div. formularfelter
    }

}

Utestet, men burde gi' dig en ide om hvordan du kan lave det.
Avatar billede Slettet bruger
14. august 2009 - 10:19 #13
Hmm - skal der ikke være noget før din query? F.eks.:

$n = mysql_query("SELECT * FROM kompetencer ORDER BY navn ASC")
Avatar billede showsource Seniormester
15. august 2009 - 12:30 #14
Jow da, eller:
$query = mysql_query("SELECT id, navn FROM kompetencer ORDER BY navn ASC") or die (mysql_error());
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
Computerworld tilbyder specialiserede kurser i database-management

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