Unika (auto)titlar genom php-funktioner som $GET och echo?

Permalänk
Inaktiv

Unika (auto)titlar genom php-funktioner som $GET och echo?

Tjena.

Står inför ett litet problem nu när jag håller på att ordna upp en hemsida (tämligen grön på kodande).

Sidan är uppbyggd genom diverse php-includes, varav <head>-sektionen ligger i head.php.
Där ligger också <title>-taggen och försöker hitta någon smart (enkel) lösning att autogenerera unika titlar för varje sida genom att markera exempelvis en rubrik eller fler i själva innehåller på sidan.

Googlat runt en del och börjar förstå att det lutar mot något likt följande att ha i head.php:
<title><?php echo $_GET['kw'] . ' - Custom text here'; ?></title> eller
<title><?php $title = "Custom text here - "; print $title; ?></title>

Blir dock inte klok på hur jag markerar upp önskad text i dokumentet.
<? echo $kw; Önskad text här ?> <- Känns som att jag är nära men ändå galet fel.

Är väl alltså framför allt här jag behöver er hjälp och förslag på lösningar/kodsträngar.

Tack på förhand.

Permalänk
Medlem
Skrivet av anon155364:

Tjena.

Står inför ett litet problem nu när jag håller på att ordna upp en hemsida (tämligen grön på kodande).

Sidan är uppbyggd genom diverse php-includes, varav <head>-sektionen ligger i head.php.
Där ligger också <title>-taggen och försöker hitta någon smart (enkel) lösning att autogenerera unika titlar för varje sida genom att markera exempelvis en rubrik eller fler i själva innehåller på sidan.

Googlat runt en del och börjar förstå att det lutar mot något likt följande att ha i head.php:
<title><?php echo $_GET['kw'] . ' - Custom text here'; ?></title> eller
<title><?php $title = "Custom text here - "; print $title; ?></title>

Blir dock inte klok på hur jag markerar upp önskad text i dokumentet.
<? echo $kw; Önskad text här ?> <- Känns som att jag är nära men ändå galet fel.

Är väl alltså framför allt här jag behöver er hjälp och förslag på lösningar/kodsträngar.

Tack på förhand.

<?php $title = "Sidans titel här"; echo("<title>".$title."</title>\n"); ?>

Sen kan du ju välja att hämta in sidans titel från en medsänd variabel t.ex:

$title = $_GET['variabel'];

Snabbt, enkelt och inte vidare snyggt men borde fungera.
Sen finns det ett gäng olika sätt att printa det hela beroende på krav, men det ovan är tämligen pedagogiskt om än inte effektivt.

Visa signatur

Xbox Live - Firaphex
Jag har inte alltid rätt, men jag utgår från det tills jag ser bevis på annat. Citera för svar
2008-06-18, Dagen då integriteten ställdes tå mot tå med maktmissbruket och förlorade.

Permalänk
Inaktiv

Halloj och tack för svaret!

Har satt mig in lite bättre i php nu och testat olika varianter av en $title-funktion.
Problemet ligger i att det verkar inte bättre än att $title = $_GET['variabel']; måste skrivas innan <?php include("../includes/head.php"); ?> för att titeln ska laddas.

Finns det något sätt att komma runt det, dvs en möjlighet till att lägga $title var som helst på sidan.

Sidan ser (enkelt sagt) ut såhär:

<?php include("../includes/head.php"); ?> //all metadata och länkning av skript
<div id="wrapper">
<img src="http://www.sweclockers.com/forum/10-programmering-och-digital..." />

Rubrik //Det är här jag vill att sidans titel ska hämtas genom en variabel så att jag och mina medarbetare slipper skriva både titel och rubrik på varje sida utan rubriken ska vara detsamma som sidans titel.

Text och innehåll

<?php include("../includes/footer.php"); ?>

Permalänk
Medlem
Skrivet av anon155364:

Halloj och tack för svaret!

Har satt mig in lite bättre i php nu och testat olika varianter av en $title-funktion.
Problemet ligger i att det verkar inte bättre än att $title = $_GET['variabel']; måste skrivas innan <?php include("../includes/head.php"); ?> för att titeln ska laddas.

Finns det något sätt att komma runt det, dvs en möjlighet till att lägga $title var som helst på sidan.

Sidan ser (enkelt sagt) ut såhär:

<?php include("../includes/head.php"); ?> //all metadata och länkning av skript
<div id="wrapper">
<img src="http://www.sweclockers.com/forum/10-programmering-och-digital..." />

Rubrik //Det är här jag vill att sidans titel ska hämtas genom en variabel så att jag och mina medarbetare slipper skriva både titel och rubrik på varje sida utan rubriken ska vara detsamma som sidans titel.

Text och innehåll

<?php include("../includes/footer.php"); ?>

Variabeln $title måste definieras innan du kan använda den.
Alltså måste $title = $_GET['variabel'] stå innan include('sida').
Du kan även lägga det i samm sats som du använder för inkluderingen i stil med:

<?php $title=$_GET['variable'];include('page'); ?>

Alternativt kan du lägga in det direkt i sidan som du inkluderar. Oavsett vad så kan du inte använda en variabel innan du konstaterat vad denna variabel ska bestå av. Detta är dock inget problem. PHP körs på serversidan innan det hela skickas till klienten så att ha en PHP-sats innan man inkluderar headers m.m. gör absolut ingenting.

Exempel:

<?php $title = "exempeltitel"; $text = "La di dum dej, exempeltext åt mej!"; ?> <html> <head> <title><?php exho($title); ?></title> </head> <body <?php exho($text); ?> </body> </html>

Detta skulle när webläsaren får informationen från servern se ut såhär:

<html> <head> <title>exempeltitel</title> </head> <body La di dum dej, exempeltext åt mej! </body> </html>

Alltså allting mellan <?php och ?> taggarna skickas aldrig till webläsaren så länge man inte själv via t.ex. echo()-funktionen sagt att det ska skickas med någonting där. Så att ha kod innan eller mellan html-taggar är inte ett problem.

Visa signatur

Xbox Live - Firaphex
Jag har inte alltid rätt, men jag utgår från det tills jag ser bevis på annat. Citera för svar
2008-06-18, Dagen då integriteten ställdes tå mot tå med maktmissbruket och förlorade.

Permalänk
Inaktiv

Alright! Tackar så mycket för hjälpen, ska kika på't. ( :

Permalänk
Medlem
Skrivet av anon155364:

<title><?php echo $_GET['kw'] . ' - Custom text here'; ?></title> eller
<title><?php $title = "Custom text here - "; print $title; ?></title>

Ja, besöker man nu din sida låt säga den är döpt till index.php.
http://din-host.what/index.php
Och nu har du en $_GET fri att använda ur ditt script.
$_GET['kw']; för att vara exakt..

så om jag besöker http://din-host.what/index.php?kw=Hejsan

Så kommer nu din sida ha <title>hejsan - Custom text here</title> i htmlkoden.

Så vad du bör göra är att alltid, när det kommer till indata att validera. Så att inga förbjudna tecken kan användas. Ett litet simplet exempel.

Vad händer om vi nu besöker din url? med följande.
http://din-host.what/index.php?kw=<script>alert("Hejsan");</s...

Nu frågar du säkert hur skyddar man sig mot detta (säkerhetsrisk) problem?
Det handlar om att att blocka vissa tecken i detta fall äre html/js du behöver blockera för att skydda.

Det gör du enkelt och simpelt genom att använda php funtionen htmlspecialchars();
finns andra sett, men detta är den simplaste.

fullständigt php kod för din index.php skulle då vara
<title><?php echo htmlspecialchars($_GET['kw']) . ' - Custom text here'; ?></title>
Skulle jag nu besöka som tidigare nämt,
http://din-host.what/index.php?kw=<script>alert("Hejsan");</s...
så skulle nu inte javascriptet kunna köras. och därmed skulle det bara bli hexkod för motsvarande tecken som < > " " medans orden "script", "alert", "hejsan" kommer fungera som det ska.

Så en grundregel du ska tänka på när det är möjlighet för indata att skrivas in att alltid validera/escape:a tecken.

Lycka till i fortsättningen, min första forumpost btw

Om du undrar något så äre bara att hojta till.

Permalänk
Medlem
Skrivet av sweacker:

Så en grundregel du ska tänka på när det är möjlighet för indata att skrivas in att alltid validera/escape:a tecken.

Men i många fall (i synnerhet detta) är det mycket lättare att istället begränsa indatan. Besökare har ingen anledning att kunna ändra titeln själva (vilket de kan med den här metoden). Att begränsa indatan är enkelt:

<?php $titlar = Array("hem" => "Förstasidan", "annat" => "Andra saker"); $gp = (empty($_GET['p']) || !array_key_exists($_GET['p'], $titlar)) ? 'hem' : $_GET['p']; ?> <title>Din sida – <?php echo $titlar[$gp]; ?></title>

Besöker du nu index.php?p=annat, så kommer "Andra saker" visas i titeln. Besöker du någon random sida, typ index.php?p=tyskland, så kommer den att defaulta till "Förstasidan". Gör du likadant med din include-sats så har du ett fullständigt synkroniserat och (i princip) 100% säkert system.

Permalänk
Medlem
Skrivet av You:

Men i många fall (i synnerhet detta) är det mycket lättare att istället begränsa indatan. Besökare har ingen anledning att kunna ändra titeln själva (vilket de kan med den här metoden). Att begränsa indatan är enkelt:

<?php $titlar = Array("hem" => "Förstasidan", "annat" => "Andra saker"); $gp = (empty($_GET['p']) || !array_key_exists($_GET['p'], $titlar)) ? 'hem' : $_GET['p']; ?> <title>Din sida – <?php echo $titlar[$gp]; ?></title>

Besöker du nu index.php?p=annat, så kommer "Andra saker" visas i titeln. Besöker du någon random sida, typ index.php?p=tyskland, så kommer den att defaulta till "Förstasidan". Gör du likadant med din include-sats så har du ett fullständigt synkroniserat och (i princip) 100% säkert system.

Japp, mycket bra. Jag ville mest påpeka att $_GET inte vore så bra att ha sådär utan några åtgärder som helst. Men som sagt din lösning är bättre. Han kanske fick tips om hur htmlspecialchars(); kan komma till hands vid andra sammanhang, som t.ex en kommentar-funktion för besökarna.