Hämta enskilda blogginlägg och länka till dessa i PHP/Mysql?

Permalänk

Hämta enskilda blogginlägg och länka till dessa i PHP/Mysql?

Jag håller på med en blogg i PHP och inläggen lagras i mysql där jag har dessa kolumner: id, title, content, username, kategori, datum och tid. I nuläget går det att skriva inlägg som lagras i databasen och de hämtas i datumordning till förstasidan, där fem inlägg visas per sida. Det är dock en viktig detalj som saknas och det är enskilda sidor för varje blogginlägg. Jag vill kunna trycka på titeln på ett av inläggen på första sidan och då komma till detta enskilda inlägget. Jag har ingen kod för detta som jag skickar med, för det är inte kodandet i sig som är problemet. Jag vet inte hur jag ska tänka här. Frågan är alltså hur jag bäst hämtar enskilda blogginlägg för att läggas på en egen sida, antingen en fysiskt egen sida eller dynamisk sida.

Jag antar att dynanisk är bäst och jag har inga problem att hämta inläggen och visa en per sida så, men jag vet inte hur jag sedan identifierar dessa och kopplar ihop de med titlarna på huvudsidan så att jag kommer till rätt enskilda inlägg.

Även om jag inte har testat denna varianten antar jag att det inte ska vara några problem att hämta till en fysisk egen sida. Det verkar dock som att det är onödigt omständigt.

Det är inte nödvändigt med en kod för detta, utan mer själva tillvägagångssättet. Själva tänket, för jag är helt nollställd. Jag skulle vara väldigt tacksam om någon kunde klargöra detta för mig.

Mvh
Suzanne

Permalänk
Medlem

Jag skulle lösa det med att ha länkar som "blaha.com/4312-Hep_pa_er_alla" där 4312 är ID för själva posten.
Eller så gör man som Wordpress gör. Skapar ett filtrerat id (ta bort ogliiga tecken för URLer) samt spara det och om flera titlar krockar med varandra så appendar man ett nummer i slutet.

Permalänk
Medlem

Kände för att skriva lite kod.

<?php //single.php // //single.php?bloggid=X //Använd gärna modrewrite för att få snygga urler som www.bloggen.se/*ID*/titel-är-här-för-att-det-är-snyggt-men-an... if(intval($_GET['bloggid'])) //INTVAL, säkerhets grej { try { $result = Databas::find()->where('id', $_GET['bloggid'])->get_one(); //Hämta blogginlägget //Mysql: mysql_query("SELECT * FROM bloggPosts WHERE bloggid = '". $_GET['bloggid'] ."' LIMIT 1") OR die(log_error(mysql_error())); }catch(DBError $e) { //Finns inget blogg inlägg $error['404'] = "Blogg inlägget finns inte!"; } } ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div class="container"> <div class="row "> <div class="span12"> <? if(isset($result)) : ?> <h1><?= $result['title']; ?></h1> <p><?= $result['content']; ?></p> <author><?= $result['author'] ?></author> <date><?= date("Y-m-d H:i:s", $result['date']); ?></date> <? endif; ?> <? if(isset($error)) : ?> <ul class="error"> <? foreach($error as $msg) : ?> <li><?= $msg; ?></li> <? endforeach; ?> </ul> <? endif; ?> </div> </div> </div> </body> </html>

Visa signatur

Programmerare -> PHP | HTML | CSS | JS | Java.

Permalänk
Skrivet av iXam:

Jag skulle lösa det med att ha länkar som "blaha.com/4312-Hep_pa_er_alla" där 4312 är ID för själva posten.
Eller så gör man som Wordpress gör. Skapar ett filtrerat id (ta bort ogliiga tecken för URLer) samt spara det och om flera titlar krockar med varandra så appendar man ett nummer i slutet.

Att använda id är vad jag har funderat på, men jag har ändå inte lyckats klura ut hur. Antagligen är jag ute och cyklar, men jag har lagt till id på två ställen som koden nedan och därmed får jag numera en länk med det här formatet när jag trycker på titeln: http://domain.com/?p=id Den här länken leder dock inte till en sida med blogginlägget, vilket är naturligt för jag har inte skapat den än. Förmodligen hade det varit enklare att klura ut om jag hade gjort koden för sidpagination själv, men det är den enda koden som jag inte fixat själv och därmed har jag inte riktigt grepp om hur det fungerar.

