Avatar billede turbodk Nybegynder
27. november 2007 - 18:41 Der er 18 kommentarer og
1 løsning

Show News

Hej :)
Jeg er ved at lave en hjemmeside, meningen er så at man på forsiden skal kunne se en overskrift på alle nyheder listede op i rækkefølge efter tid.

Det jeg havde tænkt mig at man trykker på overskriften på forsiden og man kommer så ind på "index.php?side=show_news?id=5", for at se id 5..

Men hvordan fortæller man den at den så skal hente information fra nyheden med ID=5 i min databse?

Forstår i? Eller skal jeg prøve igen? :P
Avatar billede yHec Novice
27. november 2007 - 19:00 #1
sprintf("SELECT * FROM [tabel] WHERE id='%s'", addslashes($_GET['ID']);

Det burde virke

/y
Avatar billede jens12 Nybegynder
27. november 2007 - 19:02 #2
Link eksempel :
<a href="index.php?side=show_news&id=5">Nyhed</a>
Jeg ved jo ikke hvordan din nyhedstabel ser ud, så jeg har gættet mig frem..
Eksempel på at hente nyhed :
<?
//skab forbindelse til din db her..
$get_id = $_GET['id'];//hent id´et (5 er id´et)
$hent_nyhed = mysql_query("SELECT * FROM din nyhedstabel WHERE id = '$get_id'")or die('MYSQL QUERY ERROR : ' . mysql_error());//Hent nyheden fra databesen
if(mysql_num_rows($hent_nyhed) == 0)){ //vi tjekker om nyheden findes :)
echo"Kunne ikke finde nyheden!";
}else{//vi fandt nyheden lad os printe den ud !
$nyhed = mysql_fetch_array($hent_nyhed);
echo"$nyhed[overskrift]<br>";
echo"$nyhed[tekst]";
}
?>
Håber du kan bruge dette til noget.
Avatar billede jens12 Nybegynder
27. november 2007 - 19:08 #3
Rettelse :
<a href="index.php?side=show_news&id=5">Nyhed</a>
Jeg ved jo ikke hvordan din nyhedstabel ser ud, så jeg har gættet mig frem..
Eksempel på at hente nyhed :
<?
//skab forbindelse til din db her..
$get_id = $_GET['id'];//hent id´et (5 er id´et)
$hent_nyhed = mysql_query("SELECT * FROM din nyhedstabel WHERE id = '$get_id'")or die('MYSQL QUERY ERROR : ' . mysql_error());//Hent nyheden fra databesen
if(mysql_num_rows($hent_nyhed) == 0)){ //vi tjekker om nyheden findes :)
echo"Kunne ikke finde nyheden!";
}else{//vi fandt nyheden lad os printe den ud !
$nyhed = mysql_fetch_array($hent_nyhed);
echo"$nyhed[overskrift]<br>";
echo"$nyhed[tekst]";
}
?>
Avatar billede jens12 Nybegynder
27. november 2007 - 19:08 #4
Vi prøver lige engang til ..
RETTELSE :
<a href="index.php?side=show_news&id=5">Nyhed</a>
Jeg ved jo ikke hvordan din nyhedstabel ser ud, så jeg har gættet mig frem..
Eksempel på at hente nyhed :
<?
//skab forbindelse til din db her..
$get_id = $_GET['id'];//hent id´et (5 er id´et)
$hent_nyhed = mysql_query("SELECT * FROM din nyhedstabel WHERE id = '$get_id'")or die('MYSQL QUERY ERROR : ' . mysql_error());//Hent nyheden fra databesen
if(mysql_num_rows($hent_nyhed) == 0){ //vi tjekker om nyheden findes :)
echo"Kunne ikke finde nyheden!";
}else{//vi fandt nyheden lad os printe den ud !
$nyhed = mysql_fetch_array($hent_nyhed);
echo"$nyhed[overskrift]<br>";
echo"$nyhed[tekst]";
}
?>
Avatar billede yHec Novice
27. november 2007 - 19:47 #5
Øhhhhh, var det ikke det jeg foreslog???

I hvert fald sql-sætningen....

Der er vel ingen grund til, at der tjekkes om nyheden findes, idet vi formoder, at linkene er dannede udfra data i databasen. Derved vil der ikke komme links til noget der ikke findes...
Avatar billede turbodk Nybegynder
27. november 2007 - 21:52 #6
Men den linje er vel nemt at fjerne, for ja, det er jo overflødisk, og det er der, som du så fint siger y, ingen grund til.

Jeg har ikke lige tid til at kigge på det nu, men får kigget på det imorgen :)

Jeg takker for hjælpen indtil videre :)
Avatar billede turbodk Nybegynder
28. november 2007 - 19:52 #7
Nå nu fik jeg kigget på det, og det var den ærligt talt ikke glad for.

Her er hvad jeg fik det til.

<---Kode starter--->

<?php
    include("mysqldata.php");

    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    $foresp = mysql_query("SELECT id, time, titel, godkendt FROM nyheder WHERE godkendt = 1 ORDER BY time DESC");
    while($data = mysql_fetch_array($foresp)){
        echo "<a href='index.php?side=Forside?news_id=$data[id]'>$data[titel]</a>  -  ";
        echo date("j/n Y", $data[time]);
        echo " kl. ";
        echo date("H:i", $data[time]);
        echo "<br>";
    }

    $get_id = $_GET['id'];//hent id´et (5 er id´et)
    $hent_nyhed = mysql_query("SELECT * FROM nyheder WHERE id = '$get_id'")or die('MYSQL QUERY ERROR : ' . mysql_error());
        if(mysql_num_rows($hent_nyhed) == 0){
            echo"Kunne ikke finde nyheden!";
        }
        else{
            $nyhed = mysql_fetch_array($hent_nyhed);
                echo"$nyhed[titel]<br>";
                echo"$nyhed[text]";
        }
?>

<---Kode slutter--->

Nyhedsoverskrifterne vises fint, og når jeg trykker på linket skriver den også det rigtige link i adressebaren, men jeg har en mistanke om at nedenstående(i min index.php) blokerer for det. En anden ting er at der nederst på listen af nyheder står "Kunne ikke finde nyheden!", hvilket der jo ikk skal.

<---Kode starter--->

<?php $side = $_GET[side];
if (!$side || $side == "Forside") { $side = "Forside"; }
elseif ($side == "Resultater") { $side = "Resultater"; }
elseif ($side == "Hall of Fame") { $side = "Hall of Fame"; }
elseif ($side == "Links") { $side = "Links"; }
elseif ($side == "Om") { $side = "Om"; }
else { $side = "404"; }

<---Kode slutter--->

Hvordan får jeg den til at tillade ALLE news_id(evt. på nær 0), for nu "fanger det der den jo, og jeg får 404 fejl.
Avatar billede yHec Novice
28. november 2007 - 20:10 #8
Denne $side = $_GET[side];  skal ændres til $side = $_GET['side'];

Også kan jeg ikke gennemskue, hvad det er du gør i den lange if..elseif..else sætning. Du fortæller faktisk følgende: Hvis $side er "Forside" så sæt $side="Forside". Den er helt overflødig. Hvad er meningen med den?

Mht "Kan ikke finde nyheden" Det er fordi, du jo tjekker databasen hvergang index.php loader, også er get['id'] jo ikke sat, det bliver den først når du bruger et af linkene, du kan slippe af med den ved at sætte $hent_nyhed delen ind i en if(isset($_GET['id'])) { Så køres den del kun, hvis siden er tilgået vhja linket, se desuden min kommentar 27/11-2007 19:47:37. Slet følgende:
if(mysql_num_rows($hent_nyhed) == 0){
            echo"Kunne ikke finde nyheden!";
        }
        else{
            $nyhed = mysql_fetch_array($hent_nyhed);
                echo"$nyhed[titel]<br>";
                echo"$nyhed[text]";
        }
Den er overflødig.

/y
Avatar billede turbodk Nybegynder
28. november 2007 - 22:27 #9
Jeg fandt ud af at det var meget smart at have den der: "Kunne ikke finde nyheden!", ellers vil brugeren jo kunne manipulere med det oppe i adresselinjen, og bede om at se en nyhed der ikke eksisterer..

Det er også derfor den lange if..else..elseif sætning er lavet, nu må du ikke hænge mig op på det, men en ven sagde at det var et sikkerhedsbrist at man kunne tilgå enhver side og sådan, så han lavede det der til mig..


Og hvor er det du vil sætte din if(isset) ind? Jeg kan umiddelbart ikke lige se det? :/
Avatar billede turbodk Nybegynder
28. november 2007 - 22:28 #10
BTW, hvorfor vil du proppe de to ' ind?
Avatar billede yHec Novice
28. november 2007 - 22:53 #11
De to ' mangler hos dig, det er en trykfejl.

Hvis man søger en nyhed der ikke er der, kommer der bare ikke noget ud.

Det er rigtigt, du skal passe på med sql-intrusion, men det løser man med addslashes her, den tilføjer \ som forhindrer intrusion, hvis magic_quotes_gpc ikke er sat - hvad den er default, men det tjekker man - se senere:
$get_id = $_GET['id']; ændres til:
$get_id = addslashes($_GET['id']);

Så kan brugeren ikke succesfuldt fifle med adresselinken.

isset sætter du således:
(isset($_GET['id'])) { <<-----
$get_id = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);//hent id´et (5 er id´et)
    $hent_nyhed = mysql_query("SELECT * FROM nyheder WHERE id = '$get_id'")or die('MYSQL QUERY ERROR : ' . mysql_error());
if(mysql_num_rows($hent_nyhed) == 0){
            echo"Kunne ikke finde nyheden!";
        }
        else{
            $nyhed = mysql_fetch_array($hent_nyhed);
                echo"$nyhed[titel]<br>";
                echo"$nyhed[text]";
}
}

Så søger den kun i databasen, hvis siden tilgåes med url-variablerne sat.

Jeg synes det lyder underligt, hvad din ven har sagt, idet det ikke giver nogen beskyttelse for det du siger. Hvis $_GET['side'] skal lave en hensvisning til en anden side, kan man jo skrive index.php?side="mumibjørn", men hvis der ikke er en side, der hedder mumibjørn.php, får man bare en error 404, og så er det problem løst. Det du gør, er at sætte $side lig med det den allerede er. 404 sker jo af sig selv...?
(Jeg kan iøvrigt ikke se, hvor du redirecter til en nyhedsside!)

Men dig om det, det bare bøvlet, at skalere siden så, hvis du finder på flere sider, så skal du ind og rette i if..elseif..else hvergang du gør det!

/y
Avatar billede turbodk Nybegynder
29. november 2007 - 09:20 #12
Jeg kan godt se hvad du mener, forskellen er jo at nu bruger jeg jo en "hjemmelavet" 404, men det er jo lige meget..

Jeg ved godt jeg skal ind og tilføje det i min længe if..elseif..else sætning, hver gang jeg vil have en ny side..


Hvad er det du har gjort anderledes i koden ovenfor, i forhold til den kode jeg smed, udover du har
Avatar billede turbodk Nybegynder
29. november 2007 - 09:23 #13
Sry kom til at trykke send lidt fortidligt, fortsætter lige xD

..din isset med?

Og du har ikke nogen forslag til hvordan jeg kan tillade alle værdier i news_id(evt. på nær 0)?
Avatar billede yHec Novice
29. november 2007 - 14:27 #14
Det jeg har ændrest, er isset, hvilket er ret væsentligt, den sørger for, at der kun søget i databasen, når $_GET['id'] er sat, desuden har jeg sikret dig mod sql-intrusion.

Jeg ved ikke hvad du mener med at tillade alle værdier i news_id. Forklar. Hvad bruger du den til?

/y
Avatar billede turbodk Nybegynder
30. november 2007 - 08:44 #15
Jeg kigger lige senere idag, og ser om det stadig er et problem, for det kan jo være du har løst det :)
Avatar billede turbodk Nybegynder
11. december 2007 - 19:49 #16
Undksyld jeg har ladet svaret vente sådan :S
Jeg har været noget så hængt op her på det sidste..

Det var ikk så smart, så jeg hæver pointene til 200...

Min situation er næsten det samme, uden at være det:
Jeg har lavet linkene nu, de ser således ud; http://mitdomæne.dk/index.php?side=Vis%20nyhed&id=data['id']..

Men, hvordan får jeg så siden "Vis nyhed.php" til at kun at vise nyheden med id'et "data['id']"?

Og hvordan tillader jeg ALLE id'er i min lange if..else..elseif sætning?
Eller, nogle der kan komme på en anden løsning?(Din fungerede sikkert udemærket y, men så skriv lige nøjagtigt hvad jeg skal skrive hvor, for hvis ikk det skal se ud som det gør nu, så aner jeg virkeligt ikke hvordan :S)
Avatar billede yHec Novice
11. december 2007 - 21:40 #17
Avatar billede turbodk Nybegynder
11. december 2007 - 21:54 #18
Nå ja, det burde jeg jo have sagt, linket er i en echo :) Så er det vel ikk nødvendigt, vel?
Avatar billede turbodk Nybegynder
07. marts 2008 - 22:11 #19
.
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