Bilde
  Førstesiden | C++ | JavaScript | SQL | ASP | PHP | PHP & MySQL | PHP & PostgreSQL | Bruktbutikk | Linker | Nytt fra php.net | Forum | Quiz
Kodearkiv
+ C++ (50)
+ Intro til PHP (113)
+ PHP og databaser
+ ASP (49)
+ SQL (26)
+ JavaScript (55)
Diverse
» Howto`s (22)
» htaccess
» Innsendte triks
Feedback
» Ris og ros
» Rapporter bugs
» Ny artikkel
» Kontakt meg
Verktøy
» Generer robots.txt
» Generer metatagger
» Redirect generator
» Scann metatagger
» Bakgrunnsfarge
» Velg font
Sjekk kode
» HTML Validator
» CSS Validator
Tilfeldig link
» Hockeyfrossa (hockeysveis)
Tjenester
» Forum
» Quiz!



Førstesiden / PHP / post_link.html

Hvordan bruke POST til å linke til sider

Vi er alle kjente med at man kan bruke GET for å velge side, eksempel:


<?php

if ( $_GET['side'] == "Hjem" ) {
    print 
"Dette er hjemmesiden.";
}
elseif ( 
$_GET['side'] == "Info" ) {
    print 
"Informasjonssiden..";
}

?>

<a href="index.php?side=Hjem">Hjem</a><br />
<a href="index.php?side=Info">Info</a><br />



*Ulempen* ved å bruke denne metoden er at man får den kanskje skjemmende teksten "?side=blahblahblah" etter url'en. Ved å bruke POST-metoden istedenfor GET kan man fjerne denne teksten, noe som bidrar til å lage en ryddigere hjemmeside. (selv om kildekoden ikke akkurat blir så mye ryddigere)

For å bruke POST-metoden istedenfor GET, kan man ikke bruke den vanlige metoden, med såkalt 'querystring' etter url'en. Måten man gjør dette på, er å opprette et skjema som bare inneholder en input, som er skjult. Dette skjemaet pleier jeg for ordens skyld å legge inn i kildekoden, rett etter -flagget. Koden for dette skjemaet blir da:


<form name="navigasjon" method="post" action="index.php">
<input type="hidden" name="side" value="" />
</form>


Når noen trykker på en link, bruker vi javascript for først å forandre verdien til "side". Deretter bruker vi javascript til å sende skjemaet. Koden vil da ligne noe slikt:


<a href="javascript:document.navigasjon.side.value='Hjem'; document.navigasjon.submit();">Hjem</a><br />
<a href="javascript:document.navigasjon.side.value='Info'; document.navigasjon.submit();">Info</a><br />


PHP-delen er nesten helt lik den som brukes ved GET, bortsett fra at man bruker $_POST.


<?php

if ( $_POST['side'] == "Hjem" ) {
    print 
"Dette er hjemmesiden.";
}
elseif ( 
$_POST['side'] == "Info" ) {
    print 
"Informasjonssiden..";
}

?>


Vår samlede kode, med POST-metoden, ser da slik ut:


<html>
<head>
</head>
<body>
<form name="navigasjon" method="post" action="index.php">
<input type="hidden" name="side" value="" />
</form>

<?php


if ( $_POST['side'] == "Hjem" ) {
    print 
"Dette er hjemmesiden.";
}
elseif ( 
$_POST['side'] == "Info" ) {
    print 
"Informasjonssiden..";
} else {
  
// Vi legger til en "default"-side
  
print "Velkommen til denne siden!";
}

?>


<a href="javascript:document.navigasjon.side.value='Hjem'; document.navigasjon.submit();">Hjem</a><br />
<a href="javascript:document.navigasjon.side.value='Info'; document.navigasjon.submit();">Info</a><br />



Eventuell forbedring: Når man holder musen over linken, vil status-linja vise javascriptet. For å holde hjemmesida like ren som den ble ved bruk av POST-metoden, kan man forandre statuslinjeteksten manuelt. For å gjøre dette legges det til to javascript- kommandoer i linkene, eksempel:


<a OnMouseOver="window.status='Hjem'; return true;" OnMouseOut="window.status=''; return true;" 
href="javascript:document.navigasjon.side.value='Hjem'; document.navigasjon.submit();">Hjem</a><br />


Lykke til med bruken av POST!
- Eirik Sletteberg


Utskriftsvennlig versjon | Forslag til endring av artikkel | Skriv ut | Ny kommentar

Kommentarer

Innsendt av Sindre M Email: -
Det med indeksering av crawlere er nok en issue. De som har deaktivert JavaScript kan takke seg selv :) Det er veldig vanskelig å holde seg unna JavaScript. Jeg bruker det ganske mye ihvertfall.

Poenget til Eirik er at han ønsker å vise hvordan man kan gjøre dette med hjelp av POST istedenfor GET. Der er ikke dermed sagt det er en "best practise".

Innsendt av Bza Email: tormra[ATNOSPAM]online.no
Hvordan vil crawler'ne fra søkemotorene følge opp disse linkene da? Man ender vel fort opp med at kun forsiden blir indexert. I tillegg vil personer som har javascript deaktivert i nettleseren ikke ha noen mulighet til å bruke denne navigasjonen...

Innsendt av Kalle Kanin Email: anonym[ATNOSPAM]jegeranonym.no
Med denne teknikken fungerer det hverken å legge en underside i favoritter eller å lenke til den fra andre sider. Bare så dere vet det ;-)

Innsendt av TMN Email: trimn90[ATNOSPAM]gmail.com
er det ikke lettere om man bruker


if (isset($_GET['side']))
{
if (stristr($_GET['side'], '..') || stristr($_GET['side'], '/') || stristr($_GET['side'], '.') || stristr($_GET['side'], 'http') || stristr($_GET['side'], 'ftp'))
echo "Hacker!!! Keep away!!!
  Your IP is tracked!!!";
else
{

if (is_file($_GET['side']))
include($_GET['side']);
else
echo "Finner ikke fil!";
}
}
else {
include('main');
}

?>

Innsendt av Henrik Email: los[ATNOSPAM]digitaldomination.org
Greit nok at det finnes en måte å gjøre dette på og.
Men da kan man heller bruke mod_rewrite enn å ødelegge en del av poenget til siden, ingen bookmarks, ingen "gi link til venn", har god tro på at søkemotorene sliter og så lenge de vil linke til den sammen siden uansett hva det står der.

Innsendt av Vidar Solbakk Email: speedar[ATNOSPAM]start.no
En annen ulempe ved og bruke post er at man ikke kan "bookmarke" en underside, eller sende en direkte link til en venn ;)




Nyttige program
PHP
MySQL
PostgreSQL
.NET FrameWork
Apachetoolbox
EasyPHP
PHP Coder
Om meg
CV
Hvem er jeg?
Støtt sindrem.com
Bli partner?
Linke til Sindrem.com
SinSoft
Priser annonsering
Oppdrag
Kursplan 2003
Systemutvikling
Forum
Søk på sindrem.com
 
 
Søk på php.net
 
 
Nyhetsbrev
 
 På:Av:
 


 ©® Sindre Mathisen, SinSoft™ Designet for NS 6.0, IE 5, Opera 5.0 og nyere. Bokmerk denne siden.




Forum1.no - Bannerexchange