Gå til innhold

Dine PHP koder


Anbefalte innlegg

Videoannonse
Annonse
Skrevet

Det er et lokalt verktøy, så fant det ikke nødvendig å strippe vekk potensiell skadelig kode. Skulle den vært tilgjengelig fro alt og alle burde det selvføligelig vært gjort

  • 2 uker senere...
Skrevet

Har laget en tråd med info og diskutering angående hvordan man burde eller kan sette opp en side basert på inkludering og klassebruk (objektorientert). Hvis du føler for å diskutere koden eller hva som er best osv., vennligst ta det i tråden. Hadde vært flott med andres synspunkter/tilbakemeldinger på oppsettet, særlig siste posten med index-fil.

 

Her er en kode for oppsett av side med klassebruk og inkludering (www.example.com?p=foo). Med få modifikasjoner burde du klare å ta denne i bruk uten store problemer. Igjen, ved spørsmål bruk tråden min.

 

index.php

<?php
   require("classes/index.php");

   $index = new Index();

   // inkluderer klasser, case sensitive
   $classes = array('DB_Connect', 'IPLog', 'Cart', 'Project'); 

   // skriver inn hvilke ?f= som er godtatt (dvs. som ikke gir 404)
   $fAllow = array();

   // skriver inn hvilke ?p= som er godtatt
   $pAllow = array('foo', 'bar'); 

   $session = false; // lagt opp til bruk av sessions for seinere bruk, se klasse

   // ender til slutt opp i <title><?= $this->title; ?></title>
   $title = "A cat is fine too"; 
   $titleArray = array('foo' => "Foo the foo",
                       'bar' => "Bar the bar"); // brukes for å endre tittel

   // sender med all nødvendig info til klassen index, etter det her er siden ferdig    
   $index->init($classes, $fAllow, $pAllow, $session, $title, $titleArray);
?>

 

classes/index.php

<?php 
   class Index
   {
       // lister opp interne variabler, brukes på tvers av funksjoner,
       // og må derfor bruke $this->foo
       public $title;
       private $titleArray;
       private $db_connect, $iplog;

       public function init($classes, $fAllow, $pAllow, $session, 
                                         $title, $titleArray)
       {
           error_reporting(E_ALL ^ E_NOTICE); // error-konfigurering
           header("Content-Type: text/html; charset=UTF-8"); // force UTF8 

           $this->classes($classes); // inkluderer og oppretter klassene

           // legger tittel og titleArray i $this-> pga. brukes i flere funksjoner
           $this->title = $title;
           $this->titleArray = $titleArray;

           $pAllow[] = '404'; // legger til 404 som standard

           if($session) // hvis man vil bruke sessions
           {
               session_start();
           }

           // eksempel på hvor man kan plassere ip-logging
           $this->iplog->logIP();

           $this->page($fAllow, $pAllow); // går videre til å faktisk opprette siden
       }

       private function classes($classes)
       {
           foreach($classes as $class)
           {
               // merk strtolower pga. den er sendt inn med casesensitive
               // !!! mangler en sjekk på om fil eksisterer, har ikke laget enda !!!
               require("classes/" . strtolower($class) . ".php");
           }

           foreach($classes as $class)
           {
               // ikke optimal løsning enda, krever manuell innskriving 
               // av klasser i toppen av filen, tanken er at det skal være 
               // mer eller mindre kun avhengig av parameter (fremtidsrettet!)
               $tempClass = strtolower($class);

               // $this->$tempClass vil gi f. eks $this->iplog
               $this->$tempClass = new $class();
           }
       }

       private function page($fAllow, $pAllow)
       {
           // henter ?f= og ?p=
           $f = $_GET['f'];
           $p = $_GET['p'];

           // home.php er forsideteksten, 
           // kan derfor like godt redirectes til DocumentRoot
           if($p == 'home')
           {
               header("Location: /");
           }
           else if(!empty($f)) // test for fil i mappe
           {
               if(in_array($f, $fAllow)) // mappe godtatt? hvis ikke 404
               {
                   if(!empty($p))
                   {
                       if(in_array($p, $pAllow)) // side er godtatt, hvis ikke 404
                       {
                           if(file_exists($f."/".$p.".php")) // finnes filen?
                           {
                               // manipulerer tittel etter hva som er hentet
                               $this->title($p, $f);

                               // henter fil $p i mappe $f
                               $require = $f."/".$p;
                           }
                           else
                           {
                               $require = '404';
                           }
                       }
                       else
                       {
                           $require = '404';
                       }
                   }
                   else
                   {
                       $require = "home";
                   }
               }
               else
               {
                   $require = '404';
               }
           }
           else if(!empty($p)) // test for kun fil
           {
               if(in_array($p, $pAllow))
               {
                   if(file_exists($p . ".php"))
                   {
                       $this->title($p);
                       $require = $p;
                   }
               }
               else
               {
                   $require = '404';
               }
           }
           else // ingenting satt, skriver forside
           {
               $require = "home";
           }

           // <html>, <head>, start på <body>, nav/header
           require("includes/head.php"); 

           // sidecontent
           require($require . ".php"); 

           // footer, slutt på <body> og <html>
           require("includes/footer.php"); 
       }

       private function title($page)
       {
           // isset() er faktisk raskere enn array_key_exists()
           // gir FALSE hvis array['foo'] == NULL
           // ikke et problem for oss, da vi selv har laget arrayen
           if(isset($this->titleArray[$page]))
           {
               $this->appendTitle($this->titleArray[$page]);
           }
       }

       private function appendTitle($prestring)
       {
           if(!empty($prestring))
           {
               // legger til noe á 'Foo the foo' foran hovedtittel
               $this->title = $prestring . " - " . $this->title;
           }
       }
   }
?>

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...