<?php
class Language
{
private $name = 'english';
private $sname = 'en';
private $fname = 'english.lng';
private $id = 0;
function __construct()
{
if(preg_match('/^(?:www.)?([a-z]{2}).(?:w+?.w+?|localhost)$/i', $_SERVER['HTTP_HOST'], $m)) {
$lang = $m[1];
}
else
{
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0
, 2
); }
// po tym zabiegu zmienna $lang zawiera 'en', gdy wchodzę przez en.localhost, a pl, gdy wchodzę przez pl.localhost
if($result = $GLOBALS['fmw']['db']->query("SELECT * FROM languages WHERE sname = '".$GLOBALS['fmw']['db']->escape_string($lang)."'") && $result->num_rows == 1)
{
$row = $result->fetch_assoc();
$this->name = $row['name'];
$this->sname = $row['sname'];
$this->fname = $row['fname'];
$this->id = $row['id'];
}
else if($result = $GLOBALS['fmw']['db']->query("SELECT * FROM languages WHERE sname = '".$this->sname."'") && $result->num_rows == 1)
{
$row = $result->fetch_assoc();
$this->name = $row['name'];
$this->sname = $row['sname'];
$this->fname = $row['fname'];
$this->id = $row['id'];
}
else
{
}
{
$this->lang = file("cms/languages/".$this->fname, FILE_IGNORE_NEW_LINES
); }
else
{
trigger_error("Can't find language file! [".$this->fname."]", E_USER_ERROR
); }
}
public function getLangID()
{
return $this->id;
}
}
?>
Za każdym razem, gdy wykonuję ten skrypt, wywala mi error Can't find default language. W bazie danych mam jedno pole:

więc warunek
<?php
else if($result = $GLOBALS['fmw']['db']->query("SELECT * FROM languages WHERE sname = '".$this->sname."'") && $result->num_rows == 1)
?>
powinien być spełniony. Co może być nie tak? Dodam, że $GLOBALS['fmw']['db']->error nie ma żadnej wartości.
Dodam także, że num_rows = 0 w obu warunkach. :X Jeśli z poziomu phpmyadmin wywołam:
SELECT * FROM languages WHERE sname='en'
wszystko jest ok, zwraca jeden wynik.
Oczywiście korzystam z mysqli.
Ten post edytował tommy4 21.09.2007, 13:00:31