[php/mysql] dynamische variabele opvragen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • assass
  • Registratie: November 2002
  • Laatst online: 31-07-2024

assass

Salon GoT'er

Topicstarter
Een dynamische php site met meerdere talen: uk, nl en de. Ik wil meerdere varianten van omschrijvingen in de database stoppen, allemaal op 1 row, 1 table. Bijv. omschrijving_nl omschrijving_uk en omschrijving_de.

Deze uit de database vissen wil ik gewoon doen met een mysql_fetch_array en dan bijv. door een session voor de taal in te stellen te vragen om: $fetch[omschrijving_nl] $fetch[omschrijving_uk] of $fetch[omschrijving_de]

Allemaal heel basic, maar ik kan niet zomaar doen:

echo $fetch[omschrijving_$_SESSION[language]]

En wil ook niet met allemaal if's gaan werken.

Kortom: hoe vraag ik die waarde uit die database. Hoe creëer ik die dynamische variabele?

Acties:
  • 0 Henk 'm!

  • IntToStr
  • Registratie: December 2003
  • Laatst online: 21:06
Umm, je bedoelt:
PHP:
1
echo $fetch["omschrijving_" . $_SESSION["language"]];


:?

Acties:
  • 0 Henk 'm!

  • DizzyVacation
  • Registratie: November 2006
  • Niet online
Ik denk dat je dit bedoeld:
code:
1
$fetch['omschrijving_' . $_SESSION['language']]


net te laat...

[ Voor 16% gewijzigd door DizzyVacation op 19-03-2007 11:46 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Als je je warnings iets hoger had staan had je gezien dat $fetch[omschrijving_nl] een dikke waarschuwing op zou leveren. omschrijving_nl is immers geen constante, maar zou een string moeten zijn. Hoe het hoort is $fetch['omschrijving_nl'] (of met dubbele quotes, maar dat maakt niet zoveel uit).

Dit gezien hebbende neem ik aan dat wel duidelijk is hoe je deze string nu omzet naar die dynamische string. Hint: met . plak je twee strings aan elkaar.


....hmmm.. Rijkelijk te laat......

[ Voor 4% gewijzigd door Janoz op 19-03-2007 11:48 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Wat ga je overigens doen als er een taal bijkomt?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • GoodspeeD
  • Registratie: April 2002
  • Laatst online: 18-09 16:13
Als ik het goed begrijp, wil je dus gewoon een multilanguage stukje software maken.

Als dat zo is, vind ik het een aparte constructie. Ik zou liever een apart stukje maken dat zorgdraagt voor de vertaling. Een class Translator ofzo (als je tenminste met PHP 5 werkt). Dan zou ik daar gewoon keihard de queries inzetten voor de verschillende kolommen, in plaats van dat dynamisch te doen. En dan een member waarin je bijhoudt welke taal er actief is. En dan gewoon je messages een nummer geven en ophalen aan de hand van een nummer.

iets als

code:
1
echo "Hallo wereld!";


komt er dan zo uit te zien:
code:
1
echo translator.GetMessage(1);

Er vanuit gaande dat je translator juist geinstantieeerd hebt natuurlijk. Weet niet of die syntax PHP-compatible is, maar goed: you get the point.

Je werkt op die manier dus wel met een grote switch in je class als je veel talen hebt, maar uiteindelijk wordt je code er wel duidelijker op. Je hoeft niet bij elk bericht die fetch te gaan typen. Misschien begrijp ik niet goed wat je bedoelt, maar als dat wel zo is, zou ik dit eens overwegen.

Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Je zou aan het begin van je script een array kunnen vullen met de taal:

<?php
include $_SESSION['sLanguage'] . '.php';

echo $aLanguage['register']; // ofzo
?>


Vervolgens maak je bestanden als nl.php, en.php, de.php, etc. en zorg je ervoor dat die sessie wordt ingevuld, default met bijv. Nederlands. In die php-file maak je dus een array $aLanguage met als key de omschrijving en als value wat het moet opleveren.

[ Voor 15% gewijzigd door Tanuki op 19-03-2007 14:12 ]

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
l0c4lh0st schreef op maandag 19 maart 2007 @ 14:11:
Vervolgens maak je bestanden als nl.php, en.php, de.php, etc. en zorg je ervoor dat die sessie wordt ingevuld, default met bijv. Nederlands. In die php-file maak je dus een array $aLanguage met als key de omschrijving en als value wat het moet opleveren.
Hij wil een database gebruiken. Ga hem dan alsjeblieft niet aanraden losse files te gebruiken op zo'n manier :+

Overigens ben ik het met GoodspeeD eens dat het good practise is hier een aparte vertaler voor te gebruiken. Een IMHO nette aanpak zou zijn om bijvoorbeeld een aparte class of classinterface te maken waarin je de taal specificeerd en die gebruiken als interface tussen je gegevensbron en displaylogic - zodat je simpelweg naar specifieke gegevens kan vragen zonder je ooit zorgen te hoeven maken over de taal, en zodat je ook nog eens simpel later nieuwe talen kan toevoegen. Een soort DBAL voor taal dus eigenlijk :)

Hoe zoiets er dan uit zou kunnen zien:
PHP:
1
2
3
$interface = new interface;
$interface -> setLanguage('english');
$interface -> getPage('welcome');


Nog netter zou je de interface constructor de sessie kunnen laten bekijken en zelf de taal kunnen zoeken, dan heb je er helemaal geen omkijken meer naar. Moet je natuurlijk wel nog steeds per member opletten de juiste gegevens uit je database te halen, maar dat zou nu geen probleem moeten zijn :)

offtopic:
Er zijn mensen die vinden dat je members als getPage zonder get moet schrijven. To those I say: pfah! :+

[ Voor 23% gewijzigd door FragFrog op 19-03-2007 16:03 ]

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1