Så hur skapar jag dynamiska sidor för enskilda blogginlägg så de får formatet id.php? Det skulle säkert gå att skapa en ny fysisk sida för varje inlägg när inlägget görs och det skulle jag kunna fixa, men det känns som att det skulle vara en väldigt usel idé om bloggen t ex skulle innehålla 1000 inlägg. Nu när det är dynamiska sidor som ska skapas blir jag förvirrad, då jag inte riktigt förstår hur de dynamiska skapas. Jag hade stora problem att finna rätt kod som var tillräckligt enkel för att få sidpaginering att fungera.

<?php ... while($row = mysql_fetch_array($sql)){ $id = $row['id']; $title = $row['title']; $content = $row['content']; $category = $row['category']; $datum = $row['datum']; $tid = $row['tid']; $username = $row['username']; ?>

<h2><a href="<?php echo $id; ?>"><?php echo $title; ?></a></h2> ...

<?php } ?>

Permalänk
Medlem

Länk till blogginlägget:
<a href="/postid=<?= $id; ?>"><?= $title; ?></a>

När du trycker på länken kommer du till tex: www.domain.com/?postid=56

Då har du en variable som blir $_GET['postid'] för i detta fallet "56"
Viktigt här för att inte underlätta för mycket för SQL injectioner är att du kollar så $_GET['postid'] endast innehåller siffror.
Sen är det bara att hämta rätt rad i databasen.

Visa signatur
Permalänk
Skrivet av chila:

Länk till blogginlägget:
<a href="/postid=<?= $id; ?>"><?= $title; ?></a>

När du trycker på länken kommer du till tex: www.domain.com/?postid=56

Då har du en variable som blir $_GET['postid'] för i detta fallet "56"
Viktigt här för att inte underlätta för mycket för SQL injectioner är att du kollar så $_GET['postid'] endast innehåller siffror.
Sen är det bara att hämta rätt rad i databasen.

Det jag inte hänger med på är hur jag kommer till sidan med inlägget. Jag har en sida i mappen blogg/ som heter index.php och det är på den sidan som alla blogginlägg samlas med t ex fem inlägg per sida. Sedan har jag tänkt att använda page.php som också ligger under blogg/ för enskilda blogginlägg.

Om jag nu använder ovanstående länk i blogg/index.php som då hämtar korrekt id och sedan använder $_GET['postid'] i blogg/page.php, så spelar koden i page.php ingen roll för jag kommer aldrig dit. Hur gör jag för att länken ska gå till blogg/page.php där koden finns? För jag måste ju skapa en särskild sida för enskilda inlägg.

Permalänk
Medlem
Skrivet av suzanne68:

Det jag inte hänger med på är hur jag kommer till sidan med inlägget. Jag har en sida i mappen blogg/ som heter index.php och det är på den sidan som alla blogginlägg samlas med t ex fem inlägg per sida. Sedan har jag tänkt att använda page.php som också ligger under blogg/ för enskilda blogginlägg.

Om jag nu använder ovanstående länk i blogg/index.php som då hämtar korrekt id och sedan använder $_GET['postid'] i blogg/page.php, så spelar koden i page.php ingen roll för jag kommer aldrig dit. Hur gör jag för att länken ska gå till blogg/page.php där koden finns? För jag måste ju skapa en särskild sida för enskilda inlägg.

Antingen använder du mod_rewrite eller liknande eller så länkar du tll "/page.php?page=ID".

Permalänk

Äntligen har jag fått till detta, så nu kanske jag kan få lite sömn.

Länkarna till post.php ser ut så här:

<a href="?p=pages/blogg/post&id=<?php echo $row['id']; ?>"><?php echo $id.' - '.$title; ?></a>

och på post.php har jag den här koden:

<?php /*Jag borde inte behöva ha dessa två rader, men hur jag än vänder och vrider på det så får jag konstiga tecken i stället för å, ä och ö annars. Jag har hela tiden valt utf-8 i mysql och jag har det också i html-raden längst upp. */ mysql_query("SET NAMES 'utf8'") or die(mysql_error()); mysql_query("SET CHARACTER SET 'utf8'") or die(mysql_error()); if(isset($_GET['id'])){ $id = $_GET['id']; } else{ $id = 1; } $sql = mysql_query("SELECT * FROM blogdata WHERE id='$id'") or die(mysql_error());; $row = mysql_fetch_array($sql); $id = $row['id']; ?>

Tack för alla idéer som medverkat till att jag så småningom hamnade rätt eller åtminstone fungerande

Senare ska jag försöka med mod rewrite eller filtrering för att få trevligare länkar, men jag fick inte till det förra gången jag försökte och nu behöver jag lite sömn.