Avatar billede kz Nybegynder
10. januar 2005 - 05:15 Der er 16 kommentarer

forklaring for en dummie

hey folkens.

Jeg har læst om php en masse steder, og læst en del indlæg herinde.
Dog kan jeg stadig ikke helt forstå det med incluce() o.s.v med dynamisk hp og sådan.

Jeg får hele tiden at vide, at jeg kun skal bruge min index.php hvis jeg bruger include. Men hvordan kan jeg holde besøge på min index.php og så include andre sidder, med mine links.

Hvis folk trykker på mit link bliver jeg da nødt til at linke dem videre til en ny fil hvor der er en ny include er jeg ikke?

Bare kald mig en dummie :/
Avatar billede bromer Nybegynder
10. januar 2005 - 05:20 #1
Det er sådan set simpelt nok. Hvis du i dine link sender information om hvilken fil du gerne vil include, så kan du nøjes med at linke til index.php filen. Hvis du har en menu der ligner denne:

<a href='index.php?page=page1.php'>page1</a>
<a href='index.php?page=page2.php'>page2</a> osv

så kan din index.php side se sådan ud:

<?php
if ($_GET['page'] == 'page1.php') {
require_once "page1.php";
} elseif($_GET['page'] == 'page2.php') {
require_once "page2.php";
}
?>

Her har jeg brugt require_once istedet for include. Det gør at siden kun kan blive inkluderet een gang, se eventuelt mere i manualen.
Avatar billede kz Nybegynder
10. januar 2005 - 05:34 #2
<?php
if ($_GET['page'] == 'page1.php') {
require_once "page1.php";
} elseif($_GET['page'] == 'page2.php') {
require_once "page2.php";
}
?>


Skal dette så bare stå der hvor der hvor indholdet skal være?
Avatar billede bromer Nybegynder
10. januar 2005 - 05:37 #3
Ja. Så vil indholdet blive hvad der findes i page1.php eller page2.php altså efter hvilket link man har trykket på. Du vil sikkert gerne tilføje en standard side..

<?php
if ($_GET['page'] == 'page1.php') {
require_once "page1.php";
} elseif($_GET['page'] == 'page2.php') {
require_once "page2.php";
} else {
require_once "default.php";
}
?>
Avatar billede kz Nybegynder
10. januar 2005 - 05:42 #4
Kan jeg på nogenlunde samme måde lave så mit URL bliver noget i stil med f.eks.

http://www.domæne.dk/index.php?side=profil

Hvis jeg jo ville ind under profil :)
Avatar billede bromer Nybegynder
10. januar 2005 - 05:53 #5
Jada.. så vil du bare skulle bruge $_GET['side']
Avatar billede kz Nybegynder
10. januar 2005 - 05:59 #6
Jeg mente hvordan jeg får den til at vise:

index.php?side=profil

og ikke:

index.php?side=profil.php :)
Avatar billede nyhuus Nybegynder
10. januar 2005 - 06:11 #7
<?php
if ($_GET['side'] == 'page1.php') {
require_once "page1.php";
} elseif($_GET['side'] == 'page2.php') {
require_once "page2.php";
} else {
require_once "default.php";
}
?>

jeg vil lige forklarge hvordan det hænger sammen

} elseif($_GET['side'] == 'page.php') { // nu vil linket være index.php?side=page
} elseif($_GET['side'] == 'page2.php') { // nu vil linket være index.php?side=page2
} elseif($_GET['page'] == 'page.php') { // nu vil linket være index.php?page=page
} elseif($_GET['page'] == 'page2.php') { // nu vil linket være index.php?page=page2
Avatar billede kz Nybegynder
10. januar 2005 - 06:19 #8
Sådan lige for at høre om jeg har forstået det nu.

jeg har f.eks.

Links: links, profil, kontakt.

Dem linker jeg med:

href="index.php?side=links"
href="index.php?side=profil"
href="index.php?side=kontakt"

php-kode:

<?php
if ($_GET['side'] == 'links.php') {
require_once "links.php";
} elseif($_GET['side'] == 'profil.php') {
require_once "profil.php";
} eæseof($_GET['side'] == 'kontakt.php') {
require_once "kontakt.php";
} else {
require_once "default.php";
}
?>

så vil det blive vist i html-cellen hvor php-koden står og url vil blive vist som index.php?side=links, index.php?side=profil og index.php?side=kontakt

Vil du sige jeg har forstået det, hvis jeg går ud fra det hænger sådan sammen? :)
Avatar billede sjatten Nybegynder
10. januar 2005 - 06:22 #9
Prøv:
<?php
$side = $_GET['side'];
if (!$side == "dette er lige meget.")
{
print "Forsiden";
}
if ($side == "kontakt")
{
print "Din kontakt side.";
}
?>
<a href='?='>Forside</a>
<br />
<a href='?=kontakt'>Kontakt</a>
Avatar billede kz Nybegynder
10. januar 2005 - 06:26 #10
Nú er jeg lidt forvirret, hvad skete der med require_once()? :/
Avatar billede alvion Nybegynder
10. januar 2005 - 06:54 #11
Tillad mig at gøre eksemplet lidt mere elegant (og nemmere at udvide). Hvis vi går ud fra dit behov med siderne: links, profil, kontakt, og at disse linkes med:

