Dynamisk side

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009

heisann, lurte på om dette var en fornufig måte å bygge opp en seksjon på:

Som du vet, så har jeg flere seksjoner på medlemsområdet (Nyheter, Info, Tips etc.).

 

Akkurat nå har jeg en mappe pr. seksjon. Så URL'en blir slik da:

www.domene.no/medlem/nyheter/nye-produkter.php

www.domene.no/medlem/informasjon/nye-tjenester.php

osv.

 

Hva om jeg setter opp kun en index-side pr. kategori, og så ha en mappe med innholds-dokumenter som jeg inkluderer.

Slik at URL'en blir noe slik:

www.domene.no/medlem.php?nyheter=nye-produkter

www.domene.no/medlem.php?informasjon=nye-tjenester

Da også kunne få til noe slik: www.domene.no/medlem.php?id=1234567 (for medlemmens profil)

 

Til å innkludere en .html-side brukte jeg denne koden:

 

<a href="dynamic_site.php?content=contact">Kontakt</a> 

<?php

  $content = $_GET['content'];

  if($content)

  {

  include("inc/" . $content . ".php");

  }

?> 

Det er kansje noe slik man gjør det i forbindelse med å hente ut noe fra databasen? bare med IDnr?

Trur kansje jeg heller i riktig retning. Føler jeg da, men derfor jeg spør så jeg ikke studerer og studere og så viser deg seg at det er helt feil....

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Variabler og inkludering av innhold basert på GET forespørsler

Jo, du er på riktig vei, og ja, du kan gjøre det på den måten, men jeg liker den ikke.

Jeg synes du skal holde deg til én variabel der det er logisk.

Si du har to filer, "side.php" for nyheter produkter osv, og "medlem.php" for medlemsprofiler. På side.php bruker du kun én variabel, og den kan f.eks. hete pid, for page id. Videre velger du om du vil gi de forskjellige kategoriene dine tall eller navn, f.eks.

  • domene.com/side.php?pid=1 [for nyheter]
  • domene.com/side.php?pid=2 [for produkter]

eller

  • domene.com/side.php?pid=nyheter
  • domene.com/side.php?pid=produkter

Deretter bruker du scriptet "side.php" til å avgjøre hvilken fil som skal inkluderes basert på denne variabelen. Husk også å sikre deg mot eventuelle angrep. Ikke bruk variabelen direkte for å inkludere filer, type;

Hvis domene.com/side.php?pid=produkter : include($_GET['pid'] . '.php');

Og hva om brukeren selv går opp å skriver egen pid? Til et dokument som ikke eksisterer for eksempel.

For medlemssidene kan du f.eks. bruke "mid" som variabel, slik at URLene blir domene.com/medlem.php?mid=123

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
hvis brukeren selv forsøker å

hvis brukeren selv forsøker å angi en id eller ett navn etc. som ikke eksisterer, så vil brukeren endten få en feilmelding eller sendt vekk til en feilmeldingsside ved bruk av else-statement...

Slik: (og kom over file_exists(); funksjonen)

<?php

  $content = $_GET['pid'];

    if ($content) {

    $path = 'inc/' . $content . '.php';

      if (file_exists($path)) { include ($path); }

      else { print 'Siden du angav eksisterer ikke'; }

    }

?> 

Benytter jeg denne linken: <a href="side.php?pid=nyheter">Nyheter</a> så komme brukeren til index-siden for nyheter og så blir URL'en slik: www.domene.com/side.php?pid=nyheter.php

 

Du mener nå, at det dokumentet som blir inkludert, skal hente frem ett gitt innhold?

Eksempel at det er nyheter.php som skal hente frem et gitt innhold.

Da må hovedlinken også sende en innholds-ID da, som nyheter.php leser for å hente riktig innhold. sant?

kansje ved bruk av en && opperator. Noe slik:

<a href="side.php?pid=nyheter&&aid=1234">Nye produkter</a> (aid = artikkel id)

 

jeg føler meg litt på jordet her...

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Gjenbrukskode, generalisering og direkte inkludering fra GET

Som jeg sa; ikke bruk variabelen direkte for å velge hvilke filer som skal inkluderes, men spesifiser hva en gitt variabel skal inkludere. Ved å la brukeren definere hvilket dokument som skal inkluderes så åpner du et potensielt sikkerhetshull.

Hvis du skal sende to variabler så gjøres det ved hjelp av én &, slik;

domene.com/side.php?pid=nyheter&nyhetsid=123

for flere enn to

domene.com/side.php?pid=nyheter&nyhetsid=123&highlight=foo

Jeg mener du bør gjøre ting på den måten du selv synes virker best. Generalisering er stikkordet. Jo mer du kan generalisere, desto mer fleksibelt blir scriptet ditt.

F.eks ville jeg brukt én og samme fil for alt slags innhold, være seg nyheter, guider, produkter eller annet.

Samme med kategorier, jeg hadde brukt ett script og generalisert så mye som mulig.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
er det ikke det jeg gjør da?

er det ikke det jeg gjør da?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
GET variabelen

Nei, du bruker variabelen direkte.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
Ah - Ser det først nå.her er

Ah - Ser det først nå.

her er din:

domene.com/side.php?pid=nyheter

her er den første jeg angav:

domene.no/medlem.php?nyheter=nye-produkter

 

Ser at jeg angav forskjellige variabler basert på hvilken seksjon en bruker var inne på.Men det er jo noe som kan "rettes" med mod rewrite i .htaccess - Sant?

slik at en url som denne:

  • www.domene.no/medlem.php?pid=1

kan bli noe som dette:

  • www.domene.no/medlem/nyheter/nye-produkter.php

 

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Ikke bruke GET variabel direkte

Ja, for eksempel, men du bruker variabelen fra GET direkte for å velge hvilken fil som skal inkluderes. Det ville ikke jeg gjort.

Eksempel på hvordan man ikke bør gjøre det:

<?php
$file
= $_GET['file'];
include(
'/path/to/' . $file . '.php');
?>

Her bruker man variabelen fra GET direkte!

Eksempel på hvordan man kan sikre det bedre;

<?php
switch ($_GET['file') {
  case
'nyheter':
 
$file = 'nyheter';
  break;

  case
'produkter':
 
$file = 'produkter';
  break;

  default:
 
$file = 'ikke-gyldig';
  break;
}

if(isset(
$file)) {
  require(
'path/to/' . $file . '.php');
}
?>

Ser du hvordan variabelen $file her er definert for forskjellige typer query strings? På den måten kan ikke brukeren forsøke å manipulere spørrestrengen for å kjøre skript han tror eller vet ligger på serveren.

?>
ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
Ser den. Men hva legger du i;

Ser den. Men hva legger du i; "... manipulere spørrestrengen for å kjøre skript ..."?

 

Kom over ett problem med da. Når jeg kjørte

<?php

  if(isset($file)) { require '...'; }

?>

Når man går til dokumentet scriptet ligger på, så switch'es det gjennom tilfellene.Ingen tilfeller er satt da, så default: blir satt. Sant.

Så jeg testet litt fem og tilbake og kom frem til dette kunne forhindres slik:

<?php

  if (!isset($_GET['kat'])) { require ('inc/welcome.php'); }

  else  { require ('inc/' . $file . '.php'); }

?>

Ble det en fornuftig måte å gjøre det på?

med hilsen
Thomas Kile

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
følte at dette ble tungvindt

Joda, jobber videre med å gjøre siden mer dynamisk. Men føler at denne måten er både bra og dårlig da.

Tenker på sånn som title, description, keyword. Disse er jo de samme på enhver side akkurat nå.

Og sånn som menyer, det blir jo noe mer arbeid å få uthevet de etc. Uten bruk at JS.

Har 7 sider da, som hver har sub-menyer.

benytter metoden ovenfor med switch($_GET[page]), og det blir jo endel om jeg skal ha en lange liste pr. description, title, keywords, submenu's etc...

Noe input om hvordan jeg heller burde gjøre det?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Effektivisering, generalisering og erfaring

Ja, du har begynt å bygge et komplekst system nå, og det er grunnen til at man forsøker å skille HTML, CSS og PHP fra hverandre i høyest mulig grad.

Ofte bruker man gjerne et templatesystem, slik at layouten bygges opp lag-for-lag, for så å bli lagt inn på siden. Dette er en evolusjon programmerere flest går gjennom. Man begynner å lage ting på en "tungvindt" måte, og så ser man forbedringspotensiale i ting hele tiden. Dette er noe jeg ikke kan hjelpe deg med, da det krever erfaring og innstikt for hvordan du skal gjøre ting hele tiden. Ved programmering så tar man jo ofte avgjørelser om hvordan man skal løse et problem.

Når det gjelder title, description osv, så ville jeg hatt individuelle title, description og h1 lagret i hvert sitt felt i databasen. Deretter hadde jeg dratt dem ut sammen med innholdet og bygget opp websiden.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
merker den evolusjonen godt

merker den evolusjonen godt her... blir aldri ferdig.

Men det er litt sånn rundt menyer jeg sliter. og legge opp linker etc.

 

Men kan menyer ligge i en egen tabell i databasen? med en tildelt ID slik at den aktuelle menyen kan benyttes når en gitt side skal lastes frem?

Eller at en link til en .html meny kan brukes... veldig usikker på det ommråde...

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Lagre menyelementer i en database

Menypunktene kan du lagre i databasen, ja. Hvordan du gjør dette avhenger jo selvsagt av deg.

Du får dele opp hva en link består av da, vet du. En title, en URL og ankertekst, deretter får du lagre disse tingene i databasen og så hente dem ut og bygge opp menyen, hvis det er det du vil.

Det er jo ikke noe i veien for å lagre disse i et statisk dokument heller, alt faller på deg :)

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
sant sant, fisker bar litt

sant sant, fisker bar litt tips om hva som kan være mest fleksibelt... For, vil jo at det sal være så utvid-/gjenbrukbart som mulig...

Og, ikke funnet noe guider noen vei som gir litt innsikt i hvordan slikt kan bygges opp...

med hilsen
Thomas Kile

Svar på forumemnet

(If you're a human, don't change the following field)
Your first name.
Innholdet i dette feltet blir holdt privat og vil ikke bli vist offentlig.