sandrulis Posted November 24, 2010 Report Share Posted November 24, 2010 Es veidoju lapu kurā būs vairākas valodas, un viss strādā :) Bet problēma sākas ar datu bāzi, viss tulkojums stāv teksta failā (php), datubāzē norādu faila nosaukumu un karodziņa nosaukumu. Valodas mainās ar cookie palīdzību. Strādājošā koda daļa ir šāda: switch($_COOKIE['lang']) { case 'lv': $valoda='lv'; break; case 'fr': $valoda='fr'; break; case 'ru': $valoda='ru'; break; default: $valoda='en'; } Bet kad mēģinu izvilkt no datubāzes (lai nav ik palaikam jālabo koda fails) switch($_COOKIE['lang']) { $results=mysql_query("SELECT * FROM languages WHERE default='0'"); while($rows = mysql_fetch_array($results)) {case $rows['isak']: $valoda=$rows['isak']; break;} default: $valoda=$default_valoda; } Man izmet šādu erroru: Parse error: syntax error, unexpected T_VARIABLE, expecting T_CASE or T_DEFAULT or '}' in ...\www\lang.php on line 12 Problēmas norādītajā rindiņā ir kods, kas izvelk datus no datubāzes: $result ... Man liekas kkas nav ar: case 'ru': $valoda='ru'; break; Ieboldotais teksts nevar būt zem koda, kas izvelk datus no datubāzes, ne? Sry par tādiem jautājumiem, bet es tikai mācos :) (hobijs) Ko lai dara? vai vnk atstāt switch($_COOKIE['lang']) { case 'lv': $valoda='lv'; break; case 'fr': $valoda='fr'; break; case 'ru': $valoda='ru'; break; default: $valoda='en'; } ik palaikam labot to failu Quote Link to comment Share on other sites More sharing options...
e-remit Posted November 24, 2010 Report Share Posted November 24, 2010 Gadījumā pirms "case $rows['isak']:" netrūkst switch()? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 24, 2010 Report Share Posted November 24, 2010 Nez, Es darītu šitā... =) $languages = array( 'lv' => 'Latvian', 'ru' => 'Russian' ); echo $languages['lv']; Quote Link to comment Share on other sites More sharing options...
mounkuls Posted November 24, 2010 Report Share Posted November 24, 2010 Vai tikai $rows['isak'] nevajag pēdiņās... Quote Link to comment Share on other sites More sharing options...
sandrulis Posted November 24, 2010 Author Report Share Posted November 24, 2010 (edited) e-remit, ieliku pirms case to switch(), bet tad viņš ņem pēdējo ieraktu kas ir datubāzē ar pēdiņām arī eksperimentēju un nekas nemainās, tas pats error Edited November 24, 2010 by sandrulis Quote Link to comment Share on other sites More sharing options...
marcis Posted November 24, 2010 Report Share Posted November 24, 2010 Īsti neiebraucu loģikā, bet iesaku iepazīties ar if konstrukciju. Ar pēdiņām viss bumbās. Ja netiktu lietotas pēdiņas, tad php meklēju konstanti, nevis padotu stringu. Bezpēdiņu variants vairumā gadījumu strādā, jo php atgriež pieprasītās konstantes nosaukumu, ja tā netiek atrasta. If you use an undefined constant, PHP assumes that you mean the name of the constant itself, just as if you called it as a string (CONSTANT vs "CONSTANT"). An error of level E_NOTICE will be issued when this happens. See also the manual entry on why $foo[bar] is wrong (unless you first define() bar as a constant). If you simply want to check if a constant is set, use the defined() function. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted November 24, 2010 Report Share Posted November 24, 2010 Kas Manam variantam vainas? xD Quote Link to comment Share on other sites More sharing options...
e-remit Posted November 24, 2010 Report Share Posted November 24, 2010 (edited) e-remit, ieliku pirms case to switch(), bet tad viņš ņem pēdējo ieraktu kas ir datubāzē Es tikai norādīju uz acīmredzami dīvainu lietu, starp citu, break aptur tuvāko pieejamo ciklu, līdz ar to viš nobreikos while, nevis switch ;) Bet nu vispār, ja vien netaisies valodas vēlāk likt klāt dinamiski, nav vajadzības to datubāzē glabāt un ņem vērā daGrevis ieteikumu, visu izsakot masīvā $languages = array( 'lv' => 'Latvian', 'ru' => 'Russian', 'en' => 'English', ); $lang = empty($_COOKIE['lang']) ? 'en' : $_COOKIE['lang']; $valoda = isset($languages[$lang]) ? $languages[$lang] : $languages['en']; Edited November 24, 2010 by e-remit Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.