/ 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
variabel $_POST
Fra : Danjel


Dato : 14-02-10 12:31

Hejsa...

Jeg prøver noget i denne stil:

$i = 1;
while ($i <= ($_POST['antal'])) {

$name = $_POST['navn+$i'];
echo "Navn " . $i . ": " . $name . "<br>";
$i++;
}

Formålet er at fange $_POST['navn1'], $_POST['navn2'] o.s.v.
Men der er noget der ikke funker, kan man ikke stykke det sammen
sådan??
Har også prøvet $_POST['navn.$i'] med samme ikke fungerende
resultat...


Danjel

 
 
Michael Rasmussen (14-02-2010)
Kommentar
Fra : Michael Rasmussen


Dato : 14-02-10 21:05

On Sun, 14 Feb 2010 11:30:45 -0800 (PST)
Danjel <danjel@jungersen.dk> wrote:

> Har også prøvet $_POST['navn.$i'] med samme ikke fungerende
> resultat...
Skal du have variabel substitution i en string, skal den være markeret
med " og ikke med '. Prøv $_POST["navn$i"]

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Chano Andersen (17-02-2010)
Kommentar
Fra : Chano Andersen


Dato : 17-02-10 19:57

Den 14-02-2010 21:05, Michael Rasmussen skrev:
> Skal du have variabel substitution i en string, skal den være markeret
> med " og ikke med '. Prøv $_POST["navn$i"]

Faktisk bør man gøre såleds:

$_POST["navn{$i}"]

Da man så også kan benytte arrays inden i strengen. Altså kan man skrive

echo "Navn 1: {$navn[1]}\n";
I stedet for at benytte
echo "Navn 1: ".$navn[1]."\n";

I det aktuelle tilfælde er det naturligvis ikke nødvendigt at gøre det,
men det er smart at gøre det til en vane at kode på den måde, da man så
aldrig vil opleve en situation, hvor det ikke fungere.

- Chano Andersen.

Martin Larsen (18-02-2010)
Kommentar
Fra : Martin Larsen


Dato : 18-02-10 12:34

Chano Andersen wrote:

> Da man så også kan benytte arrays inden i strengen. Altså kan man skrive
>
> echo "Navn 1: {$navn[1]}\n";
> I stedet for at benytte
> echo "Navn 1: ".$navn[1]."\n";

Det er nu ikke korrekt! Det er helt ok at skrive

echo "Navn 1: $navn[1]\n";

Hilsen
Martin

Leif Neland (18-02-2010)
Kommentar
Fra : Leif Neland


Dato : 18-02-10 17:42

Martin Larsen skrev:
> Chano Andersen wrote:
>
>> Da man så også kan benytte arrays inden i strengen. Altså kan man skrive
>>
>> echo "Navn 1: {$navn[1]}\n";
>> I stedet for at benytte
>> echo "Navn 1: ".$navn[1]."\n";
>
> Det er nu ikke korrekt! Det er helt ok at skrive
>
> echo "Navn 1: $navn[1]\n";
>
> Hilsen
> Martin

Men af hensyn til syntax-highlightning i editoren er det bedre at bruge
metoden med at have streng for sig og variabel for sig.

Og så kan man endda spare et par mikrosekunder ved at bruge ' i stedet
for " (enkeltpling i stedet for dobbeltpling), så php ikke skal kigge
efter variable inden i strenge.

echo 'Navn 1: '.$navn[1]."\n";

(Sidste del *skal* være i ", da der ellers skrives skråstreg n i stedet
for newline)

Men hvad laver et newline i html? Det ignoreres jo; det skal være et
<br> i stedet.

Leif


--
Jeg foretrækker min the tilberedt efter BS6008

Birger Sørensen (18-02-2010)
Kommentar
Fra : Birger Sørensen


Dato : 18-02-10 17:48

Følgende er skrevet af Leif Neland:
> Martin Larsen skrev:
>> Chano Andersen wrote:
>>
>>> Da man så også kan benytte arrays inden i strengen. Altså kan man skrive
>>>
>>> echo "Navn 1: {$navn[1]}\n";
>>> I stedet for at benytte
>>> echo "Navn 1: ".$navn[1]."\n";
>>
>> Det er nu ikke korrekt! Det er helt ok at skrive
>>
>> echo "Navn 1: $navn[1]\n";
>>
>> Hilsen
>> Martin
>
> Men af hensyn til syntax-highlightning i editoren er det bedre at bruge
> metoden med at have streng for sig og variabel for sig.
>
> Og så kan man endda spare et par mikrosekunder ved at bruge ' i stedet for "
> (enkeltpling i stedet for dobbeltpling), så php ikke skal kigge efter
> variable inden i strenge.
>
> echo 'Navn 1: '.$navn[1]."\n";
>
> (Sidste del *skal* være i ", da der ellers skrives skråstreg n i stedet for
> newline)
>
> Men hvad laver et newline i html? Det ignoreres jo; det skal være et <br> i
> stedet.
>
> Leif

Jeg har også forståelsen af, at det skal være muligt at indeksere
arrays, inde i "-strenge.
Men må så sige, at hos min host (Servage) virker det i hvert fald ikke.

Man kan da sagtens skrive newline ("\n") til HTML.
Så kan man få koden til at være læselig - hvilket er en stor hjælp ved
fejlfinding/opdatering.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Chano Andersen (19-02-2010)
Kommentar
Fra : Chano Andersen


Dato : 19-02-10 07:50

Den 18-02-2010 12:34, Martin Larsen skrev:
> Det er nu ikke korrekt! Det er helt ok at skrive
>
> echo "Navn 1: $navn[1]\n";

Det har ikke virket de gange jeg har forsøgt det... Kræver det en særlig
opsætning, eller er det først kommet med i en af de seneste versioner?
Eller det gælder måske ikke associative arrays?


Eksempel der IKKE fungere:

chano@mail ~ $ php
<?php

$test = array('test1' => 'Test 1', 'test2' => 'Test 2');

echo "Test 1: $test['test1']\n";

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING in - on line 5


- Chano Andersen

Mads Lie Jensen (19-02-2010)
Kommentar
Fra : Mads Lie Jensen


Dato : 19-02-10 08:22

On Fri, 19 Feb 2010 07:50:16 +0100, Chano Andersen
<sunsite092009@chanoandersen.dk> wrote:

>Den 18-02-2010 12:34, Martin Larsen skrev:
>> Det er nu ikke korrekt! Det er helt ok at skrive
>>
>> echo "Navn 1: $navn[1]\n";
>
>Det har ikke virket de gange jeg har forsøgt det... Kræver det en særlig
>opsætning, eller er det først kommet med i en af de seneste versioner?
>Eller det gælder måske ikke associative arrays?

Så snart du har '-er inden i [] så virker det ikke. Eksemplet overfor
virker fint nok.

>Eksempel der IKKE fungere:
>
>echo "Test 1: $test['test1']\n";
>
>Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE,
>expecting T_STRING or T_VARIABLE or T_NUM_STRING in - on line 5

Her kan du bruge:
echo "Test1: {$test['test1']}\n";

Altså, put {} omkring variablerne inden i strengen. $-tegnet kan være
både inden i {}-erne:

echo "{$test['test1']}";

