dynamische webpagina maken met PHP

Status
Niet open voor verdere reacties.

nonono

Gebruiker
Lid geworden
28 jan 2009
Berichten
289
Ik heb een 3-tal webpagina´s. demo A.htm, demo B.htm en demo C.htm. De pagina´s zijn opgemaakt in kolom stijl.
Een pagina wordt geopend met bijv. Demo A.htm en dan wordt tekst A getoond. In de linker kolom vervolgens op “tekst B” klikken en de pagina Demo B.htm wordt geopend.
De layout van de pagina´s blijft ongewijzigd. Alleen een wijziging in het tekst gedeelte van “A” naar “B” en in de linker kolom een verandering van de links van”tekst B/tekst C” naar “tekst A/tekst C”.
Als newbie heb ik het php programmeren nog niet onder de knie, maar ik begrijp dat deze drie pagina’s tot 1 pagina terug te brengen zijn met bijv. Demo.php. Deze pagina bevat dan de volgende links?:

Code:
<tr>
 <td><a href=”Demo.php?ID=A”>tekst A</a></td>
</tr>


Code:
<tr>
 <td><a href=”Demo.php?ID=B”>tekst B</a></td>
</tr>

Code:
<tr>
 <td><a href=”Demo.php?ID=C”>tekst C</a></td>
</tr>

Tot zover kan ik het volgen.
Maar wat betekent “…?ID=..” ? Waar moet ik de verschillende tekst bestanden onderbrengen?

Alvast bedankt, Nono

Met enig geduld heb ik een server op de pc geïnstalleerd met de volgende componenten: Apache 2.2.15 / PHP 5.3.2 / MySQL 5.1.37 / phpMyAdmin 3.3.6

Bekijk bijlage demo ABC.rar
 
Dat is makelijk te doen met een switch:

PHP:
<?php
if(isset($_GET['id'])){
 switch($_GET['id']){
  case 1:
   print "Text pagina 1";
  break;
  case 2:
   print "Text pagina 2";
  break;
  case 3:
   print "Text pagina 3";
  break;
  default:
   print "Als id wel bestaat maar niet voorkomt.";
 }
}else{
 print "Als id niet bestaat";
}
?>

Dan als je naar demo.php?id=1 gaat krijg je 1 tezien etc.

Brian van der Horst
 
Laatst bewerkt:
Voor de expert gemakkelijk. Ik worstel, maar kom nog niet boven.

Zijn er voorbeeldbestanden, waarin je kunt zien hoe het PHP gedeelte en het HTMLgedeelte zijn opgebouwd?
 
Kijk

$_GET['']
waarde mee gestuurd in de url.

isset($var)
Kijk je of de waarde bestaat.

switch($var)
verschillende opties per variable.

case waarde:
wat er moet gebeuren als de $var van switch overeenkomt met waarde.

break;
sluit de case af.

default:
kies je wat er vertoont moet worden als er geen waarde overeenkomt.

print("HTML Of Text kun je hier plaatsen dat moet verschijnen.");
 
Wat RoboticPro bedoelt is dat je dan een website krijgt met bijvoorbeeld de volgende link
http://www.test.nl/index.php?id=1

Hierbij is 'id' de naam en '1' de waarde.
De waardes achter '?'-teken kan je ophalen met de PHP variabele $_GET. Hierbij moet je de naam meegeven in de $_GET variabele zodat je het volgende krijg:
PHP:
$_GET["id"]

Om nu de waarde uit deze variabele te krijgen moet je hem als volgt assignen:
PHP:
// Hierdoor krijgt de variabele $id de waarde 1
var $id = $_GET["id"]

En deze variable kan je dan weer gebruiken in een switch-statement om te controleren welke tekst je wilt tonen zoals RoboticPro aantoonde.

Voor meer informatie over $_GET en switch.

groeten vreugde
 
Dat is inderdaad een voorbeeld link
je moet www.test.nl vervangen door je site adres
index.php door je pagina wel .php extensie geven.
en ?id=1 is de GET variable met waarde 1

Brian van der horst
 
Was je ook nog van plan meerdere teksten erbij te gaan zetten? Want in dat geval is een switch in php niet zo handig...

Php code:
PHP:
<?php

if(isset($_GET['id']) && !empty($_GET['id']) { // Controleer of de variabele in de link opgevult is

	$id = $_GET['id']; // Sla variabele van link op in variabele $id

	$forbidden = array('/', '.', '?', '&'); // Maak een variabele met meerdere dingen als inhoud aan (de dingen die niet mogen voorkomen in $id)

	$id = str_replace($forbidden, '', $id); // Vervang de verboden items uit $id

	if(file_exists($id.'.html')) { // Controle of het bestand bestaat

		include $id . '.html'; // Voeg pagina in

	} else { // bestand bestaat niet

		echo 'Dit bestand bestaat niet!';

	}

} else { // Link is niet opgevult

	echo 'Dit item werd niet gevonden!';

}

?>

Dit soort scripts gebruik ik vaak hiervoor, maar het is wel een beetje ingewikkeld :)
 
Want in dat geval is een switch in php niet zo handig...
Dat snap ik zelf niet...

Een switch statement is eigenlijk een heleboel If-Else statements maar dan zonder de voorwaardes waaraan If-statement moet voldoen. Hierdoor zal je minder code nodig hebben en zal alles ook overzichtelijker zijn.

Maar ik denk dat het eerder te maken heeft met je gevoel erbij is i.p.v. de functionaliteit want beide mogelijkheden kunnen werken.

groeten vreugde
 
Als je een heleboel paginas wil gaan maken, dan zul je bij elke pagina die je maakt, de switch moeten aanpassen... Bij het if/else statement hoeft dat weet niet persé (Als je dat ene codefragment in men vorige post bekijkt).

Met switch sluit je dingen uit, voldoet het er niet aan, dan gaat ie naar default. Dit kan dus handig zijn als je bijvoorbeeld geen pagina's meer gaat toevoegen!
 
Het is dus niet zo makkelijk als het lijkt.

Inderdaad. Wat ik aangegeven heb als tekstgedeelte, en wat dus steeds "ververst" wordt, daar kunnen ook plaatjes in opgenomen worden.
Het mooiste zou zijn een voorbeeldbestand dat ik op de localhost kan draaien. De ontwerppagina (php) geeft inzicht in de opbouw en de output zie ik in de browser.

Maar ja, wie heeft zo´n testbestand?
 
Bijv. uit een cursus?
De opmaak van de pagina, waaruit je kunt zien wat in het html gedeelte komt en en wat in het php gedeelte komt.
Dit resultteert in een pagina op de server, die vervolgens een html pagina genereert.
Op de html pagina heb je dan de mogelijkheid om een "andere" pagina aan te roepen,waarbij dan slechts een gedeelte op de pagina gewijzigd wordt.
Ik kan me voorstellen dat zoiets dergelijks een projekt van een cursus is met als resultaat een "testbestand".
 
Je bedoeld een index.php die een basis html pagina toont waarop je verschillende soorten content kan plaatsten die de structuur van de HTML niets aan doet maar wel de inhoud wijzigt

Dus met anders woorden een index.php pagina:
PHP:
<?php
// include van andere php bestanden die de inhoud maken
include_once "content.php";
?>
<html>
<head></head>
<body>
<?php
  // Voor het maken van een content pagina vanaf content.php
  echo CreateContent();
?>
</body>
</html>

En dan heb je een content.php die onderscheidt maakt in verschillende soorten paginas
PHP:
<?php
function CreateContent()
{
   $return = "";
   if (isset($_GET["id"])
   {
       $id = $_GET["id"];
       switch($id)
       {
          case 1:
              // doe wat voor de eerste pagina
              $return = "";
              break;
          case 1:
              // doe wat voor de tweede pagina
              $return = "";
              break;
          default:
              // doe wat voor de default pagina
              $return = "";
              break;
       }
   }

   return $return;
}
?>

Zo iets kan je doen maar uiteraard zijn er vele mogelijkheden en daarvoor kan je beter zoeken naar Template Scripts PHP op de bekende zoekmachines

groeten vreugde
 
Op deze manier zou het dan moeten lukken.
Ik het het proberen.
Ook zal ik op zoek gaan naarTemplate Scripts PHP.

Bedankt voor je reaktie, Nono
 
Dat ene voorbeeld werkt met functies. Zelf werk ik niet zo veel met functies.

Ik dacht meer aan het volgende codefragment:
PHP:
<?php include 'config.php'; ?>
<html>
<head>
<title>
<?php echo $title; ?>
</title>
</head>
<body>
<p>Dit is een pagina die dynamisch is, kijk maar naar het voorbeeld hieronder:</p>
<br /><br />
<?php
 
if(isset($_GET['id']) && !empty($_GET['id']) { // Controleer of de variabele in de link opgevult is
 
    $id = $_GET['id']; // Sla variabele van link op in variabele $id
 
    $forbidden = array('/', '.', '?', '&'); // Maak een variabele met meerdere dingen als inhoud aan (de dingen die niet mogen voorkomen in $id)
 
    $id = str_replace($forbidden, '', $id); // Vervang de verboden items uit $id
 
    if(file_exists($id.'.html')) { // Controle of het bestand bestaat
 
        include $id . '.html'; // Voeg pagina in
 
    } else { // bestand bestaat niet
 
        echo 'Dit bestand bestaat niet!';
 
    }
 
} else { // Link is niet opgevult
 
    echo 'Dit item werd niet gevonden!';
 
}
 
?>
</body>
</html>
 
if(isset($_GET['id']) && !empty($_GET['id']) { // Controleer of de variabele in de link opgevult is

$id = $_GET['id']; // Sla variabele van link op in variabele $id

$forbidden = array('/', '.', '?', '&'); // Maak een variabele met meerdere dingen als inhoud aan (de dingen die niet mogen voorkomen in $id)

$id = str_replace($forbidden, '', $id); // Vervang de verboden items uit $id

if(file_exists($id.'.html')) { // Controle of het bestand bestaat

include $id . '.html'; // Voeg pagina in

} else { // bestand bestaat niet

echo 'Dit bestand bestaat niet!';

}

Dat kan je beter veranderen in dit:
PHP:
<?php
// Controleer of de variabele in de link opgevult is
if(isset($_GET['id']) && !empty($_GET['id']) 
{
	// Voeg pagina in
	if(file_exists($_GET['id'].'.html'))
		include $id . '.html';
	// bestand bestaat niet
	else
		echo 'Dit bestand bestaat niet!';
}
?>

aangezien wanneer je een variable op wilt halen met de $_GET method je nooit de characters "/", ".", "&" of "?" in zal zien, tenzij je dat expliciet heb gedaan of een gebruiker zelf in de URL lopen te prutsen.

Een voorbeeld:
PHP:
// Je hebt de URL -> index.php?id=2&blaat=20
// Haal de ID op als die gezet is en niet leeg
if (isset($_GET["id"]) && !empty($_GET["id]))
   $id = $_GET["id"];    // Dit geeft de variable $id de waarde 2

Daarnaast is dit veel overzichtelijker en sneller dan PHP functies aan te roepen waar je uiteindelijk geen extra profijt van heb
 
Dat kan je beter veranderen in dit:
PHP:
<?php
// Controleer of de variabele in de link opgevult is
if(isset($_GET['id']) && !empty($_GET['id']) 
{
	// Voeg pagina in
	if(file_exists($_GET['id'].'.html'))
		include $id . '.html';
	// bestand bestaat niet
	else
		echo 'Dit bestand bestaat niet!';
}
?>

aangezien wanneer je een variable op wilt halen met de $_GET method je nooit de characters "/", ".", "&" of "?" in zal zien, tenzij je dat expliciet heb gedaan of een gebruiker zelf in de URL lopen te prutsen.

Een voorbeeld:
PHP:
// Je hebt de URL -> index.php?id=2&blaat=20
// Haal de ID op als die gezet is en niet leeg
if (isset($_GET["id"]) && !empty($_GET["id]))
   $id = $_GET["id"];    // Dit geeft de variable $id de waarde 2

Daarnaast is dit veel overzichtelijker en sneller dan PHP functies aan te roepen waar je uiteindelijk geen extra profijt van heb

Daar heb je het al, injecties :)

ik vul in:
http://www.eenofanderesite.com/eenofandereviruspagina
de server include:
http://www.eenofanderesite.com/eenofandereviruspagina.html

Veel servers zijn natuurlijk al beveiligt tegen het includen van buitenaf, maar je weet maar nooit. Door alleen al de punt eruit te filteren, maak je dit onmogelijk :)
 
punten moeten er inderdaad uit en ook slashes...

Stel dat ik de pagina zo zou aanroepen:

http://www.eenofanderesite.com/index.php?id=../../security_settings.php

(voorbeeldje)

Dan zou ik zo bestanden waarvan je helemaal niet wilt dat ik ze kan zien uit een hoger liggende map op het scherm toveren. Als je server goed beveiligd is is dat natuurlijk geen probleem, maar de oplossing van 5blabla5 om punten, slashes, etc. eruit te filteren zie ik zeker niet als overbodig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan