Hvordan skal denne koden være?

Mr Vest

Sjefen over alle sjefer!
Jeg sitter her da med noe småtteri med php. Jeg har siste tiden brukt litt tid på og lære meg dette språket, men jeg er nå smått sjokkert hvorfor ting skal være så knotete til tider.



Her er en del av koden min:

PHP:
<?
if($_SESSION['loggedin']==1)
{
print"
<textarea onclick='this.focus();this.select()' readonly>[a href='$url'>Det var en gang en skikkelig drittkul link</a></textarea>
";
}
?>

Den koden funker ikke. Den gir meg følgende feilmelding:

Parse error: syntax error, unexpected '<' in /home/kontonavn/public_html/fil.php on line XX. XX = linjen jeg har med textarea i kodesnutten over.

Kan noen av dere være så hyggelig og fortelle meg hva jeg faktisk må endre hele den text-arealinja til for at det ike skal komme en slik "parse error" shitt?
 

michaelo

Medlem
Heisann,

Kan faktisk ikke se noe feil på den linja der... Dette et er 100% slik det står i fila di? Hvilken PHP-versjon bruker du?
 

Mr Vest

Sjefen over alle sjefer!
PHPversjon: 5.2.9..

Det hele fungerer bra dersom jeg kutter ut hele textarea og heller f.eks bare skriver (Det var en gang blablabla.) Det er kun når jeg legger inn akkurat dette textarea det ikke vil fungere. Det er derfor jeg er rimelig sikker på at noe galt må det være med akkurat den linja. :)
 

michaelo

Medlem
Hehe, det høres ut som det er den som skyldig da ja. For testingens skyld, forsøk med denne:
Kode:
printf('<textarea onclick="this.focus();this.select()" readonly>[a href="%s">Det var en gang en skikkelig drittkul link</a></textarea>', $url);
 

michaelo

Medlem
mkander: både print og echo kan kalles både som funksjoner og som språk-konstrukter, og har ikke (ihvertfall ikke t.o.m versjon 5.2.6 som jeg kjører lokalt) vært noe problem ved å ikke ha mellomrom mellom print/echo og strengen (selv ikke som variabel). Men har ikke .2.9 til testing selv så skal ikke si noe helt sikkert der.
 
mkander, ikke nødvendigvis:
php.net skrev:
print() is not actually a real function (it is a language construct) so you are not required to use parentheses with its argument list.

Atle: Jeg forsøkte å laste opp koden din til egen server, og da fungerte den helt feilfritt. Det eneste jeg kan tenke meg at kanskje er problemet, er at du kanskje har lagret koden på en eller annen måte som gjør at den ikke godtar manuelle linjeskift inne i stringer. Aner ikke om det er det som faktisk er problemet, men hvis det er tilfelle klarer du å løse dette ved å erstatte

Kode:
print" 
<textarea onclick='this.focus();this.select()' readonly>[a href='$url'>Det var en gang en skikkelig drittkul link</a></textarea> 
";

med

Kode:
print"<textarea onclick='this.focus();this.select()' readonly>[a href='$url'>Det var en gang en skikkelig drittkul link</a></textarea>";
 

Mr Vest

Sjefen over alle sjefer!
Takk skal dere alle sammen ha for gode svar. Ingen av svarene var direkte riktig, men jeg det er min feil. Jeg utelukket noe nødvendig informasjon i spørsmålet mitt for at det skulle være mulig og gi et 110% riktig svar.

Saken var at jeg i koden hadde ikke bare $url, men f.eks $url['forhandler'], og det var "['forhandler']" som gjorde at jeg ikke kunne bruke den direkte i selve "print" liksom. Derfor måtte jeg heller ende opp med følgende kode for at det skulle fungere:

PHP:
if($_SESSION['loggedin']==1)
{
$forhandler = $url['forhandler'];
print"
<textarea onclick='this.focus();this.select()' readonly>[a href='$forhandler'>Det var en gang en skikkelig drittkul link</a></textarea>
";
}

Slik ville det nå hvertfall fungere for meg. Jeg hadde nok stresset lenge med og finne løsninga her om det ikke var for svarene her i tråden. Takk skal dere ha, ryktepoeng kommer så absolutt. Og dere, - Jeg vet jeg er dyktig på og forklare ting jeg ikke kan. :D
 
Sist redigert:

Nextri

Rebel
jeg ville personlig skrevet det på følgende måte:
PHP:
if($_SESSION['loggedin']==1) 
{ 
echo '<textarea onclick="this.focus();this.select()" readonly><a href="'.$url['forhandler'].'">Det var en gang en skikkelig drittkul link</a></textarea> 
'; 
}
 

Mr Vest

Sjefen over alle sjefer!
Hva er den store forkjellen på akkurat echo og print da? Siden du ville skrevet det på den måten, nextri. ? :)
 

Nextri

Rebel
Hva er den store forkjellen på akkurat echo og print da? Siden du ville skrevet det på den måten, nextri. ? :)

echo er 4 tegn, print er 5. så det tar mindre tid å skrive echo. :) echo er forresten også litt raskere funksjon en print.

bruker også ' istedenfor " rundt strenger, da det er marginalt raskere. Man kan ikke ha variabler i strenger med ', så man må avslutte strengen og bruke punktum for å sette inn variabler for så å begynne strengen igjen. fordelen med det er at variablene får en annen farge, og er lettere å få øye på, og det ser ryddigere ut. I tillegg til at det er raskere siden php ikke trenger å lete etter variabler i hver eneste streng.
 

Pong

Jeg selger sʇɥƃıluʍop :)
Jeg ville skrevet det slik:

if($_SESSION['loggedin'])
echo '<textarea onclick="this.focus();this.select()" readonly><a href="'.$url['forhandler'].'">Det var en gang en skikkelig kul lenk</a></textarea>';

Altså: jeg unngår bruk av { og } med mindre det er flere kommandoer.
Ellers: boolean true = 1, så å teste om $_SESSION['loggedin'] = 1 er å teste om den er true. Og man trenger ikke teste at true = true, så $_SESSION['loggedin'] er egentlig nok (forutsatt at den ikke (mis)brukes på andre måter da).
Hm... men kanskje er det bedre med en isset($_SESSION['loggedin']) fordi mumle mumle mumle ;)

Tenker meg om... egentlig ville jeg ikke skrive slik html, men slik:
&lt;a href= etc...
fordi det er tenkt som inneholdet i textarea-elementet sant?
så en htmlentities hadde vært på sin plass tenker jeg (eller htmlspecialchars).
Samme for readonly-property som skal ha en verdi (så: readonly="readonly").
 
Sist redigert:
Topp