/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
$_POST[navn] eller $_POST['navn'] eller $_~
Fra : Leif Neland


Dato : 08-02-08 10:29

Skal index være i quotes?

Hvad er mest rigtigt (og effektivt)?

Alle ser ud til at virke

Leif



 
 
Christian Hansen (08-02-2008)
Kommentar
Fra : Christian Hansen


Dato : 08-02-08 11:05

Leif Neland wrote:
> Skal index være i quotes?

Ja, forstil dig følgende:

define("navn","tada");

print $_POST["navn"];
print $_POST[navn];

I første print vil blive udskrevet den værdi, der har nøglen "navn"
I andet print vil blive udskrevet den værdi, der har nøglen "tada". Det
skyldes at php vil læse navn som en konstant, da den er defineret
tidligere som en sådanne. Havde vi ikke defineret konstanten, ville
begge printstatements ha udskrevet værdien med nøglen "navn". PHP
forsøger altså at gætte, hvad du mener og det er "farligt".

Korrekt burde man benytte constant("navn"), når man vil referere til
konstanten navn, altså:

print $_POST["navn"];
print $_POST[constant("navn")];

Og så altid sætte strengværdier i "" eller ''-

Så er alle tvetydigheder ryddet af vejen.

Det kan virke mere besværligt at skulle gøre, men tro mig - i længden er
det rigtig godt givet ud, da man undgår mange potentielle faldgrupper
- og så har man eksplicit fortalt php, hvad man vil, og så er man fri
for, at den gætter forkert.

Mvh Chrsitian

Mvh Christian

Martin (08-02-2008)
Kommentar
Fra : Martin


Dato : 08-02-08 12:57

Christian Hansen wrote:
> Leif Neland wrote:
>> Skal index være i quotes?
>
> Ja, forstil dig følgende:
>
> define("navn","tada");
>
> print $_POST["navn"];
> print $_POST[navn];
>
> I første print vil blive udskrevet den værdi, der har nøglen "navn"
> I andet print vil blive udskrevet den værdi, der har nøglen "tada". Det
> skyldes at php vil læse navn som en konstant, da den er defineret
> tidligere som en sådanne. Havde vi ikke defineret konstanten, ville
> begge printstatements ha udskrevet værdien med nøglen "navn". PHP
> forsøger altså at gætte, hvad du mener og det er "farligt".
>
> Korrekt burde man benytte constant("navn"), når man vil referere til
> konstanten navn, altså:
>
> print $_POST["navn"];
> print $_POST[constant("navn")];
>
> Og så altid sætte strengværdier i "" eller ''-
>
> Så er alle tvetydigheder ryddet af vejen.
>
> Det kan virke mere besværligt at skulle gøre, men tro mig - i længden er
> det rigtig godt givet ud, da man undgår mange potentielle faldgrupper -
> og så har man eksplicit fortalt php, hvad man vil, og så er man fri for,
> at den gætter forkert.
>
> Mvh Chrsitian
>
> Mvh Christian

Også er der ingen forskel på om man bruger
$_POST['navn'] eller $_POST["navn"]

Jeg bruger selv '' da det ligger lige til fingeren, mens " kræver 2
hænder :)

echo '<div class="foo">' . $_POST['navn'] . '</div>';

Så kan man gennemskue at alle "" er HTML karakter, og ' er PHP tegn (så
længe man ikke bruger javascript ihvertfald)

echo '<div class="foo" onclick="doThis(\'Say Hello\')">' .
$_POST['navn'] . '</div>';

Christian Hansen (08-02-2008)
Kommentar
Fra : Christian Hansen


Dato : 08-02-08 13:08

Martin wrote:

> Også er der ingen forskel på om man bruger
> $_POST['navn'] eller $_POST["navn"]
>


Jo, det er der faktisk. Bruger man "" interpoleres variable. "$var" er
således ikke det samme som '$var'. I tilfældet med "" oversættes $var i
strengen til den værdi $var indeholder. I det andet tilfælde sker dette
ikke.

prøv:

$var = "tada";
print '$var';   //udskriver $var
print "$var"; //udskriver tada

Skal $var udskrives som en del af en streng, ser de to tilfælde således ud:

print 'Når man vinder siger man ' . $var . ' højt og klart';
print "Når man vinder siger man $var højt og klart";


Mvh Christian

Martin (08-02-2008)
Kommentar
Fra : Martin


Dato : 08-02-08 16:03

Christian Hansen wrote:
> Martin wrote:
>
>> Også er der ingen forskel på om man bruger
>> $_POST['navn'] eller $_POST["navn"]
>>
>
>
> Jo, det er der faktisk. Bruger man "" interpoleres variable. "$var" er
> således ikke det samme som '$var'. I tilfældet med "" oversættes $var i
> strengen til den værdi $var indeholder. I det andet tilfælde sker dette
> ikke.
>
> prøv:
>
> $var = "tada";
> print '$var'; //udskriver $var
> print "$var"; //udskriver tada
>
> Skal $var udskrives som en del af en streng, ser de to tilfælde således ud:
>
> print 'Når man vinder siger man ' . $var . ' højt og klart';
> print "Når man vinder siger man $var højt og klart";

