basisprincipes
Ik wil een eenvoudige website creeren van enkele pagina's waarbij de header en footer steeds hetzelfde blijven. De inhoud op de site zou ik in een MySQL database bewaren. Enkele van mijn vragen...
* Kan iemand mij een korte samenvatting geven van de recentste php OOP principes? Dat zou fantastisch zijn!
* Vroeger zou ik de header en footer code in een aparte php file zetten en gewoon op elke pagina include header.php en include footer.php gebruiken om de files aan te roepen. Tegenwoordig zie ik in recentere templates en ook bij wordpress sites enzo dat er een get_header() functie geschreven wordt. Wat is de mooiste / veiligste oplossing en hoe wordt dat toegepast?
* De functies die ik op de site wil gebruiken zou ik in een functions.php file zetten. Dien ik op elke pagina dan require(functions.php) aan te roepen om gebruik te maken van die functies? In recente wordpress site zie ik nergens require calls terugkomen. Kan iemand mij hier wat meer uitleg over geven?
* De inhoud die ik uit de MySQL database wil halen zou ik er op een veilig manier willen uithalen? Ik heb al gezien dat de bestaande mysql functies nog eens in een wrapper functie worden gestoken? Bijv de mysql_query($query) functie zou je dan in een zelfgeschreven functie DoQuery($query) stoppen die de databaseconnectie maakt, de query uitvoert en het resultaat teruggeeft. Is dit om veiligheidsredenen? Gaat dit SQL injectie dan tegen of nog niet?
* En tot slot: vroeger zette ik steeds mijn database configuratie (login, pw, host) in een variabele in een config.php file in de "private" folder van mijn ftp, die dan globaal beschikbaar is. Is dat nog steeds de beste en veiligste oplossing?
Belangrijk voor mij zijn veiligheidsrisico's en het toepassen van de meest recente technieken en principes op vlak van OOP en MVC.
Thanks!
een leuk artikeltje hiervoor is: http://www.phphulp.nl/php/tutorial/overig/pdo-verbinden-met-verschillende-databases/534/
om je verschillende dingen samen te voegen tot een geheel (header, footer etc kan je routing voor gebruiken)
leuk artikeltje hiervoor: http://www.phphulp.nl/php/forum/topic/paginas-includen/85274/
elke class zet je in een eigen bestandje bijv. mail.php, routing.php, etc etc
vervolgens kan je met een leuk autoloadertje de bestanden die je nodig hebt automatisch laden.
leuk artikeltje hiervoor: http://www.phphulp.nl/php/forum/topic/oop-gedachtengang/85017/
ik denk dat je hier wel even genoeg leesvoer mee hebt :)
ik had snel antwoord nodig en ben lid van beide forums, hier onder mijn volledige naam (oude account) en op het andere forum onder mijn nickname.
alvast bedankt! alle meningen en hulp is welkom, want moet op korte tijd veel leren en toepassen :)
Quote:
alle meningen en hulp is welkom, want moet op korte tijd veel leren en toepassen :)
Gaat jou, en niemand anders, lukken. OO leer je niet in 1 2 3 dagen misschien in 5 maanden...
Op pfz spreken ze voor het laden van de header en footer van een autoloader: Een autoloader kan alle classes waar jij je methods uit oproept automatsch laden. Dus dat kan ik ook eens uitzoeken.
Quote:
Hey Wouter, ik ben weldegelijk vertrouwd met Objectgeorienteerd programmeren, maar mijn php kennis is verouderd.
Ah, oké dan heb ik het verkeerd begrepen, mijn excusses.
Quote:
Een autoloader kan alle classes waar jij je methods uit oproept automatsch laden. Dus dat kan ik ook eens uitzoeken.
Klopt, heb ik op dit forum heel vaak moeten uitleggen:
- dit topic (en ook dit bericht)
- http://www.phphulp.nl/php/forum/topic/classes-in-1-script/84512/#602058
- http://www.phphulp.nl/php/forum/topic/require-gedrag/83614/#595153
Alvast bedankt voor de uitleg! Ik heb nu volgende files in de root:
root --+
+ index.php
+ header.php
+ footer.php
Vervolgens heb ik een lib folder aangemaakt:
lib --+
+ autoloader.php
+ bootstrap.php
+ routing.php
De bootstrap.php definieert de 'ROOT' variabele en registreert de autoloader.
Code (php)
In de routing.php file heb ik jouw routing code gezet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// haal alle pagina's op uit %root%/ die eindigen met .php
$pages = glob(ROOT.DIRECTORY_SEPARATOR.'*.php');
// pak alleen de naam van het bestand
$pageNames = array_map('basename', $pages);
if (!isset($_GET['p'])) {
$_GET['p'] = 'home';
}
if (in_array($_GET['p'].'.php', $pageNames)) {
// include het bestand
require ROOT.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
} else {
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
// haal alle pagina's op uit %root%/ die eindigen met .php
$pages = glob(ROOT.DIRECTORY_SEPARATOR.'*.php');
// pak alleen de naam van het bestand
$pageNames = array_map('basename', $pages);
if (!isset($_GET['p'])) {
$_GET['p'] = 'home';
}
if (in_array($_GET['p'].'.php', $pageNames)) {
// include het bestand
require ROOT.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
} else {
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
De routing code gaat enkel gebruikt worden als er een php file in de URL voorkomt ($_GET) of ben ik hier mis?
Wat moet er dan precies in de autoloader file komen en hoe kan ik nu de header file aanroepen in mijn index.php pagina? Ik hoop dat het snel wat duidelijker wordt :)
http://www.phphulp.nl/php/forum/topic/router/83492/#594215
De autoloader laad de klassen, alleen je hebt nu nog helemaal geen klassen, dus er valt niks te laden.
En ik zou het zo aanpakken dat je een aparte header en footer file hebt en die samen met de content voegt. Ik zou het aanpakken dat je 1 index file hebt en daar de content inplaatst. In die index file staat dan al die header en footer.
De routing moet je nu natuurlijk ook wel via OO gaan laten lopen. Zoals pim hier (en verder in dat topic) heel mooi laat zien: De autoloader laad de klassen, alleen je hebt nu nog helemaal geen klassen, dus er valt niks te laden.
En ik zou het zo aanpakken dat je een aparte header en footer file hebt en die samen met de content voegt. Ik zou het aanpakken dat je 1 index file hebt en daar de content inplaatst. In die index file staat dan al die header en footer.
Ik denk dat het allemaal wat ingewikkelder aan het worden is dan wat ik in gedachten had. Mijn header.php file bevat uiteraard alles wat in de header moet komen, hetzelfde voor de footer. Vroeger zou ik in mijn index.php file bovenaan include(header.php); gedaan hebben en onderaan voor de footer, wat ik nu dus niet langer wil doen om begrijpelijke redenen. Hoe kan ik dit specifiek probleem op de "mooiste" manier oplossen? Los van users, persons, ...
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<!doctype html>
<html>
<head>
<!-- alle head troep -->
</head>
<body>
<!-- header, nav, enz. -->
<?php require 'depagina.php' ?>
</body>
</html>
<html>
<head>
<!-- alle head troep -->
</head>
<body>
<!-- header, nav, enz. -->
<?php require 'depagina.php' ?>
</body>
</html>
Met als enige verschil wat je nu wilt bereiken is het ophalen van de pagina en die require vervangen door een geweldig OO routing systeem.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// haal alle pagina's op uit %root%/
// die eindigen met .php
$pages = glob(ROOT.DIRECTORY_SEPARATOR.'*.php');
// pak alleen de naam van het bestand
$pageNames = array_map('basename', $pages);
if (!isset($_GET['p'])) {
$_GET['p'] = 'home';
}
if (in_array($_GET['p'].'.php', $pageNames)) {
// include het bestand
require ROOT.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
} else {
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
// haal alle pagina's op uit %root%/
// die eindigen met .php
$pages = glob(ROOT.DIRECTORY_SEPARATOR.'*.php');
// pak alleen de naam van het bestand
$pageNames = array_map('basename', $pages);
if (!isset($_GET['p'])) {
$_GET['p'] = 'home';
}
if (in_array($_GET['p'].'.php', $pageNames)) {
// include het bestand
require ROOT.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
} else {
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
Hoe kan ik deze nu gebruiken en die require kwijtraken?
OO is het voorbeeldje die ik je net gaf (die link) van Pim. Dit wat je nu hebt is gewoon flat PHP.
En lees eens die comments die erbij staan, kijk eens wat de functies doen die erin staan en volg de logica van het script eens.
Het is allemaal wat ingewikkeld voor mij, waarvoor mijn excuses :) Dus als ik het goed begrijp moet ik gewoon require gebruiken om pagina's in mijn index.php file te voegen als ik flat php wil gebruiken. Als ik Object georienteerd wil werken moet ik gaan routen? Ben ik in het tweede geval dan ook verplicht om een platform als Zend of Symphony te gebruiken?
http://www.phphulp.nl/php/forum/topic/router/83492/#594215
En tevens kan je ook een micro-framework zoals Silex gebruiken.
En routen ben je altijd aan het doen. Routing is het omzetten van een url naar een pagina.
Nee, want je kan ook het scriptje gebruiken die ik net gaf in de link... (het scriptje van Pim waar ik al 3x over heb verteld): En tevens kan je ook een micro-framework zoals Silex gebruiken.
En routen ben je altijd aan het doen. Routing is het omzetten van een url naar een pagina.
Gewijzigd op 21/06/2012 17:32:03 door Wouter J
denk je dat ik ergens een eenvoudige objectgeorienteerde php / mysql cms zou kunnen downloaden? ik denk dat als ik de correcte manier van werken op m'n eigen tempo kan bekijken en uitpluizen dat ik de gedachtengang rapper onder de knie zal krijgen.
opencart is een webshop, maar wel OO geprogrammeerd.
magento ook een webshop, met Zend Framework gemaakt
Joomla bagger pakket, maar OOP + MVC
magento ook een webshop, met Zend Framework gemaakt
Joomla bagger pakket, maar OOP + MVC