Peter Jensen wrote in <3dac29f7$0$7009$edfadb0f@dspool01.news.tele.dk>:
> Har nu nedenstående, som ser ud til at virke.
> Er der nogen "fejl" dvs noget I mener der skal ændres etc?
Jeg kan da nævne et par ting. :)
> <html>
Der er ingen doctype.
> <body>
Der er ingen head-sektion.
> <form method="get" action="slet.php">
Du bør her bruge "post" i stedet for "get". Jeg har lige skrevet en lang
forklaring i en anden tråd her i dag. :)
> include("dbinfo.inc.php");
> mysql_connect($localhost,$username,$password) or die(mysql_error());
> mysql_select_db($database) or die(mysql_error());
Jeg ville placere de to linjer i db-filen.
> $result = mysql_query("SELECT * FROM kironews order by id DESC");
"SELECT *" bør man normalt ikke bruge til anden end tests, og hurtigere
queries der bare skal fyres af en enkelt gang.
Specificer hvilke felter du skal bruge.
> print "<input type='radio' name='id' value='{$row['id']}'> Slet -
> {$row['id']} {$row['overskrift']}";
Radio? Er det meningen at man absolut kun må slette én af gangen?
Jeg ville bruge en checkbox. Hvis du gør det kan du ændre navnet til fx.
"id[]". Så bliver $_REQUEST['id'] til et array, med en liste over dem, der
er sat kryds i.
> <input type="submit" value="slet" name="slet"></form>
Bruger du submit-knappen til anden end at submitte med?
Med den kode sender du data med navnet "slet" og værdien "slet". Skal du
bruge det til noget?
Hvis ikke kan du lige så godt fjerne navnet. Så genererer knappen ingen
data.
> print "$slet";
Hvis dette virker, så har du nok register_globals slået til. Jeg synes det
er en dårlig feature, som giver sikkerheds-problemer, og nærmest opfordrer
til sjusket kode.
> if($slet) {
Det du gør her er jo egentlig at tjekke om der er trykket på submit-knappen.
Jeg synes det kan være ret ligegyldigt om man har brugt submit-knappen,
eller om man har gjort noget andet for at submitte.
I stedet ville jeg tjekke om der er nogen id'er.
Fx:
if (isset($_QUERY['id'])) {
hvis du har lavet tricket med at lave et array, så kan du gøre sådan her:
foreach($_QUERY['id'] AS $id) {
og inde i foreach-løkken kan du så fyre denne af:
> $sletquery = mysql_query("DELETE from kironews where id='$id'");
> //Header("Location: admin.php");//
URI'en i en Location-header skal være absolut, dvs. (i praksis) den skal
starte med "http".
Det var lige de vigtigste ting jeg lagde mærke til.
Der dukker sikkert flere ting op hvis jeg ser koden igennem igen efter disse
ændringer, men man kan jo altid lave forbedringer.
Jeg har på fornemmelsen at dette er et værktøj kun du skal bruge. Så betyder
pæn kode og standarder pludseligt meget mindre. Så er det fint, hvis bare
det virker.
--
Mvh.
Niels Andersen
(la nels. anersyn.)