PHP中的条件条件

时间:2018-02-12 16:37:58

标签: php

我的项目可以在语言之间切换。这些项目存储在数据库中,并使用数据库中的$ _GET [' lang']返回正确的项目。目前,只使用英语和法语,因此可以使用此代码:

if ($_GET['lang'] == 'fr' OR ($_GET['lang'] == 'en')) {
    $header = getTranslation('header', $_GET['lang']);
    $footer = getTranslation('footer', $_GET['lang']);
} else {
    header('Location: error.php');
}

我正在寻找的是在数据库中添加语言的情况下要做好准备的方法。下面的代码接近我需要的东西(显然没有用)。

while ($translations = $languagesList->fetch()) {
    if ($_GET['lang'] == $translations['code']) {
        $header = getTranslation('header', $_GET['lang']);
        $footer = getTranslation('footer', $_GET['lang']);
    } else {
        header('Location: language.php');
    }
}

有没有办法创建一个代码,根据db中的语言数量生成多个if条件?

2 个答案:

答案 0 :(得分:2)

您应该将else部分移动到循环外部,否则您将始终在循环迭代中的某个点执行它。只有当您通过所有可能性进行迭代,并且仍然没有匹配时,您才能确保必须导航到语言页面:

$header = null;
while ($translations = $languagesList->fetch()) {
    if ($_GET['lang'] == $translations['code']) {
        $header = getTranslation('header', $_GET['lang']);
        $footer = getTranslation('footer', $_GET['lang']);
        break; // No need to waste time to look further.
    }
}
if ($header === null) {
    header('Location: language.php');
}

prepare an SQL statement能够更明智地获取特定语言的结果(使用where code = ?并将$_GET['lang']绑定到它)会更聪明。然后您不必在PHP中进行迭代,这通常比数据库提供的速度慢。相反,你可以看看你是否有0或1条记录(或使用select count(*)并检查是否为0)。

答案 1 :(得分:0)

最简单的方法是在数组中使用映射,检查您的语言是否存在,如果存在,请执行操作。像这样的东西;

$languages = array('en', 'fr', 'de', '...');
$default_language = 'en';
$language = in_array($_GET['lang'], $languages) ? $_GET['lang'] : $default_language;

$header = getTranslation('header', $language);

正如您所看到的,我设置了一个默认语言,如果找不到查询var中的语言,则会使用该语言。如何创建该语言数组取决于您(一个简单的查询就足够了)。