BlockqouteMedlem sedan dec. 200380 inlägg
Jag vill att det på min startsida skall finnas nyheter. Dessa nyheter skall sparas i en databas som ser ut som nedan:
CREATE TABLE `nyheter` (
`id` mediumint(11) NOT NULL auto_increment,
`datum` date NOT NULL default '0000-00-00',
`rubrik` varchar(50) NOT NULL default '',
`nyhet` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Nyheterna skall visas så att de två nyaste nyheterna skall skrivas ut till sin helhet överst, datum och rubrik överst och nyheten under det. Under dessa två nyheter vill jag att alla de äldre nyheterna listas bara som länkar, där datum och rubrik utgör länken. Om man klickar på någon av dessa länkar så skall enbart denna nyhet komma upp överst, samt att en lista av samtliga nyheter skall visas under som länkar. Denna nyhet samt lista kan alltså öppnas i ett nytt fönster, det spelar ingen roll. Finns det någon som kan komma med tips eller lösningar på hur man kan göra detta?
preyMedlem sedan jan. 2002369 inlägg
Jag gissar att det är PHP du vill använda?
$i=1;
mysql_open(...);
$rs = mysql_query("SELECT * FROM nyheter ORDER BY datum DESC");
while($news = mysql_fetch_array($rs)){
if($i <= 2){
echo "Rubrik: " . $news["rubrik"] . "<br/>\n";
echo "Datum: " . $news["datum"] . "<br/>\n";
echo "Text: " . $news["text"] . "<br/>\n";
} else {
if($i == 3) echo "Fler nyheter...<br/>\n";
echo '<a href="nyhet.php?id=' . $news["id"] . '" target="_blank">' . $news["rubrik"] . "</a><br/>\n";
}
$i++;
}
tydalMedlem sedan juni 20033 788 inlägg
BlockqouteMedlem sedan dec. 200380 inlägg
prey skrev:
Jag gissar att det är PHP du vill använda?
Det stämmer bra det.
Har testat din kod nu och ändrat lite på det så den fungerar lite bättre, var några kolumnnamn som inte stämde bara. Samt att jag gjorde så att när man klickar på länken så är det samma sida som uppdateras. Så koden ser nu ut som nedan:
<?php
$i=1;
$rs = mysql_query("SELECT * FROM nyheter ORDER BY datum DESC");
while($news = mysql_fetch_array($rs)){
if($i <= 2){
echo "Rubrik: " . $news["rubrik"] . "<br/>\n";
echo "Datum: " . $news["datum"] . "<br/>\n";
echo "Text: " . $news["nyhet"] . "<br/>\n";
} else {
if($i == 3) echo "Fler nyheter...<br/>\n";
echo '<a href="index.php?id=' . $news["id"] . '" >' . $news["rubrik"] . "</a><br/>\n";
}
$i++;
}
?>
Men jag har en fundering, när man klickar på en av nyhetslänkarna så uppdateras bara sidan, med samma innehåll som det var innan man klickat. Den nyhet som hör till länken man klickat på kommer alltså inte upp. Vet du någon bra lösning på detta?
tydalMedlem sedan juni 20033 788 inlägg
ID:t till nyheten man klickat på finns i variabeln $_GET['id'] så du behöver säga åt Mysql att bara hämta just den nyheten. Det gör man med WHERE:
$rs = mysql_query("SELECT * FROM nyheter WHERE id = '" . $_GET['id'] . "'");
Om detta och annat kan du läsa mer om på länken jag postat ovan.
preyMedlem sedan jan. 2002369 inlägg
För en enstaka nyhet blir alltså koden:
if(!is_numeric($_GET["id"])) die("Försök inte förstöra här...");
$id = mysql_real_escape_string($_GET["id"]);
$rs = mysql_query("SELECT * FROM nyheter WHERE id = '$id'");
while($news = mysql_fetch_array($rs)){
echo "Rubrik: " . $news["rubrik"] . "<br/>\n";
echo "Datum: " . $news["datum"] . "<br/>\n";
echo "Text: " . $news["nyhet"] . "<br/>\n";
}
}
(mysql_real_escape_string gör att ingen kan förstöra sql-frågan med en s.k. sql-injection attack, if(is_numeric...) gör samma sak fast brutalare :) )
Om du vill att både alla nyheter och enstaka nyheter ska finnas på samma sida (fast inte samtidigt) kan du skriva:
if(isset($_GET["id"])){
//kod för enstaka nyhet
} else {
//kod för att vissa massa nyheter
}