Forskellen

Tags:    php

Hvad er forskellen på de her to ? og er der andre arbejdsmetode, at gøre det på ? ?

$navn = htmlspecialchars($_POST[navn]);
$navn = $_REQUEST["navn"];




Indlæg senest redigeret d. 23.10.2006 13:06 af Bruger #10441
7 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
$_REQUEST er foreningen af $_GET, $_POST, $_COOKIE og også $_FILES hvis du bruger mindre end PHP 4.3.0.

Med andre ord, du ved ikke hvad det er du får fat i, men hvis du er ligeglad, virker det sikkert lige så fint for dig som register_globals gjorde i "gode" gamle dage.

Se evt. http://dk2.php.net/manual/en/reserved.variables.php




Andre forskelle er at i første linje bruger du en konstant (navn), og i anden linje bruger du en string ("navn"). Det giver dog samme resultat, da PHP selv kan lave konstanten om til en string, hvis konstanten ikke findes (det vil dog fremkalde en fejl af typen E_NOTICE, hvis denne fejltype er slået til).

Desuden bruges htmlspecialchars i første linje, det vil sige at $navn i første linje skal bruges til at udskrives på siden, mens man endnu ikke har bestemt hvad $navn skal bruges til i anden linje.



Ej stop dog lige 2 secs.

Anden linie er som Jonatan Hertel rigtigt nok siger en predefineret variabel der gør det ud for $_POST, $_GET osv., men første linie er mere end som så.

Det betyder for det første ikke nødvendigvis at man vil outputte elementet.

Første linie er en del mere sikker en anden linie først og fremmest fordi den bruger $_POST, som sikrer at brugeren har postet oplysningen og ikke indsat den som en del af adressen.

For det andet er der htmlentities, som sikrer at alt hvad der er skrevet bliver omkodet til output-brugbar kode, men faktisk er dette lige så meget en sikkerhed mod f.eks. at skrive ondsindet scripts. Altså f.eks. gå ind og ødelægge php koden.

htmlentities laver f.eks.: < > om til: & lt; & gt;




Indlæg senest redigeret d. 23.10.2006 17:24 af Bruger #10132
eller $navn = $_POST[navn]);
Men ja ellers rigtigt og ja, brug helst med htmlspecialchars for sikkerhedensskyld.



Ja, selvfølgelig skal du aldrig bruge noget input uden at kontrollere det først, men hvis indholdet ikke skal fortolkes som html, vil det være en dum ide at bruge htmlspecialchars. Skal man fx bruge den i en mysql-query, skal man i stedet escape stringen i forhold til sql og ikke html :)



Mange tak få hjælpen.

Har jeg fået det rigtigt ?? ?

Hvis jeg fx. skal lave en gæstebog, skal jeg bruge :

$navn = htmlspecialchars($_POST[navn]);

ikke !





Jeg ville bruge:

$navn = $_POST['navn'];

det vil sige med _POST, med citationstegn og uden htmlspecialchars. Når du så skal udskrive variablen, vil jeg anbefale:

echo htmlspecialchars($navn);



t