|
| 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 & osv.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
| |
|
|