tisdag 11 oktober 2011

Skapa en dynamisk PHP-Mysql sida

I detta inlägg kommer jag gå igenom hur du ska göra för att skapa en dynamisk sida, som hämtar information från databasen för varje sida du är inne på.

Detta sköts genom att länka tex "index.php?id=1" till att hämta data från vår databas.
Nedan är ett enkelt exempel:

1. Först behöver du skapa en ny tabell i din databas, döp den till pages(eller det som passar)

CREATE TABLE IF NOT EXISTS `pages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `body` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Data i tabell `pages`
--
INSERT INTO `pages` (`id`, `body`) VALUES
(1, 'Text till sida 1'),
(2, 'Text till sida 2');

Nu har du skapat en tabell som heter pages, som har en unik id, och text för varje sida.


2. Nu ska vi använda oss av PHP för att bygga ett enkelt menysystem, där vi ska länka till våra sidor.
Jag kommer använda funktioner, se tidigare inlägg Funktioner för mer information.

Det första vi ska göra är att skapa en variabel

 $pageid = $_GET['pid'];
Variabeln $pageid får värdet som skickas via pid

Sedan skapar jag en testlänk, Ifall du trycker på den så ska $pageid få värdet 1, testa skriva ut $pageid för att se att allt fungerar.
<a href="index.php?pid="1">sida1</a>


Nu när allt verkar fungera, så ska vi radera länken vi nyss gjorde, och göra nya, dynamiska länkar som visas beroende på vad vi har för information i databasen.

Under variabeln $pageid skriver jag:


$page= execute_query("SELECT id, body FROM `pages` where id ='$pageid'"); 
foreach($page as $page) { 
$body = $page['body'];
}


Här hämtar vi body från databasen, där id är densamma som $pageid.
Så ifall $pageid är 1, så hämtas också texten ur body där id är ett.

Jag tror ni börjar fatta galoppen nu.
Det vi ska göra nu är att skriva ut länkarna, detta gör vi på ett liknande sätt:



$menu= execute_query("SELECT id FROM `pages`"); 
foreach($menu as $menu) { 

echo '<a href="index.php?pid='.$menu['id'].'">'.$menu['id'].'</a>';
}


Det sista som behöver göras är att skriva ut variabeln $body, lägg den mellan <body> och </body>.

Viktigt!
Du bör ändra din $pageid variabel till:

$pageid = preg_replace("[^0-9]","",$_GET['pid']);
$pageid = preg_replace('/\/[a-z][a-z]\//', '/', $_GET['pid']);
Detta används för att förhindra mysql-injection, din sida blir säkrare. (preg_replace kan variera beroende på viljen php-version du kör, får du upp felkoder kan du testa ändra till ereg_replace, annars kolla upp på php-net)



Hela php-koden:


<?php
include_once("database.php");
$pageid = $_GET['pid'];

$page= execute_query("SELECT id, body FROM `pages` where id ='$pageid'"); 
foreach($page as $page) { 
$body = $page['body'];
}
$menu= execute_query("SELECT id FROM `pages`"); 
foreach($menu as $menu) { 
echo '<a href="index.php?pid='.$menu['id'].'">'.$menu['id'].'</a>';
}
?>
</head>
<body>
<?php echo $body; ?>
</body>








Inga kommentarer:

Skicka en kommentar