Gå til innhold

Generere PHP-sider fra database


Anbefalte innlegg

Hei!

 

 

Har stilt noen spørsmål her inne i det siste, og fått veldig god hjelp til alt. Har nå en vrien sak til.

Først og fremst beklager for den dårlige emnetittelen. Var vanskelig å samle dette i en setning.

 

 

Her er greia. Jeg har laget en kjapp nettside som demonsterer svært simpelt hva jeg ønsker. Jeg har først og fremst en MySQL med en tabell som heter artikler. I tabellen har jeg følgende felter:

category, date, title, pictureurl og text.

 

Hovedsaken her er å publisere artikler som skal skrives til og lagres i denne tabellen, og som automatsk skal hentes ut igjen.

 

 

Jeg bruker følgende kode for å legge artikkelen inn i databasen:

 

<form action="insert.php" method="post"><br>

Category:<br>
<input type="text" name="category" /><br><br>

Date:<br>
<input type="text" name="date" /><br><br>

Title:<br>
<input type="text" name="title" /><br><br>

Picture-URL:<br>
<input type="text" name="pictureurl" /><br><br>


Text:<br>
<textarea rows="20" cols="50" name="text"></textarea><br><br>

<br>

<input type="submit" value="send"/>
</form>

 

 

Denne siden ser f.eks slik ut: form.php

 

 

 

 

Skjemaet benytter følgende kode for å legge artikkelen inn i databasen:

 

 

<?php
$con = mysql_connect("localhost","username","pwd");
if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

mysql_select_db("min_db", $con);

$sql="INSERT INTO artikler (category, date, title, pictureurl, text)
VALUES
('$_POST[category]','$_POST[date]','$_POST[title]','$_POST[pictureurl]','$_POST[text]')";

if (!mysql_query($sql,$con))
 {
 die('Error: ' . mysql_error());
 }
echo "En artikkel lagt inn";

mysql_close($con)
?>

 

 

Dette fungerer så langt glimrende.

 

Så har jeg en forside på nettområdet mitt som henter ut den siste, den nest siste, og den tredje siste artikkelen fra databasen. Den siste og nyeste vises med de 600 første tegnene og en "read more"-link. De to andre artiklene vises med de 200 første tegnene (f.eks) og en "Read more"-link.

 

Koden jeg bruker for denne forsiden er denne:

(dette er kun koden for den NYESTE / øverste artikkelen)

 

 

<?php
$con = mysql_connect( "localhost", "username", "pwd" ) or die( 'Could not connect: ' . mysql_error() );
mysql_select_db( "min_db", $con ) or die( mysql_error() );

$result = mysql_query( "SELECT * FROM `artikler` ORDER BY id DESC LIMIT 1; " ) or die( mysql_error() ); 

while($row = mysql_fetch_array($result))


 {  
 echo "<font color=#919191>" . $row['date'] . "</font>";

 echo "<br />";
 echo "<b><font color=B9720E size=2>" . $row['title'] . "</font></font></b>";
 echo "<br />";
 echo "<br />";
 echo "<br />";
 echo $row['pictureurl'];
 echo substr($row['text'], 0, 600); 
 echo "<br />"
 echo "...... " . "<a href=#>Read More</a>;
 echo "<br /><br /><br /><br /><br />"; 

 }
mysql_close($con);
?>

 

 

 

Dette går også fint. Jeg får til å hente ut artikkelen. Bortsett fra Read More-linken som jeg ikke vet hvordan jeg skal behandle. Og her er det store spørsmålet:

 

Hvordan kan jeg gjøre det slik at når noen klikker på Read More på en av artiklene (den siste, nest siste osv), så åpnes siden articles.php, hvor den artikkelen som ble klikket på, åpnes i sin helhet ut fra databasen?

 

Altså skal alle artikler åpnes i rammene til articles.php.

 

 

Hvis noen kan hjelpe meg å få til dette, så hadde jeg blitt veldig glad. Eller om dere ihvertfall kan si om dette er vanskelig å få til, eller om det bare skal noen kodesnutter til.

 

Et eksempel på forsiden er her (svæææært forenklet), og et eksempel på articles-siden her

Lenke til kommentar
Videoannonse
Annonse

Det er ikke sikkert at det å order etter pk id'n gjør at du henter ut den siste artikkelen, jeg har opplevd flere ganger at ting blir satt inn i pk verdier som er slettet. Er usikker på om det har med tabell typene, eller om det er noe annet som påvirker dette. Men det er mye bedre å order by en timestamp eller noe lig.

 

Det enkleste er å bruker id i tabellen din, som identifiserer artikkelen. Som regel en Priamry Key el.lig.

Så når du printer ut listen med linker så blir linken din slik : <a href="articles.php?id=<?php echo $row['id']; ?>">Les mer</a>

 

så på articles.php siden din gjør du om sql koden din til følgende : SELECT * FROM `artikler` WHERE id = ".$_GET['id']."...

 

Da burde du vel ha mulighet til å velge hvilken artikkel du skal kunne se.

 

For å kunne å automatisk hente ut de forskjellige collonene må du bruker DESC artikler, så kjøre en mapping opp av datatyper osv, for så printe de ut korrekt.

 

For å få ut alle artikklene må du bare omstrukturere sql settningen din, fjern limit delen så får du opp alle radene i basen.

 

Jeg er ikke en veldig stor fan av denne måten, jeg hadde mye heller hoppet på OOP for så å bruke mvc pattern og reflection for generer opp slike ting, men du er kanskje ikke helt der ennå.

Endret av JcV
Lenke til kommentar
Jeg er ikke en veldig stor fan av denne måten, jeg hadde mye heller hoppet på OOP for så å bruke mvc pattern og reflection for generer opp slike ting, men du er kanskje ikke helt der ennå.

 

 

Jeg skal love deg jeg ikke er der ennå :cry:

 

Men tusen takk for et langt og godt svar. Hyggelig at du tar deg tid. Det du sier er at dersom jeg gjør om til <a href="articles.php?id=<?php echo $row['id']; ?>">Les mer</a> og

SELECT * FROM `artikler` WHERE id = ".$_GET['id']."..., så vil dette kunne fungere?

 

Jeg har en id-kolonne som er primary key forøvrig.

 

Forstod ikke helt det med DESC-artikler, men det holder kanskje å gjøre det du nevnte ovenfor?

 

Får ikke testet noe nå ettersom jeg er på jobb.

 

 

 

EDIT:

Kom hjem fra jobb nå og det ser jo ut til å fungere perfekt! Mulig jeg må teste litt mer, men så langt ser det ut som om det er akkurat dette jeg trengte :grin:

Endret av tomarild
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...