Het hoofdletter-verschijnsel

  • Onderwerp starter Onderwerp starter mysql
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

mysql

Gebruiker
Lid geworden
28 jan 2012
Berichten
108
Hallo allemaal,

ik ben nu weer eens met mijn website bezig en alles ging goed totdat er zich een vreemd verschijnsel opdeed.
Ik had een talensysteem gemaakt, zodat je mijn site in verschillende talen kon bekijken.
Dit deed het perfect.
Alle vertalingen staan in een database tabel.
Ik had ongeveer een halve maand niet geprogrammeerd aan mijn website.
Toen kwam opeens een raar verschijnsel.
Op mijn website werden opeens een keer van alle vertalingen alleen de eerste letter weergeven.
Dus van de vertaling 'Home' werd alleen de 'H' weergeven en bij 'Account' alleen de 'A'.
Wat is hier het probleem?

Dit is het script van lang.php:
PHP:
<?php
$lang = mysql_query("SELECT * FROM {$dbprefix}website_language");
while ($row = mysql_fetch_array($lang))
{
$lang_id = $row["id"];
$lang_hl = $row["lang_".$_GET["hl"]];
$lang_hl = nl2br($lang_hl);
$LANG["$lang_id"] = $lang_hl;
}
?>
 
In regel 3 zie ik dit :

Code:
while ($row = mysql_fetch_array($lang))

In regel 8 lees ik het volgende :
Code:
$LANG["$lang_id"] = $lang_hl;

PHP maakt geen onderscheid tussen hoofdletters en kleine letters.
Dit betekend dat je de variabele $lang, welke je query bevatte , ergens binnen in je while loop aan het wijzigen bent.

Ik kan mij erg slecht voorstellen dat dit de bedoeling is.
Is het wel je bedoeling dan kan je in ieder geval de meest onverwachte resultaten krijgen.
 
Ik heb $lang, die de query bevatte, veranderd in $sqllang.
$LANG[] heb ik gelaten.
Maar het probleem is er nog steeds.
Hoe moet ik dit oplossen?

Het script nu:
PHP:
<?php
$sqllang = mysql_query("SELECT * FROM {$prefix}website_language");
while ($row = mysql_fetch_array($sqllang))
{
$lang_id = $row["id"];
$lang_hl = $row["lang_".$_GET["hl"]];
$lang_hl = nl2br($lang_hl);
$LANG["$lang_id"] = $lang_hl;
}
?>
 
Ik heb geen mogelijkheid om iets te testen maar ik denk dat je probleem in regel 8 zit, haal daar de dubbelquotes eens tussen de brackets vandaan zoals hier onder:

Code:
$LANG[$lang_id] = $lang_hl;

Verder is de variabele $LANG compleet leeg, niet geinitiaiseerd.
Misschien dat je voor de While-lus deze variabele even kunt declareren, dat is wel zo netjes :

Code:
   $LANG = array();

Nu weet je in ieder geval zeker dat de variabele als array wordt behandelt en niet als string waar een enkel karakter in wordt geplaatst. (het "$lang_id"-ste karakter)
 
Laatst bewerkt:
Nu laat hij alleen de vertaling van de vertaling met het hoogste id.
Maar hij laat hem wel hemaal zien.

PHP:
<?php
$sqllang = mysql_query("SELECT * FROM {$prefix}_website_language");
while ($row = mysql_fetch_array($sqllang))
{
$lang_id = $row["id"];
$lang_hl = $row["lang_".$_GET["hl"]];
$lang_hl = nl2br($lang_hl);
#$LANG[$lang_id] = $lang_hl;
$LANG = array($lang_id=>$lang_hl);
}
#var_dump($LANG);
?>
 
Probeer dit eens:
PHP:
<?php
$LANG = array();

$sqllang = mysql_query("SELECT * FROM {$prefix}_website_language");
while ($row = mysql_fetch_array($sqllang))
{
    $LANG[$row['id']] = nl2br($row['lang_'. $_GET['hl']]);
}

var_dump($LANG);
?>
 
99999999999999999999999999 maal dank, Tha Devil!!!!

Ik denk dat het door $LANG = array(); bovenaan de page komt.
 
Hoe werkt jouw vertaalsysteem uberhaupt? je leest de hele tabel in in een array, dus alle woorden, in alle talen, en daar ga je dan later doorheen loopen om de juiste woorden te vinden ofzo? Dat zou heel erg fout zijn namelijk...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan