login  Naam:   Wachtwoord: 
Registreer je!
 Forum

define vraag (Opgelost)

Offline qubus - 27/12/2011 12:05 (laatste wijziging 27/12/2011 12:07)
Avatar van qubusLid Hallo,

Ik heb een website die in meerdere talen kan worden weergegeven. Daarvoor gebruik ik taalbestanden, waarin ik woorden definieer. Dit doe ik als volgt:
  1. define('LANG_LOG_UIT', 'Log uit');

Afhankelijk van de gekozen taal include ik het juiste taalbestand.
In de code die de pagina genereert gebruik ik het dan als:
  1. echo LANG_LOG_UIT;


Nu heb ik een menu voor de beheerder in een database staan. Daar heb ik een veld 'omschrijving' welke VARCHAR(50) is. En daar sla ik dan bijvoorbeeld LANG_NIEUWE_PAGINA_AANMAKEN in op. Als ik dit uit de database haal en echo, geeft dat letterlijk die tekst. Ik heb nu de volgende oplossing:
  1. if ($get['omschrijving'] == 'LANG_NIEUWE_PAGINA_AANMAKEN') { $end = str_replace($get['omschrijving'],LANG_NIEUWE_PAGINA_AANMAKEN, $get['omschrijving']); };

Als ik dan $end echo, gaat het wel goed.

Het nadeel is dat als ik een item toevoeg in de database, dat ik dat dan ook moet doen in de php code van het beheerdersmenu.

Iemand een andere oplossing, waardoor ik de code zelf niet steeds hoef aan te passen?

Alvast bedankt.

5 antwoorden

Gesponsorde links
Offline WouterJ - 27/12/2011 13:33
Avatar van WouterJ HTML gevorderde Je zou kunnen werken met PHP.net: eval, maar dit is zeer onveilig. Een andere oplossing zou ik eigenlijk niet weten.
Offline qubus - 27/12/2011 15:31
Avatar van qubus Lid Dank, daar heb ik wat aan.

Citaat:
dit is zeer onveilig


Ook als het een beveiligde pagina is, waar alleen beheerders op kunnen als ze zijn ingelogd?
Offline WouterJ - 27/12/2011 15:51 (laatste wijziging 27/12/2011 15:52)
Avatar van WouterJ HTML gevorderde
"Qubus" schreef:
Ook als het een beveiligde pagina is, waar alleen beheerders op kunnen als ze zijn ingelogd?

Ja, het ligt namelijk niet aan de pagina, maar aan de string die in de eval functie gaat. De eval functie zet de hele string om in PHP code. Dus bijv. deze string:
  1. $str = 'echo "Hello World"';
  2. # Nu gebeurd er nog niks.
  3.  
  4. eval($str); // Nu wordt er Hello World geëchoed

En dit werkt dus ook met mysql verbindingen. Je kan dus gewoon hele queries uitvoeren die in een string staan:
  1. $str = '$result = mysql_query("SELECT * FROM users");
  2. while( $row = mysql_fetch_assoc($result) )
  3. {
  4. var_dump($row);
  5. }';
  6. #Deze code kan nu nog geen kwaad -> het staat immers in een string
  7.  
  8. eval($str); // Nu wordt er een hele query uitgevoerd en zullen alle gegevens uit de tabel users op de pagin staan


Je merkt dus wel dat je goed moet controleren wat er in de string staat voordat je de eval functie eroverheen zet.
Bedankt door: qubus
Offline qubus - 27/12/2011 15:59
Avatar van qubus Lid Oke, dank je dat maakt veel duidelijk.
Dus als ik in mijn geval bijvoorbeeld controleer of de string 'LANG_' bevat en hem alleen dan door de eval haal dan kan er niets misgaan lijkt me.
Offline WouterJ - 27/12/2011 16:13
Avatar van WouterJ HTML gevorderde Ja, je kan zoiets maken:
  1. $rgx = '/^LANG_([A-Z]*?(_|))*?$/';
  2.  
  3. if( preg_match($rgx, $str) )
  4. {
  5. eval($str);
  6. }
  7. else
  8. {
  9. // Handel fout af
  10. }

Hierbij moet de string zo opgebouwd zijn:
Het moet beginnen met LANG_
En daarna mogen het alleen de hoofdletters A-Z zijn met daarachter een _ of niks. Totaan het einde van de string.
Bedankt door: qubus
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s