eller før {:

echo "${test['test1']}";


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Martin Larsen (19-02-2010)
Kommentar
Fra : Martin Larsen


Dato : 19-02-10 10:45

Chano Andersen wrote:

> echo "Test 1: $test['test1']\n";

Det er apostrofferne omkring test1 der skaber problemet. Når et array er
indlejret i dobbelt-apostroffer, må de ikke have apostroffer omkring
indekset!

Dette virker:

echo "Test 1: $test[test1]\n";


Og hvis du spø'r mig, så er det lidt skørt at det ikke virker med
apostroffer som i dit eksempel. Jeg kan ikke se nogen fornuftig grund
til det.

Martin

Birger Sørensen (19-02-2010)
Kommentar
Fra : Birger Sørensen


Dato : 19-02-10 15:10

Martin Larsen sendte dette med sin computer:
> Chano Andersen wrote:
>
>> echo "Test 1: $test['test1']\n";
>
> Det er apostrofferne omkring test1 der skaber problemet. Når et array er
> indlejret i dobbelt-apostroffer, må de ikke have apostroffer omkring
> indekset!
>
> Dette virker:
>
> echo "Test 1: $test[test1]\n";
>
>
> Og hvis du spø'r mig, så er det lidt skørt at det ikke virker med apostroffer
> som i dit eksempel. Jeg kan ikke se nogen fornuftig grund til det.
>
> Martin

Og hvad så, hvis test1 faktisk er en konstant?
Udenfor strenge, skal index angives som strenge.
$test[ test1] er ulovligt - skal hedde $test[ 'test1'], med mindre
test1 er en konstant, der angiver indexet.
(Burde så skrives med stort og være defineret i forvejen define( TEST1,
'mintest');
Giver
echo "Test 1: $test[ TEST1]";
så det rigtige? Altså udskriver $test[ mintest] ?

Metoden beskrevet af Mads Lie Jensen med {} omkring variablen, virker
mere logisk og korrekt.
Men koden er ikke længere så let læselig, hvis man ikke er vant til
det.

echo 'Test 1: '.$test[ 'test1']; er nok det jeg holder mig til.
også fordi jeg foretrækker " til HTML'en, og derfor ' til strengene i
PHP.
Men i virkeligheden er det nok så meget en vanesag... ^^

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Larsen (19-02-2010)
Kommentar
Fra : Martin Larsen


Dato : 19-02-10 15:24

Birger Sørensen wrote:

> Og hvad så, hvis test1 faktisk er en konstant?
> Udenfor strenge, skal index angives som strenge.

Ja, men det jeg skrev er at jeg ikke forstår hvorfor apostoffer generer
php. Tag dette eksempel, som giver syntaxfejl:

echo "Test 1: $test['test1']\n";

Selv om du fjerner apostrofferne omkring test1, vil det stadig ikke
blive fortolket som konstanten test1.

Hilsen
Martin

Birger Sørensen (19-02-2010)
Kommentar
Fra : Birger Sørensen


Dato : 19-02-10 18:02

Efter mange tanker skrev Martin Larsen:
> Birger Sørensen wrote:
>
>> Og hvad så, hvis test1 faktisk er en konstant?
>> Udenfor strenge, skal index angives som strenge.
>
> Ja, men det jeg skrev er at jeg ikke forstår hvorfor apostoffer generer php.
> Tag dette eksempel, som giver syntaxfejl:
>
> echo "Test 1: $test['test1']\n";
>
> Selv om du fjerner apostrofferne omkring test1, vil det stadig ikke blive
> fortolket som konstanten test1.
>
> Hilsen
> Martin

echo "Test 1: $test['test1']\n";
skal give parse error, iht. dokumentationen
http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing
Uden apostroffer, skal den finde index test1 - og altså IKKE betragte
test1 som en konstant (hvilket er modsat udenfor strengen!). Skal man
bruge en konstant, og ikke vil bruge concatenation (.), er man henvist
til heredoc varianten - altså "{$test[ test1]}".

Jeg tror ikke du skal prøve at forstå hvorfor tingene er som de er -
blot lære at skrive dem på en måde, så de parses rigtigt, og samtidig
er læselige og forståelige for dig selv ^^
Det er helt enkelt sådan syntaxen er i PHP.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Larsen (19-02-2010)
Kommentar
Fra : Martin Larsen


Dato : 19-02-10 21:10

Birger Sørensen wrote:

> echo "Test 1: $test['test1']\n";
> skal give parse error, iht. dokumentationen

Helt enig, men vi taler da vist forbi hinanden

Jeg skrev blot at jeg ikke synes der er nogen fornuftig grund til at PHP
ikke vil have apostoffer omkring indekset inden i strenge. Jeg er klar
over det, og accepterer det, men jeg kan egentligt ikke se nogen grund
til at skal være sådan.

Men sådan er der jo så meget. Hvorfor er nogle funktionsnavne i PHP med
underscore, mens andre ikke er der? Tja, det skal man vist ikke tænke
for meget over

> Jeg tror ikke du skal prøve at forstå hvorfor tingene er som de er -
> blot lære at skrive dem på en måde, så de parses rigtigt, og samtidig er
> læselige og forståelige for dig selv ^^
> Det er helt enkelt sådan syntaxen er i PHP.

Hehe. Nu har jeg levet af at programmere i PHP i omkring 6 år, så det
går nok

Martin

Chano Andersen (19-02-2010)
Kommentar
Fra : Chano Andersen


Dato : 19-02-10 21:32

Den 19-02-2010 15:09, Birger Sørensen skrev:
> Og hvad så, hvis test1 faktisk er en konstant?
> Udenfor strenge, skal index angives som strenge.
> $test[ test1] er ulovligt - skal hedde $test[ 'test1'], med mindre test1
> er en konstant, der angiver indexet.

Ulovligt, måske, men det virker...

-----
chano@mail ~ $ php
<?php

$test = array('test1' => 'Test 1', 'test2' => 'Test 2');

echo "Test 1: $test[test1]\n";
?>
Test 1: Test 1
-----

Også uden får ", som her:

-----
chano@mail ~ $ php
<?php

$test = array('test1' => 'Test 1', 'test2' => 'Test 2');

echo "Test 1: ".$test[test1]."\n";
?>
Test 1: Test 1
-----


> Metoden beskrevet af Mads Lie Jensen med {} omkring variablen, virker
> mere logisk og korrekt.
> Men koden er ikke længere så let læselig, hvis man ikke er vant til det.

Det afhænger nok mest af, hvilken editor/IDE man benytter. I Zend Studio
markeres {} blokke inden i "" som en variabel, og dermed er det nemt at
se forskel.

> echo 'Test 1: '.$test[ 'test1']; er nok det jeg holder mig til.
> også fordi jeg foretrækker " til HTML'en, og derfor ' til strengene i PHP.
> Men i virkeligheden er det nok så meget en vanesag... ^^

Jeg ville blive træt af at læse den kode. I stedet for at bøvle med HTML
i PHP strenge, kan du bare indlejre PHP som det indlejrede scriptsprog
det nu en gang er... F.eks. sådan her:

<a href="<?php echo $url['href']; ?>"><?php echo $url['desc'] ?></a>

Eller den korte version, der dog kræver serveren understøtter det
(Short_open_tags sat til yes)

<a href="<?=$url['href']?>"><?=$url['desc']?></a>

Men ja, det er nok i sidste ende mest en smagssag... Dog er jeg blevet
ret glad for at lukke PHP blokkene når jeg skal igang med HTML i koden.

- Chano Andersen

Chano Andersen (19-02-2010)
Kommentar
Fra : Chano Andersen


Dato : 19-02-10 21:27

Den 19-02-2010 10:44, Martin Larsen skrev:
> Dette virker:
>
> echo "Test 1: $test[test1]\n";
>
>
> Og hvis du spø'r mig, så er det lidt skørt at det ikke virker med
> apostroffer som i dit eksempel. Jeg kan ikke se nogen fornuftig grund
> til det.

Den variation var jeg ikke lige klar over. Jeg mindes en pæn del
tilfælde hvor et index navn er behandlet som var det en konstant, og
dermed har det ikke fungeret uden apostroffer (Eller gåseøjne).

Men kan se at ovenstående også virker uden for gåseønjene, hvilket jo så
er fint nok, lige indtil man ramler ind i en konstant med sin
navngivning. ;)

- Chano Andersen.

Martin Larsen (19-02-2010)
Kommentar
Fra : Martin Larsen


Dato : 19-02-10 22:27

Chano Andersen wrote:

> Men kan se at ovenstående også virker uden for gåseønjene, hvilket jo så
> er fint nok, lige indtil man ramler ind i en konstant med sin
> navngivning. ;)

Ja det virker også uden for gåseøjne, men man får en E_NOTICE besked som
tak

Martin

Birger Sørensen (20-02-2010)
Kommentar
Fra : Birger Sørensen


Dato : 20-02-10 01:50

Martin Larsen tastede følgende:
> Chano Andersen wrote:
>
>> Men kan se at ovenstående også virker uden for gåseønjene, hvilket jo så
>> er fint nok, lige indtil man ramler ind i en konstant med sin
>> navngivning. ;)
>
> Ja det virker også uden for gåseøjne, men man får en E_NOTICE besked som tak
>
>
> Martin

array keys er enten integers eller strenge.
$test[ test1]
er altså kun validt, hvis test1 er defineret som en konstant (og den
bør så være med store bogstaver).
At gå ud fra at compileren sætter de apostroffer eller gåseøjne, man
ikke selv gider, er vist ikke god programmering - uanset hvor længe man
har levet af det..

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Chano Andersen (20-02-2010)
Kommentar
Fra : Chano Andersen


Dato : 20-02-10 10:38

Den 20-02-2010 01:49, Birger Sørensen skrev:
> At gå ud fra at compileren sætter de apostroffer eller gåseøjne, man
> ikke selv gider, er vist ikke god programmering - uanset hvor længe man
> har levet af det..

Det er der vist heller ikke nogen der har skrevet nogen steder? ;)

- Chano Andersen

Martin Larsen (20-02-2010)
Kommentar
Fra : Martin Larsen


Dato : 20-02-10 12:51

Birger Sørensen wrote:

> At gå ud fra at compileren sætter de apostroffer eller gåseøjne, man
> ikke selv gider, er vist ikke god programmering - uanset hvor længe man
> har levet af det..

Det har jeg heller aldrig sagt! Kun at det virker, og at man får smidt
en E_NOTICE i hovedet for at fortælle at det er fyfy

Jeg kunne ikke drømme om at bruge det selv.

Martin

Chano Andersen (20-02-2010)
Kommentar
Fra : Chano Andersen


Dato : 20-02-10 10:38

Den 19-02-2010 22:27, Martin Larsen skrev:
> Ja det virker også uden for gåseøjne, men man får en E_NOTICE besked som
> tak

Tja, den slags viser min PHP så ikke lige, i den opsætning den har. ;)

- Chano Andersen

Danjel (14-02-2010)
Kommentar
Fra : Danjel


Dato : 14-02-10 14:52

> Skal du have variabel substitution i en string, skal den være markeret
> med " og ikke med '. Prøv $_POST["navn$i"]
Perfekt, tak....

Er der nogen der ved samme lejlighed kan fortælle hvad forskellen er
på:
htmlentities($_POST['filnavn'])
og
$_POST['filnavn']

/Danjel

Birger Sørensen (14-02-2010)
Kommentar
Fra : Birger Sørensen


Dato : 14-02-10 23:01

Danjel har bragt dette til os:
>> Skal du have variabel substitution i en string, skal den være markeret
>> med " og ikke med '. Prøv $_POST["navn$i"]
> Perfekt, tak....
>
> Er der nogen der ved samme lejlighed kan fortælle hvad forskellen er
> på:
> htmlentities($_POST['filnavn'])
> og
> $_POST['filnavn']
>
> /Danjel

Eller $_POST[ 'navn'.$i]

http://dk.php.net/manual/en/function.htmlentities.php
oversætter & til &amp; osv.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



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

Månedens bedste
Årets bedste
Sidste års bedste