Øhm... nu snakker vi om $_POST['foo'] og $_POST["foo"] :)


Ved godt at '' og "" er forskelligt i en echo/print

Christian Hansen (08-02-2008)
Kommentar
Fra : Christian Hansen


Dato : 08-02-08 17:05

Martin wrote:

>
> Øhm... nu snakker vi om $_POST['foo'] og $_POST["foo"] :)
>
> Ved godt at '' og "" er forskelligt i en echo/print

Det har ikke noget med echo/print at gøre. Det har at gøre med, hvordan
du ønsker php skal håndtere en given streng, Om du udskriver en streng
eller bruger den som nøgle i et array gør ingen forskel i phps måde at
håndtere strengen på. Anvender du "" omkring din streng beder du php om
at parse strengen og erstatte variable med deres respektive værdier.
Bruger du '' fortæller du php, at den skal holde nallerne fra strengen
og lade den være, som du har skrevet den.

I et tænkt eksempel har du et array, som bland andet indeholder nøglerne
adresse_1, adresse_2 og adresse_3

Dem vil du udskrive via en løkke og har derfor 2 ( faktisk 3 ) muligheder:

for ( $c = 1; $c < 4; $c++ ) print $array["adresse_$c"];

eller

for ( $c = 1; $c < 4; $c++ ) print $array['adresse_' . $c];

Hvis man gør sådan her:
for ( $c = 1; $c < 4; $c++ ) print $array["adresse_" . $c];

Går man over åen efter vand - så beder man php om at bruge tid på både
at interpolere og lægge to strenge sammen - men det vil også virke.

hvis du gjorde sådan her:

for ( $c = 1; $c < 4; $c++ ) print $array['adresse_$c'];

Ville du ikke få det forventede resultat.

Så det er altså ikke ligegyldigt om man benytter "" eller '' - eller
rettere - man skal være opmærksom på, at der er en forskel.

Mvh Christian

Philip Nunnegaard (08-02-2008)
Kommentar
Fra : Philip Nunnegaard


Dato : 08-02-08 17:42

"Martin" <maaNO@SPAMscandesigns.dk> skrev i meddelelsen
news:47ac6f3f$0$90272$14726298@news.sunsite.dk...

> Øhm... nu snakker vi om $_POST['foo'] og $_POST["foo"] :)

Også her er der en forskel.

Eksempler:
$_POST["foo$bar"] vil formentlig ikke give samme resultat som
$_POST['foo$bar'], hvis sidstnævnte overhovedet kan lade sig gøre.

Har jeg f.eks. sat $bar til værdien 25, vil den i det første tilfælde med "
returnere $_POST["foo25"], mens den i det andet tilfælde vil returnere
$_POST['foo$bar'].


Dan Storm (08-02-2008)
Kommentar
Fra : Dan Storm


Dato : 08-02-08 13:22

Martin skrev:
>
> Også er der ingen forskel på om man bruger
> $_POST['navn'] eller $_POST["navn"]

Christian har vist besvaret den...
>
> Jeg bruger selv '' da det ligger lige til fingeren, mens " kræver 2
> hænder :)
>
> echo '<div class="foo">' . $_POST['navn'] . '</div>';
>
> Så kan man gennemskue at alle "" er HTML karakter, og ' er PHP tegn (så
> længe man ikke bruger javascript ihvertfald)
>
> echo '<div class="foo" onclick="doThis(\'Say Hello\')">' .
> $_POST['navn'] . '</div>';

Det er en smagssag. Personligt bruger jeg altid " til mine strenge.

echo "<div class=\"foo\">".$_POST["navn"]."</div>\n";

For mig betyder det en langt større kontrol over mit output.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Bertel Lund Hansen (08-02-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 08-02-08 13:39

Martin skrev:

> Jeg bruger selv '' da det ligger lige til fingeren, mens " kræver 2
> hænder :)

Jeg bruger enkelte når det ikke er nødvendigt med dobbelte, og
jeg bruger enkelte til HTML.

> Så kan man gennemskue at alle "" er HTML karakter, og ' er PHP tegn (så
> længe man ikke bruger javascript ihvertfald)

Du er bare nødt til at bruge dobbelte anførselstegn somme tider i
PHP (ved variable eller koder der skal oversættes). Det er derfor
det er smartere at bruge enkelte til HTML.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Dan Storm (08-02-2008)
Kommentar
Fra : Dan Storm


Dato : 08-02-08 13:57

Bertel Lund Hansen skrev:
> Du er bare nødt til at bruge dobbelte anførselstegn somme tider i
> PHP (ved variable eller koder der skal oversættes). Det er derfor
> det er smartere at bruge enkelte til HTML.

Begrund 'smartere'? Vi har haft debatten før - og der er ikke noget der
gør det 'smartere' at bruge ' istedet for ". Du kan kalde det en
smagssag, men det gør det ikke 'smartere'.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Martin (08-02-2008)
Kommentar
Fra : Martin


Dato : 08-02-08 16:04

Bertel Lund Hansen wrote:
> Martin skrev:
>
>> Jeg bruger selv '' da det ligger lige til fingeren, mens " kræver 2
>> hænder :)
>
> Jeg bruger enkelte når det ikke er nødvendigt med dobbelte, og
> jeg bruger enkelte til HTML.
>
>> Så kan man gennemskue at alle "" er HTML karakter, og ' er PHP tegn (så
>> længe man ikke bruger javascript ihvertfald)
>
> Du er bare nødt til at bruge dobbelte anførselstegn somme tider i
> PHP

Hvor?

Bertel Lund Hansen (08-02-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 08-02-08 17:30

Martin skrev:

> > Du er bare nødt til at bruge dobbelte anførselstegn somme tider i
> > PHP

> Hvor?

Alle steder hvor der indgår en variabel eller en kode. Bevares, variablen
kan prikkes ud, men det kan koden ikke.

echo '\n';   Udskrift: \n
echo "\n";   Udskrift: [linjeskift]

echo 'Klokkeslæt: $tidsrum';      Udskrift: Klokkeslæt: $tidsrum
echo "Klokkeslæt: $tidsrum";   Udskrift: Klokkeslæt: 17:43:08

Det sidste kunne også løses sådan her:
echo 'Klokkeslæt:'.$tidsrum;      Udskrift: Klokkeslæt: 17:43:08

Selv bruger jeg altid variable inden i anførselstegnene hvor det
er muligt (og praktisk).

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Johan Holst Nielsen (09-02-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 09-02-08 11:56

Bertel Lund Hansen wrote:
> Martin skrev:
>
>>> Du er bare nødt til at bruge dobbelte anførselstegn somme tider i
>>> PHP
>
>> Hvor?
>
> Alle steder hvor der indgår en variabel eller en kode. Bevares, variablen
> kan prikkes ud, men det kan koden ikke.
>
> echo '\n';   Udskrift: \n
> echo "\n";   Udskrift: [linjeskift]
>
> echo 'Klokkeslæt: $tidsrum';      Udskrift: Klokkeslæt: $tidsrum
> echo "Klokkeslæt: $tidsrum";   Udskrift: Klokkeslæt: 17:43:08
>
> Det sidste kunne også løses sådan her:
> echo 'Klokkeslæt:'.$tidsrum;      Udskrift: Klokkeslæt: 17:43:08
>
> Selv bruger jeg altid variable inden i anførselstegnene hvor det
> er muligt (og praktisk).

Enig i at " af og til er ret vigtigt i PHP... men det er altså ikke
nødvendige...

Jeg bruger faktisk mere eller mindre KUN " i tilfælde at jeg skal lave
\n eller \t eller lign...

F.eks. ville jeg til en hver tid skrive

echo 'Klokkeslet: '.$tidsrum;

Måske af gammel vane - da min tidligere editor ikke lavede ordentlig
syntax highlighting - men også da jeg synes det giver en pænere struktur...


Derimod kunne

echo "\n";
godt løeses med
echo '
';

Uden problemer - dog vil jeg der til enhver tid anbefale \n'et - men det
er jo også ved at være en rent teoretisk diskussion nu.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (10-02-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 10-02-08 09:41

Johan Holst Nielsen skrev:

> Derimod kunne

> echo "\n";
> godt løeses med
> echo '
> ';

Det er da også rigtigt. Det bruger jeg af og til i stedet for at
hoppe ud af PHP - specielt hvis der i en lang stribe ren HTML
lige står en enkelt variabel eller to. Så skriver jeg

echo "
blablablablabla
bla $bla blabla
";

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

penta@panto.com (08-02-2008)
Kommentar
Fra : penta@panto.com


Dato : 08-02-08 19:15

"Leif Neland" <leif@neland.dk> skrev i en meddelelse
news:47ac20ef$0$2102$edfadb0f@dtext02.news.tele.dk...
> Skal index være i quotes?
>
> Hvad er mest rigtigt (og effektivt)?
>
> Alle ser ud til at virke
>
> Leif
>
>

OT: Skod-sprog som ikke er entydigt!


sorry...
tomov



Birger (09-02-2008)
Kommentar
Fra : Birger


Dato : 09-02-08 09:51

<penta@panto.com> skrev i en meddelelse
news:47ac9bee$0$2088$edfadb0f@dtext02.news.tele.dk...
> "Leif Neland" <leif@neland.dk> skrev i en meddelelse
> news:47ac20ef$0$2102$edfadb0f@dtext02.news.tele.dk...
>> Skal index være i quotes?
>>
>> Hvad er mest rigtigt (og effektivt)?
>>
>> Alle ser ud til at virke
>>
>> Leif
>>
>>
>
> OT: Skod-sprog som ikke er entydigt!
>
>


De er sure, sagde ræven...

Der er ikke noget, der ikke er entydigt.
Men man skal selvfølgelig forstå hvad man gør, og hvordan man skal få de
resultater man skal bruge.
Sådan er det vist med alle programmeringssprog.


Birger
-----
http://bbsorensen.dk
http://varmeretter.dk - hverdagsmad. Sundt, nemt, hurtigt og billigt. Daglig
opdatering.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste