PHP-fundering, Alternativa titles, define?

Permalänk
Medlem

PHP-fundering, Alternativa titles, define?

Lyckas inte lösa detta.

I min header har jag en kodsnutt innanför Title-taggarna.

<?php if (defined ('TITLE')) { print TITLE; } else { print 'Defaulttitle'; } ?>

Sen på de olika sidorna, t.ex. contact.php har jag...

<?php define ('TITLE', 'Kontaktsidan');?>

Men när det gäller dynamiskt content är det värre.
T.ex. sida.php?kid=1 , 2, 3 o.s.v.

Så jag skapade en fil som heter titles.inc.php bara, och i den tänkte jag sätta alla titles beroende på vilket KID det är.
Testade med denna lite snabbt, men den reagerar på alla KID och inte bara 1;an

if ($kid =1) { define ('TITLE', 'Visar title för id 1'); } else { define ('TITLE', 'Defaulttitle'); }

Det finns antagligen bättre sätt att göra det på. Dessutom lirar ju bara mitt exempel ovan bara med 1 av 20 olika
Jag är lite novis när det gäller PHP, så tipsa mig gärna om en vettig lösning

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Hedersmedlem
Skrivet av HCP:

if ($kid =1) {

Du får skriva == för att få jämförelseoperatorn: enkelt =-tecken är tilldelningsoperatorn. Just nu frågar du "om det går att sätta $kid till värdet 1, gör då...", när du vill fråga "om $kid är satt till 1, gör då...".

För att hantera fler än ett fall, titta på switch-konstruktionen.

Du visar kanske inte all kod ovan, men var medveten om att som standard så accessas URL-parametrar genom `$_GET`-vektorn, t ex `$_GET['kid']` och inte bara `$kid`, om inte `register_globals` är satt till `on` i konfigurationen, vilket brukar avrådas starkt ifrån av bl a säkerhetsskäl.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av phz:

Du får skriva == för att få jämförelseoperatorn: enkelt =-tecken är tilldelningsoperatorn. Just nu frågar du "om det går att sätta $kid till värdet 1, gör då...", när du vill fråga "om $kid är satt till 1, gör då...".

För att hantera fler än ett fall, titta på switch-konstruktionen.

Aha, där var trubblet! Tack!

Tips på hur jag kan utöka den if-satsen att innehålla flera ?
Alltså, om kid == 1 gör såhär, eller om kid == 2 gör såhär, annars såhär.

Har inte kommit så långt i lärandet än

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Hedersmedlem
Skrivet av HCP:

Aha, där var trubblet! Tack!

Tips på hur jag kan utöka den if-satsen att innehålla flera ?
Alltså, om kid == 1 gör såhär, eller om kid == 2 gör såhär, annars såhär.

Har inte kommit så långt i lärandet än

Se manualen för info om switch-konstruktionen. Deras exempel är rätt exakt vad du ska göra.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av phz:

Se manualen för info om switch-konstruktionen. Deras exempel är rätt exakt vad du ska göra.

Kalas! nu fungerar det prima!

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem
Skrivet av phz:

Se manualen för info om switch-konstruktionen. Deras exempel är rätt exakt vad du ska göra.

if ($kid) define ('TITLE', 'Visar title för id $kid'); else define ('TITLE', 'Defaulttitle');

Permalänk
Medlem

Vi tar det vidare på samma spår, stötte på mer trubbel
Ovanstående hanterat KID (kategorier), denna är för TID, detta är data direkt ur databasen som innehåller 20.000+ namn, helt omöjligt att speca upp i en fil med titles, då den dessutom ökar med cirka 10 om dagen

Begränsar det till denna rad för att förenkla mitt problem.

define ('TITLE', 'Detta är titeln');

I denna behöver jag få in en sak som hämtats ur databasen, på annat ställe (rubriken) kör jag

<?php echo $rows_tid['name'];?>

Det jag vill ha är att titeln blir: Detta är titeln för $rows_tid['name']
Har testat lite olika saker men lyckas inte träffa rätt, hur echo;ar jag ut något i define? eller går det ens?

Hint me

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem
Skrivet av HCP:

Vi tar det vidare på samma spår, stötte på mer trubbel
Ovanstående hanterat KID (kategorier), denna är för TID, detta är data direkt ur databasen som innehåller 20.000+ namn, helt omöjligt att speca upp i en fil med titles, då den dessutom ökar med cirka 10 om dagen

Begränsar det till denna rad för att förenkla mitt problem.

define ('TITLE', 'Detta är titeln');

I denna behöver jag få in en sak som hämtats ur databasen, på annat ställe (rubriken) kör jag

<?php echo $rows_tid['name'];?>

Det jag vill ha är att titeln blir: Detta är titeln för $rows_tid['name']
Har testat lite olika saker men lyckas inte träffa rätt, hur echo;ar jag ut något i define? eller går det ens?

Hint me

Testa så här:

define ('TITLE', $rows_tid['name']);

Permalänk
Medlem

Ett litet följdproblem i samma anda, jag har en snutt som hämtar ID ifrån url
t.ex. kontakt.php?id=1
Men jag har även inlänkar som ser ut som kontakt.php?cid=1 , då jag fimpat massa gamla format som landar i denna fil

För att slippa ha dubbla uppsättningar av all kod, hur hanterar man "eller" ?
T.ex.

$etid = $_GET['id'];

Det är formatet jag vill ha.

Men, hur hantera alla som kommer via CID, kan jag skriva om dem eller bygga ut ovan php-kod att reagera på båda ?

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem

Någon som kan peka mig i rätt riktning på ovanstående ?

Testade med följande

if (isset($_GET['id']) && $_GET['cid'])

Men den kräver ju att båda finns, hur göra för att hantera ID eller CID ?

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem
Skrivet av HCP:

Ett litet följdproblem i samma anda, jag har en snutt som hämtar ID ifrån url
t.ex. kontakt.php?id=1
Men jag har även inlänkar som ser ut som kontakt.php?cid=1 , då jag fimpat massa gamla format som landar i denna fil

För att slippa ha dubbla uppsättningar av all kod, hur hanterar man "eller" ?
T.ex.

$etid = $_GET['id'];

Det är formatet jag vill ha.

Men, hur hantera alla som kommer via CID, kan jag skriva om dem eller bygga ut ovan php-kod att reagera på båda ?

Vill du sätta $etid beroende på vilken av $_GET['id'] och $_GET['cid'] som är satta? Då bör följande fungera.

$etid = (isset($_GET['id'])) ? $_GET['id'] : $_GET['cid'];

Du kan läsa mer om den ternära operatorn här: http://php.net/manual/en/language.operators.comparison.php

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem
Skrivet av ToJa92:

Vill du sätta $etid beroende på vilken av $_GET['id'] och $_GET['cid'] som är satta? Då bör följande fungera.

$etid = (isset($_GET['id'])) ? $_GET['id'] : $_GET['cid'];

Du kan läsa mer om den ternära operatorn här: http://php.net/manual/en/language.operators.comparison.php

Gah, hur kunde jag missa den sidan. Kanon!
Tack för länken (och exemplet), nu kan jag halta vidare i php-djungeln

Visa signatur

Mitt modermodem är trimmat!