Avatar billede Slettet bruger
11. august 2009 - 19:39 Der er 4 kommentarer

Hent tutorial nr

Hej.

Mit tutorial system som skal vise tutorialen går lidt galt.
Den viser flere tutorials i samme.

Scriptet som skal vise den tilføjet tutorial ser sådan her ud:


<?
$foresp = mysql_query("SELECT tutorial, nr FROM tutorials ORDER BY nr DESC"); //henter fra databasen

while($data = mysql_fetch_array($foresp)){

    echo "<p>";
    echo $data["tutorial"];
    echo "</p>";

}
?>
Avatar billede danco Nybegynder
11. august 2009 - 19:51 #1
Undskyld mig, jeg er endnu ikke så god til PHP.
Men hvis det var så ville jeg gøre det via en GET funktion så du har en url der hedder: domail.com?tutorial=15

På den måde kan du nøjes med at hente tutorial nr. 15 og så kommer der kun 1 ad gange :)

Jeg undskylder hvis mit forslag er helt hen i vejret, men det var umiddelbart mit bedste bud :)
Avatar billede elkoger Nybegynder
11. august 2009 - 21:25 #2
som danco siger, du har ikke defineret hvad for en tutorial den skal hente

du skal have implementeret en "where".

f.eks;
$foresp = mysql_query("SELECT tutorial, nr FROM tutorials where nr = '1' ORDER BY nr DESC");

som gør at den kun vil hente den tutorial der har nr: 1

du kan f.eks. gøre det med $_GET[nr];
$foresp = mysql_query("SELECT tutorial, nr FROM tutorials where nr = '$_GET[nr]' ORDER BY nr DESC");

hvor du derefter efter adressen til siden kan skrive: ?nr=1
hvor den så igen vil hente den med nr 1 ud fra db, og ikke alle :)
Avatar billede repox Seniormester
11. august 2009 - 22:40 #3
Jeg supplerer lige op med at prikke lidt til indlæg #2.

For det første er det dårlig syntaks og der er øget risiko for sql injections.

Den korrekte måde at gøre det på ville være:
<?php

    $nr = $_GET["nr"];
    $sql = "SELECT tutorial, nr FROM tutorials WHERE nr = '".mysql_real_escape_string($nr)."' LIMIT 1";
    $foresp = mysql_query($sql);

?>

#2 tager ikke høje for SQL injection (som er en meget stor sikkerhedsrisiko).
Udover det skal et arrays index tilgås korrekt:
echo $_GET[nr]; //er forkert, da nr sandsynligvis ikke er en defineret konstant
echo $_GET["nr"]; //er korrekt da strengen "nr" referer til indexet med samme navn i $_GET arrayet.
Selvom det virker uden quotes, er det dårlig kode.

Der er heller ingen grund til at bruge ORDER BY i en SQL sætning hvor man vil hente en enkelt specificeret række - så det kan udelades.
Avatar billede danco Nybegynder
12. august 2009 - 14:48 #4
Jeg glæder mig da over at jeg ikke er sat helt af sporet mht. PHP.
jeg vil personligt sige at jeg ville have valgt at gøre som i forslaget i #3.
Det du måske bare skal være opmærksom på er at spamrobotter mv. elsker disse dynamiske URL, så hvis du har kontaktform eller andet vil jeg anbefale at tage højde for det :)
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