Hej
Jeg er nu kommet en hel del videre med mit lille projekt om at lave et fleksibelt og brugervenligt CMS-system.
Jeg har lavet et system der sørger for at alt indhold gemmes i et array og ikke laver output før det hele er klar og alle tjek er gennemført, således at jeg kan lave 404 eller 403 fejl hvis det er nødvendigt.
Dog har jeg et lille problem der involverer en masse kode.
Min overordnede funktion der klargører det hele hedder
initialize()- function initialize(&$init) {
- $get_url = $init['get_url'];
- if($get_url[0] == 'login') {
- if(isset($_SESSION['logged_in'])) {
- if(is_admin($_SESSION['user_id']) === true) {
- header('Location: /new_cms/admin');
- }
- else {
- header('Location: /new_cms/');
- }
- }
- }
- else if($get_url[0] == 'admin') {
- if(!isset($_SESSION['user_id'])) {
- header('HTTP/1.1 403 Forbidden');
- include '403.php';
- die();
- }
- else {
- if(is_admin($_SESSION['user_id']) === false) {
- header('HTTP/1.1 403 Forbidden');
- include '403.php';
- die();
- }
- }
- }
- else {
- if(isset($get_url)) {
- if(isset($get_url[1])) {
- if(is_numeric($get_url[1])) {
- if(page_exists($get_url[1]) === true) {
- //Add items from DB to array
- $init['page'] = getPage($get_url);
- }
- else {
- header('HTTP/1.1 404 Not Found');
- include '404.php';
- die();
- }
- }
- else {
- $url = getFieldFromDB('pages', 'page_url', 'page_alias', $get_url[0]);
- $url = explode('/', $url);
-
- if(page_exists($url[1]) === true) {
- //Add items from DB to array
- $init['page'] = getPage($url);
- }
- else {
- header('HTTP/1.1 404 Not Found');
- include '404.php';
- die();
- }
- }
-
- }
- else {
- header('HTTP/1.1 404 Not Found');
- include '404.php';
- die();
- }
- }
- else {
- header('HTTP/1.1 404 Not Found');
- include '404.php';
- die();
- }
- }
- }
Denne funktion skal, når den er færdig, gøre alt klar og placere i et array. Dette virker også fint, men jeg har bygget en funktion ind i systemet hvor det er muligt at lave et alias til siderne således at
Om os ikke skal hedde example.com/
page/12, men i stedet kan hedde example.com/
om-os. Dog har jeg et lille problem med at få tingene til at fungere. Denne del af funktionen starter ved linje 27
Min
initialize() funktion anvender nogle andre funktioner. Nogle af dem er direkte fra PHP, mens andre er nogen jeg har skrevet selv.
Funktionen
getFieldFromDB() giver mig mulighed for at hente indhold fra databasen og returnere det i en variabel.
- function getFieldFromDB($table, $field, $get_field, $input) {
- global $db;
- $query = $db->prepare("SELECT `$field` FROM `$table` WHERE `$get_field`=:field");
- $input = check_plain($input);
- $query->bindValue(':field', $input, PDO::PARAM_STR);
- try {
- $query->execute(); //Executes query
-
- $output = $query->fetchColumn();
- }
- catch (PDOException $e) {
- addMessage('error', $e->getMessage());
- die($e->getMessage());
- }
- return $output;
- }
Den sidste funktion
page_exists() gør nøjagtig det som navnet siger. Den tjekker om den side jeg har forespurgt findes og returnerer sandt eller falsk.
- function page_exists($get_url) {
- if(is_array($get_url)) {
- addMessage('error', 'Expected String but got Array');
- }
- else {
- $url = $get_url;
- }
- $page = getFieldFromDB('pages', 'page_id', 'page_id', $url);
- return (empty($page)) ? false : true;
-
- }
Sammen med indholdet af min
init.php skulle det jo virke, men jeg får 404-fejl fra min funktion når jeg skriver
example.com/om-os, mens
example.com/page/12 fungerer fejlfrit.
- /*
- * File that includes all files needed for initial functions
- */
- error_reporting(E_ALL);
- session_start();
-
- require 'config/config.php';
- //Require DB connection
- require 'functions/db.func.php';
- //Require file containing core functions
- require 'functions/generic.func.php';
- if($config['dev_mode'] == 1) {
- include 'modules/krumo/class.krumo.php';
- }
- else {
- addMessage('warning', 'Dev-mode disabled');
- }
- //$page_id = (isset($_GET['q'])) ? $_GET['q'] : 1;
- $init = array();
- $get_url;
- $page = array();
- if(isset($_GET['q'])) {
- $get_url = explode('/', $_GET['q']);
- }
- else {
- $get_url[0] = 'page';
- $get_url[1] = 1;
- }
- $init['get_url'] = $get_url;
- $_SERVER['DOCUMENT_ROOT'] = "/new_cms";
- $site_data = getSiteConfig();
- $user_data = array();
- if(logged_in() === true) {
- $session_user_id = $_SESSION['user_id'];
- $user_data = getUserData($session_user_id);
- if(user_active($user_data['username']) === false) {
- not_active_logout();
- }
- }
- initialize($init);
-
- if(isset($init['page'])) {
- $page = $init['page'];
- }
- else {
- $page['meta_keywords'] = '';
- $page['meta_description'] = '';
- $page['meta_robots'] = 'noindex, nofollow';
- }
-
-
- if(isset($_POST['log_in'])) {
- log_in($_POST);
- if(isset($_SESSION['logged_in'])) {
- if(is_admin($_SESSION['user_id']) === true) {
- header('Location: /new_cms/admin');
- }
- else {
- header('Location: /new_cms/');
- }
- }
- }
Jeg ved at min SQL-query finder og returnerer data korrekt da jeg kan gøre følgende på en fil der inkluderes senere i forløbet:
- $url = getFieldFromDB('pages', 'page_url', 'page_alias', $get_url[0]);
- $url = explode('/', $url);
- print_r($url);
Her vil den printe Array( [0] => page [1] => 12) på siden, som også er det den skal, da page/12 er system-URL til
Om os.
Er der nogen der kan se hvad der går galt? Jeg får ingen fejl i min php_error.log og heller ikke på selve siden.
Indlæg senest redigeret d. 10.10.2013 20:30 af Bruger #17072