Toon posts:

Undefined Constant

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Het volgende probleem doet zich voor:
Ik heb een bestand waarin ik een aantal constanten definieer
Bij voorbeeld:

define('lbl_password_1', 'password');
define('lbl_password_2', 'wachtwoord');

Vervolgens gebruik ik deze constante in een inlogpagina.
Afhankelijk van de taalkeuze moet constant _1 of _2 getoond worden.

Wanneer ik nu het volgende doe:

f_create_login($language_id)
{
echo lbl_password_.$language_id;
}

Dan krijg ik een foutmelding:

Notice: Use of undefined constant lbl_password_ - assumed 'lbl_password_' in C:\Program Files\xampp\htdocs\xxxx\login.php on line 22
lbl_password_1

Iemand een suggestie?

  • *CableGuy*
  • Registratie: April 2001
  • Laatst online: 09-09 09:28
constant('lbl_password_'.$language_id); gebruiken

[ Voor 42% gewijzigd door *CableGuy* op 18-04-2007 21:41 ]

EOS 300 & EOS 300D + 18-55,28-80,75-300; iBook12", 1.33Ghz, 1Gb, 60Gb, BT+AX; XP3000+, 512Mb, 160Gb+250Gb, NEC 3500A; P3 750, 256Mb, 80Gb; Samsung LE32M61B


Verwijderd

backspaccccee |:(

[ Voor 142% gewijzigd door Verwijderd op 18-04-2007 21:45 ]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
De reden dat het niet werkt is omdat de waarde van een variable pas een betekenis heeft op executie-niveau, niet op het code niveau (meta-niveau).

Oplossing: maak een constant-array en gebruik je $language_id om erin te indexeren.

Daarnaast zijn er tal van andere (en waarschijnlijk betere) oplossingen om multi-language te programmeren met php.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Waarom zou je niet alleen definieren wat je nodig hebt?
PHP:
1
2
3
4
5
6
7
switch($lang) {
    case 'en':
        define('lbl_password', 'password');
        break;
    default:
        define('lbl_password', 'wachtwoord');
}

Hier staan ook nog wat suggesties.

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Ik zou eerder iets als dit doen eigenlijk
PHP:
1
2
3
4
5
6
7
<?php
$lang['en']['password'] = 'password']);
$lang['nl']['password'] = 'wachtwoord']);

/* en dan de taal instellen op 'nl' of 'en' zodat je gewoon dit kunt doen: */
echo $lang[$my_language]['password'];
?>


Eventueel in combinatie met wat glowmouse zegt, de taal bestanden van nl en en in een andere bestand doen en dan dus direct de goede array uitlezen.

[ Voor 22% gewijzigd door Wolfboy op 18-04-2007 21:46 ]

Blog [Stackoverflow] [LinkedIn]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

@optix: Niks mis met de code? Er wordt geprobeerd de constante lbl_password_ te gebruiken en die wordt toch echt niet aangemaakt. Hier wordt vervolgens $language_id geplakt.
Dit is op te lossen door gebruik te maken van variabele variabelen (jawel) en dat kan o.a. met eval of het gebruik van dubbele $'s (dus $$varnaam). Beide zijn extreem ranzig. Je wilt waarschijnlijk een array gebruiken i.p.v. die losse nummers in je constanten.

Optix: snel je post editten he ;)

Edit: en wat wolfboy dus zegt.

[ Voor 7% gewijzigd door Creepy op 18-04-2007 21:53 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07:20

.oisyn

Moderator Devschuur®

Demotivational Speaker

een constante is geen variabele, variabele variabelen gaan dus ook niet werken (er bestaat immers geen $lbl_password_1). Dat moet dan via de constant() functie zoals CableGuy al aangeeft.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Constant('lbl_password_'.$lanuage_id) is de oplossing.
Bedankt CableGuy.

Verder begrijp ik dat de meertaligheid niet optimaal is opgelost. Alle overige pagina's maken gebruik van bestanden per taal die ge-include worden. Bij dit onderdeel geldt echter dat de beide talen naast elkaar getoond moeten worden op de openingspagina, en vervolgens per taal op het moment dat de taal eenmaal gekozen is. Vandaar deze minder fraaie variant.

Bedankt voor de hulp

Topic gesloten, wat mij betreft.

Hannah
Pagina: 1