href="index.php?side=links"
href="index.php?side=profil"
href="index.php?side=kontakt"

Så vil jeg foreslå følgende script:

<?php
$tilladte_sider = array(
    "links",
    "profil",
    "kontakt",
);

if (in_array($_GET["side"], $tilladte_sider)) {
    $inc_file = $_GET["side"] . ".php";
    require_once($inc_file);
}
else {
    echo "Beklager, siden er ikke tilgængelig.";
}
?>

På denne måde kan du nemt tilføje flere sider. Sidernes navne skal blot placeres i array'et $tilladte_sider.

Metoden med kun at have én indgangsside (som i dette eksempel "index.php") kaldes "action-dispatcher". Dvs. ét script modtager alle kommandoer fra brugeren og uddelegerer arbejdet til det relevante script.

Bla. mange fordele kan nævnes sikkerhed. Hvis nu alle dine sider kræver de samme sikkerhedschecks inden de bliver kørt (f.eks. login eller kontrol af formular-input), kan dette gøres én gang for alle i dispatcheren (index.php). Dette gøres så foran den kode jeg har vist. På den måde kommer alle sikkerhedschecks til at gælde for alle filerne, og du kommer ikke ved et uheld til at glemme et check på en enkelt side.
Avatar billede hmortensen Nybegynder
10. januar 2005 - 12:03 #12
Og en anden måde:

<?php

if (isset($_GET['side']))
{
  if (file_exists($_GET['side']).".php")
  {
    include($_GET['side'].".php");
  } else {
    echo "Siden findes ikke!";
  }
} else {
  include("den_side_der_skal_vises_på_forsiden.php");
}

?>
Avatar billede alvion Nybegynder
11. januar 2005 - 00:08 #13
hnmortensen -> Og hvis jeg så skriver:

index.php?side=index

? :-)
Avatar billede hmortensen Nybegynder
11. januar 2005 - 01:28 #14
if (isset($_GET['side']) && $_GET['site'] != "index")

happy ? :)
Avatar billede alvion Nybegynder
11. januar 2005 - 10:19 #15
Ok spøg til side... :-)

Mit spørgsmål var lige så meget for at illustrere at du og jeg har præsenteret to forskellige "sikkerheds-metoder". Du har valgt at tillade alle include-filer, undtagen dem du spærrer for i koden (en "negativ-liste". Jeg har valgt kun at inkludere de filer, som er defineret i en "positiv-liste".
Avatar billede kz Nybegynder
14. januar 2005 - 00:37 #16
Hvad hvis jeg har nogle menu-punkter, med nogle andre punkter inde under dem?

f.eks. når jeg går ind under punktet "webmaster" så jeg har nogle links inde under det som hedder "Kontakt, profil" hvordan gør jeg så så det kommer til at bliver f.eks. index.php?side=webmaster=profil eller noget i den stil?

Vil det ikke straks blive mere advanceret?

<?php
$tilladte_sider = array(
    "nisser",
    "webmaster",
    "smølfer",
);

if (in_array($_GET["side"], $tilladte_sider)) {
    $inc_file = $_GET["side"] . ".php";
    require_once($inc_file);
}
else {
    echo "Beklager, siden er ikke tilgængelig.";
}
?>

kunne jeg udvide alvion's eksempel? kunne forestille mig noget med et nyt array og if (in_array($_GET['side=webmaster']), $webmaster_array)) eller hvad?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester