Avatar billede wickedd Juniormester
01. februar 2006 - 18:15 Der er 26 kommentarer og
1 løsning

Spørgsmål om php samt register_globals

Hey hey, nu sidder jeg i denne sitiuation at jeg alfrig har fået lært eller forstået hvordan man koder med register_globals off.

Jeg har et eksempel som i meget gerne lige må kommentere og evt. skrive et par koder så jeg forstår det :)

Jeg har et link som f.eks. http://www.test.dk/vis.php?year=2001
I vis.php har jeg denne kode:
if ($year == "2001")
{
  echo "År 2001, fantastisk!";
}
else if ($year == "2002")
{
  echo "Aha, år 2002...";
}

Det virker bare ikke med register_globals slået fra, så hvordan og hvorledes gør jeg så det?
Avatar billede erikjacobsen Ekspert
01. februar 2006 - 18:23 #1
$year = $_GET['year'];
if ($year == "2001")
{
  echo "År 2001, fantastisk!";
}
else if ($year == "2002")
{
  echo "Aha, år 2002...";
}
Avatar billede wickedd Juniormester
01. februar 2006 - 19:38 #2
ah på den måde, må vist hellere lige teste
Avatar billede wickedd Juniormester
01. februar 2006 - 20:36 #3
Hvad så med
if ($_COOKIE['year'])
{
  $year = $_COOKIE['year'];
}
Virker ikke så godt igen :)
Avatar billede jakobdo Ekspert
01. februar 2006 - 21:18 #4
Hvor kommer cookie fra?

Der er jo forskel på $_GET, $POST, $_COOKIE osv...
Avatar billede wickedd Juniormester
02. februar 2006 - 21:30 #5
Ja men den skal tjekke om der er en cookie den kan læse.
Det var jo let nok førhen... if $cookienavn {
Avatar billede Slettet bruger
02. februar 2006 - 21:33 #6
Det er det samme.. $_COOKIE['CookieNavn']
Avatar billede Slettet bruger
02. februar 2006 - 21:34 #7
$_GET['assoc'] = Fra adresselinien.
$_POST['assoc'] = Fra en formular med post-metoden.
$_COOKIE['assoc'] = Fra brugerens cookies
$_SERVER['assoc'] = Prædefinerede servervariabler (f.eks. HTTP_REFERER osv)
Avatar billede wickedd Juniormester
03. februar 2006 - 20:45 #8
Ah er det mon fordi jeg smider () udenom?
Hvis det ikke er, så aner jeg ikke hvad der er galt.
Avatar billede wickedd Juniormester
03. februar 2006 - 20:45 #9
if ($_COOKIE['year'])
skal være
if $_COOKIE['year']
?
Avatar billede jakobdo Ekspert
03. februar 2006 - 21:33 #10
Nej, det skal være if($_COOKIE['year'])
Prøv evt at lave følgende kode på siden:

echo "<h3>GET</h3>";
echo "<pre>";
print_r($_GET);
echo "</pre>";

echo "<h3>POST</h3>";
echo "<pre>";
print_r($_POST);
echo "</pre>";

echo "<h3>COOKIE</h3>";
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";

Og se hvilke data du overhovedet har på siden.
Avatar billede wickedd Juniormester
03. februar 2006 - 22:57 #11
Må lige undskylde mine ret så sene svar, har meget at lave (overarbejde).

Jeg får følgende output fra ovenstående kode:

GET

Array
(
)

POST

Array
(
)

COOKIE

Array
(
    [year] => 2005
    [disable] => 1
)
Avatar billede wickedd Juniormester
03. februar 2006 - 22:58 #12
Og der kan den fint læse den cookie, men ovenstående med () udenom fungere ikke..
Der må være en fejl et sted
Avatar billede jakobdo Ekspert
03. februar 2006 - 23:02 #13
Prøv at ret if() til:
if(isset($_COOKIE['year']))
echo "Cookie Year er : " . $_COOKIE['year'] . "<br>";
else
echo "Cookie Year er ikke sat<br>";
Avatar billede wickedd Juniormester
03. februar 2006 - 23:05 #14
Her:

GET

Array
(
)

POST

Array
(
)

COOKIE

Array
(
    [year] => 2005
    [disable] => 1
)

-------------
Cookie Year er : 2005
Avatar billede wickedd Juniormester
03. februar 2006 - 23:06 #15
Har selv lige smidt --- ind så det er lidt overskueligt :)
Avatar billede wickedd Juniormester
03. februar 2006 - 23:08 #16
Hm.. Det går jo fint med at læse den skide cookie, forstår bare ikke hvofor jeg ikke kan få den frem
Avatar billede jakobdo Ekspert
03. februar 2006 - 23:28 #17
Hvad er det præcist du vil teste?
Avatar billede wickedd Juniormester
03. februar 2006 - 23:59 #18
Om der er en cookie der hedder year, og hvis der er, så gør dette {
Avatar billede wickedd Juniormester
04. februar 2006 - 00:19 #19
Jeg sidder lige og lurer den rimelige simple kode af, men forstår det ikke.
Den gider bare ikke tjekke om den cookie er der, og hvad den har gemt.
Avatar billede jakobdo Ekspert
04. februar 2006 - 08:05 #20
Forklar lige nærmere dette:
Om der er en cookie der hedder year, og hvis der er, så gør dette {

Kunne det være noget i denne stil:
if(isset($_COOKIE['year']))
{
$year = $_COOKIE['year'];
}
Så hvis cookie/year er sat, så har vi nu data i $year og du kan bruge den videre gennem din kode.
Avatar billede erikjacobsen Ekspert
04. februar 2006 - 08:27 #21
Det er rigtig nok, men skal vi ikke lige gøre det helt rigtigt ;)

if(isset($_COOKIE['year'])) {
  $year = $_COOKIE['year'];
} else  {
  $year = -1;
}

Altså: $year skal have een eller anden værdi, uanset om den kommer fra cookien eller ej - gerne så vi kan skelne om den er sat eller ikke sat. Værdien -1 kan evt erstattes af noget andet, fx det år vi tilfældigvis er i.
Avatar billede erikjacobsen Ekspert
04. februar 2006 - 08:31 #22
Og endnu mere korrekt er at checke om det også er en lovlig værdi. En cookie kommer fra brugeren, og enhver hacker med respekt for sig selv vil prøve at putte psykodeliske værdier ind i cookier for at se hvad der sker. Derfor skal man teste validiteten af de data, der kommer fra brugeren. Hver gang! Her kunne det være at det er 4 cifre. Hvis ikke, så putter man en harmløs værdi ind. Fx:

if(isset($_COOKIE['year'])) {
  $year = $_COOKIE['year'];
  if (!preg_match('/^[0-9]{4}$/',$year)) {
    $year = -1;
  }
} else  {
  $year = -1;
}
Avatar billede wickedd Juniormester
04. februar 2006 - 10:54 #23
Ah ok, nu forstår jeg det endeligt :)
Smid gerne et svar / deler svar.

Takker for hjælpen
Avatar billede jakobdo Ekspert
04. februar 2006 - 10:58 #24
Svar!
Avatar billede erikjacobsen Ekspert
04. februar 2006 - 13:42 #25
Jeg samler slet ikke på point, tak.
Avatar billede wickedd Juniormester
05. februar 2006 - 15:32 #26
Ok, tak for hjælpen.
Avatar billede jakobdo Ekspert
05. februar 2006 - 15:39 #27
Jeg takker for point!
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel