/ 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
Variabler i tekst...
Fra : Frank


Dato : 21-01-09 11:10

Jeg har en en række variabler som skal indsættes i en tekst!

Her er nogle variabler:

$w1 = "Obama";
$w2 = "www.tv4.dk";
$CFG["w3"] = "www.cnn.com";

$test = "w1: $w1,<br>
w2: <a href=\"$w2\">$w2</a><br>
w3: $CFG ["w3"]";

echo $test;

Resulterer i :

   w1: Obama,
   w2: www.tv4.dk
   w3: Array ["w3"]   
   
Hvorfor kan $CFG["w3"] ikke anvendes?

Hvis jeg nu smider $test ind i min sql db, går det galt!

Et echo ser sådan ud:

   w1: $w1,
   w2: $w2
   w3: $CFG [\\\"w3\\\"] duer ikke hvorfor?

Jeg har forsøgt mig med at pakke felter ind sådan her:
'. xyz .' !

Hvad gør jeg galt?

På forhånd tak,

Frank


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Bertel Lund Hansen (21-01-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-01-09 11:24

Frank skrev:

> Hvorfor kan $CFG["w3"] ikke anvendes?

Det kan det også, men

   echo "$CFG["w3"]";

kan ikke fordi de to sæt anførselstegn konflikter.

Jeg bruger det princip i PHP at udskrifter (som regel) benytter
dobbelte anførselstegn, mens 'interne' anførselstegn er enkle. Så
ser det sådan ud:

$test = "w1: $w1,<br>
   w2: <a href='$w2'>$w2</a><br>
   w3: $CFG ['w3']";

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

Dan Storm (21-01-2009)
Kommentar
Fra : Dan Storm


Dato : 21-01-09 11:45

Frank skrev:
> Jeg har en en række variabler som skal indsættes i en tekst!
> Resulterer i :
>
>    w1: Obama,
>    w2: www.tv4.dk
>    w3: Array ["w3"]   
>    
> Hvorfor kan $CFG["w3"] ikke anvendes?
>
> Hvad gør jeg galt?

Din syntaks er forkert.
Du bliver nød til at escape din streng for at gøre det korrekt.
Jeg rydder lige lidt op i det og præsenterer det som jeg synes er pænest
og mest overskuelig, men hvordan du vil stille det op er op til dig selv.
<?php

$w1 = "Obama";
$w2 = "www.tv4.dk";
$CFG["w3"] = "www.cnn.com";

// alle liner escapes korrekt
echo "w1: ".$w1."<br />";
echo "w2: <a href=\"".$w2."\">".$w2."</a><br />";
echo "w3: ".$CFG["w3"];

?>

Idéen med at benytte single quotes, synes jeg er at springe over hvor
gærdet er lavest, og det bryder jeg mig bestemt ikke om. Men det er en
smagssag.

Forresten vil dit link ikke virke efter hensigten; det mangler http://
for at give den ønskede effekt.


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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Bertel Lund Hansen (21-01-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-01-09 12:59

Dan Storm skrev:

> Idéen med at benytte single quotes, synes jeg er at springe over hvor
> gærdet er lavest, og det bryder jeg mig bestemt ikke om. Men det er en
> smagssag.

Vi har før diskuteret det, og der er ingen grund til at tage det
emne op igen. Jeg vil blot anholde dit udtryk "at springe over
hvor gærdet er lavest". Det bruger man kun om løsninger der er
fejlbehæftede hvor fejlen ikke er åbenlys.

Min løsning er fuldt så god som den hvor man escaper
anførselstegnene.

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

Dan Storm (21-01-2009)
Kommentar
Fra : Dan Storm


Dato : 21-01-09 13:31

Bertel Lund Hansen skrev:
> Vi har før diskuteret det, og der er ingen grund til at tage det
> emne op igen. Jeg vil blot anholde dit udtryk "at springe over
> hvor gærdet er lavest". Det bruger man kun om løsninger der er
> fejlbehæftede hvor fejlen ikke er åbenlys.

Det er et spørgsmål om fortolkning.
Jeg synes bestemt at det er at 'springe over hvor gærdet er lavest' hvis
løsningen bliver at blot skifte quotes ud, fremfor at escape korrekt.
Det svarer, i min verden, til at sætte tape over et hul i en
vandbeholder, istedet for at tætne den med det rette materiale.
Selvom begge løsninger virker, så vil jeg hellere have mit hul tætnet
korrekt. Som jeg også skrev, så er det en smagssag.

> Min løsning er fuldt så god som den hvor man escaper
> anførselstegnene.

Jeg har heller ikke sagt at løsningen ikke virker; blot at _jeg_ synes
det er pænere at escape. Som du selv siger, så har vi diskuteret det
før, så der er ingen grund til at anfægte at din løsning virker -
hvilket jeg heller ikke gjorde.


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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Bertel Lund Hansen (21-01-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-01-09 13:55

Dan Storm skrev:

> Jeg synes bestemt at det er at 'springe over hvor gærdet er lavest' hvis
> løsningen bliver at blot skifte quotes ud, fremfor at escape korrekt.

Der er ikke noget ukorrekt ved at bruge enkelte anførselstegn.

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

Dan Storm (21-01-2009)
Kommentar
Fra : Dan Storm


Dato : 21-01-09 14:31

Bertel Lund Hansen skrev:
>> Jeg synes bestemt at det er at 'springe over hvor gærdet er lavest' hvis
>> løsningen bliver at blot skifte quotes ud, fremfor at escape korrekt.
>
> Der er ikke noget ukorrekt ved at bruge enkelte anførselstegn.

Hvor har jeg også sagt det?



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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Bertel Lund Hansen (21-01-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-01-09 14:58

Dan Storm skrev:

> > Der er ikke noget ukorrekt ved at bruge enkelte anførselstegn.

> Hvor har jeg også sagt det?

Her:

>   Jeg synes bestemt at det er at 'springe over hvor gærdet er lavest' hvis
>   løsningen bliver at blot skifte quotes ud, fremfor at escape korrekt.

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

Dan Storm (21-01-2009)
Kommentar
Fra : Dan Storm


Dato : 21-01-09 15:06

Bertel Lund Hansen skrev:
> Her:
>
>>    Jeg synes bestemt at det er at 'springe over hvor gærdet er lavest' hvis
>>    løsningen bliver at blot skifte quotes ud, fremfor at escape korrekt.

Fejlen bested i at hans kode ikke blev escapet korrekt.
Din løsning var at skifte quotes ud, men var at escape korrekt.
Beklager hvis jeg gjorde mig utydelig.


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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Dan Storm (21-01-2009)
Kommentar
Fra : Dan Storm


Dato : 21-01-09 15:19

Dan Storm skrev:
> Din løsning var at skifte quotes ud, men var at escape korrekt.
Der skulle selvfølgelig stå:
Din løsning var at skifte quotes ud, *min* var at escape korrekt.

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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Frank (21-01-2009)
Kommentar
Fra : Frank


Dato : 21-01-09 15:47

Jeg synes Bertels forslag gør tingene nemmere at læse og jeg kan ikke se
hvad escape har med sagen at gøre!

Kan I ikke hjælpe mig med dette her, som jeg ikke ka' få til at spille. Det
burde være så banalt!

$name        = $frm["email"];
$CFG["web_page"] = "http://87.60.199.180/";
$CFG["myname"]     = "Carpuna";
$TheLink    = $webpage.$TheUser; // Virker fint nok

Jeg hiver nedenstående ud af mysql:

Welcome $name,<br><br>
Congratulation, - your registration at $CFG['myname'] was
successful.<br><br>
We appreciate your interest in our project and recommend you to take a look
<a href=$CFG['web_page']>around</a>.<br><br>
<a href='$TheLink'>Please confirm your email address by clicking
here</a>.<br><br>
Sincerely,<br><br>

Og sender det som mail:

Welcome $name,
Congratulation, - your registration at $CFG[\'myname\'] was successful.
We appreciate your interest in our project and recommend you to take a look
around.
Please confirm your email address by clicking here.
Sincerely,


Ingen af variablerne overføres korrekt!

Hvad gør jeg forkert?

Frank



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Dan Storm (21-01-2009)
Kommentar
Fra : Dan Storm


Dato : 21-01-09 18:56

Frank skrev:
> jeg kan ikke se
> hvad escape har med sagen at gøre!

....

> Ingen af variablerne overføres korrekt!
>
> Hvad gør jeg forkert?

Rent hypotetisk (og simplificeret) forestiller jeg mig at du gør noget ala:

<?
$name        = $frm["email"];
$CFG["web_page"] = "http://87.60.199.180/";
$CFG["myname"]     = "Carpuna";
$TheLink    = $webpage.$TheUser; // Virker fint nok

$sql = "SELECT theText FROM table";
$result = mysql_query($sql);

$mailBody = mysql_result($result, 0, "theText");

mail("tildig", "Dit emne", $mailBody, "Dine headers");

?>

Ret mig hvis jeg tager fejl?
Gider ikke gætte i blinde...


--
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!

Frank (21-01-2009)
Kommentar
Fra : Frank


Dato : 21-01-09 20:49

Jeg kan ikke forstå, der er noget at misforstå!

Når jeg henter en tekst fra min database, skulle den være klargjort til at
modtage nogle variabler. Det er den ikke!!!

Jeg har vist teksten og variabler i min sidste post.

Glem feltet "TheLink"!

Min fejl er, at jeg ikke definerer teksten rigtigt, - således at den er "klar"
til at modtage variablerne.

Tak

Frank

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Dan Storm (21-01-2009)
Kommentar
Fra : Dan Storm


Dato : 21-01-09 22:44

Frank skrev:
> Jeg kan ikke forstå, der er noget at misforstå!

Jeg kan ikke forstå det kan være svært for dig at forstå at det ikke er
muligt at fejlfinde dit problem på tre liniers kode - som i
virkeligheden ikke er andet end erklæring af variabler.

> Når jeg henter en tekst fra min database, skulle den være klargjort til at
> modtage nogle variabler. Det er den ikke!!!

Og så forsøger jeg at gentage mig selv fra mit forrige indlæg..

Hvis den nøjagtige tekst du henter fra databasen indeholder den
'klargjorte tekst' med variablerne i er det dit aktuelle problem.

Læs og forstå:

   $test = "flødebolle";
   
   $var1 = 'Dette er en $test';
   $var2 = "Dette er en $test";
   
   echo $var1; // Dette er en $test
   echo $var2; // Dette er en flødebolle

$var1 er en simpel string. Den parses ikke af PHP ved runtime.
Det du henter fra MySQL er også en simpel streng. Derfor bliver din
streng ikke parsed af PHP (desuden ved PHP ikke hvad MySQL returnerer,
så det ville være for meget at forlange).

$var2 er en tolkbar streng, som PHP kan parse.

Funktioner returnere simple strenge. Derfor vil dine data fra mysql ikke
parses.


Se mere her og få større forståelse:
<url: http://dk2.php.net/manual/en/language.types.string.php>

>
> Jeg har vist teksten og variabler i min sidste post.

Igen, tre liniers kode og noget tekst som vi ikke aner hvor du har fra
er ubrugeligt. Så ovenstående forklaring er rent gætværk.

>
> Glem feltet "TheLink"!

omg...

>
> Min fejl er, at jeg ikke definerer teksten rigtigt, - således at den er "klar"
> til at modtage variablerne.

Din fejl er forståelsen for brugen af strenge.


--
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!

Frank (22-01-2009)
Kommentar
Fra : Frank


Dato : 22-01-09 09:52

Jeg har ikke svært ved at forstå, hvad det er jeg skrever! Og jeg kan se, jeg har
givet dig oplysninger nok til, at du løser mit problem! Næsten! Tak for det!

Derimod har jeg svært ved at forstå, at du helt generelt bruger så meget tid på at
skrive ned til folk! Ikke bare mig! Hvorfor gør du det?

Videre...

$var1 = 'Dette er en $test';
$var2 = "Dette er en $test";

Hvordan laves $var1 om til $var2 på en sikker måde??

Er eval() måden at gøre det på?

Thanks,

Frank



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Bertel Lund Hansen (22-01-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 22-01-09 10:15

Frank skrev:

> Derimod har jeg svært ved at forstå, at du helt generelt bruger så meget tid på at
> skrive ned til folk! Ikke bare mig! Hvorfor gør du det?

Jeg synes ikke Dan Storm gør noget uberettiget. Du fodrer os
bitte små stumper af dit problem, og det er vanskeligt at se hvad
du præcis gør og hvorfor det ikke virker. Vi famler i blinde, og
derfor bliver Dan lidt irriteret.

> $var1 = 'Dette er en $test';
> $var2 = "Dette er en $test";

> Hvordan laves $var1 om til $var2 på en sikker måde??

Der er ikke tale om at lave en variabel om. Det er tale om
hvordan man koder PHP.

Hvis man har brug for at få behandlet en streng hvori der er
variable der skal afkodes, så skal man bruge dobbelte
anførselstegn.

Hvis man har en streng som blot skal bruges som den står, bruger
man enkelte anførselstegn.

Hvis der ingen specialtegn er i strengen, er det ligegyldigt hvad
man bruger.

Det var det Dan prøvede at vise dig med et eksempel.

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

Frank (22-01-2009)
Kommentar
Fra : Frank


Dato : 22-01-09 10:33

Min erfaring her på html.dk er stik modsat! Hvis jeg bruger meget tid på at formulere
et problem, så er der ofte ingen response!

Mit problem løses måske med dette her:

$message = preg_replace("/^'(.*)'$/", "$1", $message);

(Jeg har ikke haft tid til at teste det!!!)

Jeg anede ikke at sql returnerer 'xxx'

Tak allesamme,

Frank

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Dan Storm (22-01-2009)
Kommentar
Fra : Dan Storm


Dato : 22-01-09 11:23

Frank skrev:
> Min erfaring her på html.dk er stik modsat! Hvis jeg bruger meget tid på at formulere
> et problem, så er der ofte ingen response!

Jeg kan ikke svare på andre gruppers vegne, men et hurtigt skimt igennem
denne gruppe, indikerer da at du får rigeligt med svar.

Du må forstå at selvom du bruger meget tid på at formulere dig, kan det
du skriver godt være uforståeligt for andre, på trods af at du mener du
har gjort dig så klar og tydelig som overhovedet muligt. At din erfaring
med grupperne fortæller dig det ikke hjælper noget at bruge tid på din
formulering, uanset om det er nødvendigt at omformulere sig for at lette
på forståelsen, er ikke en undskyldning for at køre plat på gruppernes
skribenter.

I dit tilfælde blev jeg nød til at gætte mig frem til dit problem, når
nu du ikke svarede andet end 'Jeg kan ikke forstå du ikke forstår hvad
jeg mener, for jeg forstår det godt'.

>
> Mit problem løses måske med dette her:
>
> $message = preg_replace("/^'(.*)'$/", "$1", $message);
>
> (Jeg har ikke haft tid til at teste det!!!)

Hvis det er så simple ting, bør du overveje str_replace() istedet.

> Jeg anede ikke at sql returnerer 'xxx'

Det gør sql heller ikke - sql resulterer en resource til PHP som har
nogle biblioteker til at fortolke resourcen. PHP returnerer så det
behandlede resultatet gennem den funktion du har brugt.
Alle PHP funktioner afleverer en simpel streng.
Og af den URL jeg gav i tidligere indlæg fremgår det hvordan en simpel
streng fungerer. Men du skal ikke forstå det som om PHP's funktioner
returner en streng angivet i single quotes. PHP returnerer bare en
simpel streng som ikke kan tolkes af PHP.

PHP har, ulig mange andre programmeringssprog, blot mulighuden for at at
have en tolkbar streng-angivelse med variabeludvidelse i form af double
quotes.

>
> Tak allesamme,
>
> Frank
>


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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Stig Johansen (22-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 22-01-09 14:13

Dan Storm wrote:

> Frank skrev:
>> Jeg anede ikke at sql returnerer 'xxx'
>
> Det gør sql heller ikke -

Jo da, jeg har lige udført følgende SQL:
select 'xxx'as xxx,count(*) as antal from logfile group by 'xxx'
den returnerer fint xxx:
......
xxx antal
xxx 69918
......
Count = 1

--
Med venlig hilsen
Stig Johansen

Dan Storm (22-01-2009)
Kommentar
Fra : Dan Storm


Dato : 22-01-09 14:55

Stig Johansen skrev:
>>> Jeg anede ikke at sql returnerer 'xxx'
>> Det gør sql heller ikke -
>
> Jo da, jeg har lige udført følgende SQL:
> select 'xxx'as xxx,count(*) as antal from logfile group by 'xxx'
> den returnerer fint xxx:
> .....
> xxx antal
> xxx 69918
> .....
> Count = 1

Du simplificerer det. Dit eksempel har intet at gøre med sagens kerne;
At PHP's funktioner returnerer simple strenge.


Et eksempel:
$sql = "SELECT SUM(hits) as antalHits FROM visitors";
$res = mysql_query($sql);
$hits = mysql_result($res, 0, "antalHits");

mysql_result() returnerer en 'simpel streng' (se det som et term, ikke
som to adskilte ord).
Det er absolut ikke det samme som at skrive
$hits = '344';
Indholdet i $hits er nu en simpel streng, men som du har angivet til at
være, grundet dine single quotes.
PHP kan behandle dine strenge, uanset om de er simple eller tolkbare.
(tænk str_replace(), preg_match() og så videre).

PHP kan ikke udvide en simpel streng - uanset om den kommer returneret
fra en funktion eller du angiver den.

Et eksempel der bør give forståelsen:
<?php
   function getString()
   {   
      // Uanset hvad du udkommenterer
      // Vil resultatet være det samme
      $string = "This is a \$test";   
      //$string = 'This is a $test';   
   
      return $string;      
   }

   $test = "bucket";
   $stringOne = getString();
   $stringTwo = "This is a $test";
   
   // Her får du ikke dit ønskede resultat
   // idet der er returnet en simpel streng
   echo $stringOne;

   // Denne giver det ønskede resultat, da
   // du først angav en tolkbar streng som
   // dermed også kan udvides.
   echo $stringTwo;
?>

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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Stig Johansen (22-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 22-01-09 16:25

Dan Storm wrote:

> Stig Johansen skrev:
>>>> Jeg anede ikke at sql returnerer 'xxx'
>>> Det gør sql heller ikke -
>>
>> Jo da, jeg har lige udført følgende SQL:
>> select 'xxx'as xxx,count(*) as antal from logfile group by 'xxx'
>> den returnerer fint xxx:
>> .....
>> xxx antal
>> xxx 69918
>> .....
>> Count = 1
>
> Du simplificerer det.

Undskyld - Dan, det var et forsøg på at være morsom.

Frank skriver, at han ikke aner at SQL returnerer 'xxx',
Du skriver at det gør det heller ikke.
Jeg giver et eksempel, der returnerer masser af 'xxx'.
(Jeg skal nok prøve at holde mig i skindet i fremtiden :)

--
Med venlig hilsen
Stig Johansen

Dan Storm (22-01-2009)
Kommentar
Fra : Dan Storm


Dato : 22-01-09 17:57

Stig Johansen skrev:
> Undskyld - Dan, det var et forsøg på at være morsom.
>
> Frank skriver, at han ikke aner at SQL returnerer 'xxx',
> Du skriver at det gør det heller ikke.
> Jeg giver et eksempel, der returnerer masser af 'xxx'.
> (Jeg skal nok prøve at holde mig i skindet i fremtiden :)
>

No need, tror bare jeg kørte sur i tråden og kunne ikke finde ud af hvad
der var seriøst og hvad der ikke var ;)


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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Martin Larsen (22-01-2009)
Kommentar
Fra : Martin Larsen


Dato : 22-01-09 11:51

Bertel Lund Hansen wrote:

> Hvis man har brug for at få behandlet en streng hvori der er
> variable der skal afkodes, så skal man bruge dobbelte
> anførselstegn.
>
> Hvis man har en streng som blot skal bruges som den står, bruger
> man enkelte anførselstegn.
>
> Hvis der ingen specialtegn er i strengen, er det ligegyldigt hvad
> man bruger.

Det er jeg ganske enig.

Jeg skal slet ikke kommentere hvad de forskellige har ment i denne tråd,
men ovenstående praksis overholder jeg altid selv. Ikke fordi den lille
bitte hastighedsgevinst ved at bruge enkelte apostroffer frem for
dobbelte normalt betyder noget, men jeg synes det er en god praksis.

I tilfælde af mere komplicerede strenge benytter jeg dog altid HEREDOC,
så er jeg fri for at tænke på apostroffer.

Hilsen
Martin

Dan Storm (22-01-2009)
Kommentar
Fra : Dan Storm


Dato : 22-01-09 14:30

Martin Larsen skrev:
> Ikke fordi den lille
> bitte hastighedsgevinst ved at bruge enkelte apostroffer frem for
> dobbelte normalt betyder noget, men jeg synes det er en god praksis.

Hvilken hastifhedsgevinst? Du vinder absolut ingenting ved at benytte
single quotes, tværtimod.
<url: http://err0r.dk/quoteTest.php>

> I tilfælde af mere komplicerede strenge benytter jeg dog altid HEREDOC,
> så er jeg fri for at tænke på apostroffer.

heredoc syntaksen umuliggør pæn og struktureret kode.
Afslutning af heredoc i PHP skal foregå uden forudgående tegn, hvilket
ødelægger min struktur:
<?php

class Obj
{
public function getString()
{
$string = <<<EOT
Her er min streng
EOT;
}
}
?>

ikke kønt... men igen, det er jo en smagssag.



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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Bertel Lund Hansen (22-01-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 22-01-09 15:20

Dan Storm skrev:

> Hvilken hastifhedsgevinst? Du vinder absolut ingenting ved at benytte
> single quotes, tværtimod.

Jo da. Når nu blækket skal sprøjtes på indersiden af computerens
skærm, så går det selvfølgelig hurtigere når der kun skal
sprøjtes én og ikke to striber. Det er logik for perlehøns.

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

Dan Storm (22-01-2009)
Kommentar
Fra : Dan Storm


Dato : 22-01-09 15:25

Bertel Lund Hansen skrev:
> Jo da. Når nu blækket skal sprøjtes på indersiden af computerens
> skærm, så går det selvfølgelig hurtigere når der kun skal
> sprøjtes én og ikke to striber. Det er logik for perlehøns.
>

ROFL :p

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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Martin Larsen (22-01-2009)
Kommentar
Fra : Martin Larsen


Dato : 22-01-09 16:33

Dan Storm wrote:

> heredoc syntaksen umuliggør pæn og struktureret kode.
> Afslutning af heredoc i PHP skal foregå uden forudgående tegn, hvilket
> ødelægger min struktur:

Det er korrekt. Jeg bruger det da også kun hvor der er en masse
indlejrede ting og sager som vil være unødigt kompliceret at lave uden.

Martin

Soren Parbo (26-01-2009)
Kommentar
Fra : Soren Parbo


Dato : 26-01-09 22:14

Dan Storm wrote:
> Martin Larsen skrev:
>> Ikke fordi den lille bitte hastighedsgevinst ved at bruge enkelte

> Hvilken hastifhedsgevinst? Du vinder absolut ingenting ved at benytte
> single quotes, tværtimod.
> <url: http://err0r.dk/quoteTest.php>
>
Sådan noget relativt meningsløst noget som hvad der er bedst double
quotes (") eller single quotes (') interesserer mig desværre.
Jeg har spildt mange timer, fordi jeg ikke har indarbejdet en konsekvens
i brugen.

Jeg tror, ikke man kan påvise en hastighedsforskel når vi er inde i php.
Jeg går udfra, at php benytter noget der ligner en ascii værdi - så det
er ligemeget, hvormeget tegnet "blækmæssigt" fylder her.

Dan's: <url: http://err0r.dk/quoteTest.php> holder ikke vand.
Du har glemt at sætte "$start = microtime();" før "stringthree" -
gennemløbet i din php-kode.
Dit resultat for single quotes gennemløbet er derfor adderet med double
quotes med variabel.
Endvidere betyder det (på min pc) noget i tid, hvilket gennemløb der
ligger først.

Vh Søren

Dan Storm (27-01-2009)
Kommentar
Fra : Dan Storm


Dato : 27-01-09 10:13

Soren Parbo skrev:
> Sådan noget relativt meningsløst noget som hvad der er bedst double
> quotes (") eller single quotes (') interesserer mig desværre.
> Jeg har spildt mange timer, fordi jeg ikke har indarbejdet en konsekvens
> i brugen.

Det var også min oprindelige pointe, men sidesporet er jo netop endt
her. Om man bruger det ene eller det andet er en smagssag, men med en
konsekvent arbejdsgang letter det på dit tidsforbrug og på
overskueligheden af din kode - som du også selv påpeger.

> Jeg tror, ikke man kan påvise en hastighedsforskel når vi er inde i php.
> Jeg går udfra, at php benytter noget der ligner en ascii værdi - så det
> er ligemeget, hvormeget tegnet "blækmæssigt" fylder her.

Det eneste man kan konkludere på en tidstest af sådan en streng er at du
ikke bør gå op i tidsforbruget.

>
> Dan's: <url: http://err0r.dk/quoteTest.php> holder ikke vand.
> Du har glemt at sætte "$start = microtime();" før "stringthree" -
> gennemløbet i din php-kode.

Hermed rettet. Men det ændrer ikke på det faktum at det er spild af tid
at gå op i 'hastighedsgevinst' men så små marginaler.

> Endvidere betyder det (på min pc) noget i tid, hvilket gennemløb der
> ligger først.

På min server betyder det intet. Oprindeligt lagde testen i tre seperate
filer.

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

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

Mads Lie Jensen (22-01-2009)
Kommentar
Fra : Mads Lie Jensen


Dato : 22-01-09 09:01

On 21 Jan 2009 19:48:32 GMT, Frank <frank@neergaard.dk> wrote:

>Min fejl er, at jeg ikke definerer teksten rigtigt, - således at den er "klar"
>til at modtage variablerne.

Som Dan siger, det virker ikke som du tror det bør virke.

Du kan kigge på eval() ( http://dk.php.net/eval )som udfører en
tekststreng som om det var php-kode og på den led løse dit problem.

Men pas på - hvis ikke du er forsigtig har du pludselig et gabende
sikkerhedshul.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Frank (22-01-2009)
Kommentar
Fra : Frank


Dato : 22-01-09 10:09

Forstår eval() kan fyre et php scrips af og fandt så ud af at preg_replace nok er
bedre:

$str = "'test string'";
print "Before: $str\n";
$str = preg_replace("/^'/","\"",$str);
$str = preg_replace("/'$/","\"",$str);
print "After: $str\n";

Before: 'test string'
After: "test string"

mvh,

Frank


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin Larsen (22-01-2009)
Kommentar
Fra : Martin Larsen


Dato : 22-01-09 10:20

Hej Frank

> Hvorfor kan $CFG["w3"] ikke anvendes?

Fjern anførselstegnene i klammerne helt og mellemrummet efter $CFG (der
er mellemrum i dit eksempel først i indlægget).

Så ser det hele således ud og virker fint:

$w1 = "Obama";
$w2 = "www.tv4.dk";
$CFG["w3"] = "www.cnn.com";

$test = "w1: $w1,<br>
w2: <a href=\"$w2\">$w2</a><br>
w3: $CFG[w3]";

echo $test;

Hilsen
Martin

Frank (22-01-2009)
Kommentar
Fra : Frank


Dato : 22-01-09 13:55

Mission completed!

Tak for hjælpen,

Frank

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Thomas Lindgaard (24-01-2009)
Kommentar
Fra : Thomas Lindgaard


Dato : 24-01-09 23:36

On Thu, 22 Jan 2009 09:09:16 +0000, Frank wrote:

> Forstår eval() kan fyre et php scrips af og fandt så ud af at
> preg_replace nok er bedre:
>
> $str = "'test string'";
> print "Before: $str\n";
> $str = preg_replace("/^'/","\"",$str); $str =
> preg_replace("/'$/","\"",$str); print "After: $str\n";
>
> Before: 'test string'
> After: "test string"

Den her kunne jeg godt tænke mig en forklaring på... hvad vil du opnå ved
at skifte første og sidste quote ud?

Jeg kan stadig ikke se, at det skulle hjælpe dig til at få indsat værdien
af variable i strengen...

--
Mvh.
/Thomas

Søg
Reklame
Statistik
Spørgsmål : 177458
Tips : 31962
Nyheder : 719565
Indlæg : 6408169
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste