-9

私はphpの初心者で、自分のコードが正しいように見え、完全に機能するわけではなく、本当に混乱しました。if elseif elseif を使用して条件が呼び出されたときに、セッションを使用してユーザーが他の関数を実装するための変換を実装しようとしています。

<?php

if ($_GET['lang']=='fr') { 
include('fr.php');
session_start();
$_SESSION['lang']='fr';
} 


elseif ($_GET['lang']=='en') { 
include('gb.php');
session_start();
$_SESSION['lang']='en';
}

elseif ($_GET['lang']=='it') { 
include('it.php');
session_start();
$_SESSION['lang']='it';
}

elseif ($_SESSION['lang']=='fr')
{
include('fr.php');
}

elseif ($_SESSION['lang']=='en')
{
include('gb.php');
}

elseif ($_SESSION['lang']=='it')
{
include('it.php');
}

else
{
include('fr.php');
}
?>
4

4 に答える 4

1

ここで最初に気付いたのは、多くの繰り返しコードがあり、本質的に複数の場所からルックアップを行っていることです。コードを再構築すると、複雑さの多くを取り除くことができます。これは、同じことをはるかに簡単な方法で実行したものです。

<?php

define('DEFAULT_LANG', 'fr');
$lang_inc = array(
    'fr' => 'fr.php',
    'en' => 'gb.php',
    'it' => 'it.php',
);

session_start()

if ($_GET['lang'] && array_key_exists('lang', $_GET)) {
    $lang = $_GET['lang'];
} elseif ($_SESSION['lang'] && array_key_exists('lang', $_SESSION)) {
    $lang = $_SESSION['lang'];
} else {
    $lang = DEFAULT_LANG;
}

$lang_file = $lang_inc[$lang];
include($lang_file);

$_SESION['lang'] = $lang;
于 2013-03-05T23:47:30.173 に答える
0

名前の動的な部分が言語変数ですでに定義されているファイルを含めるだけなので、if/elseまたはswitchの必要はないと思います。

また、$ _ GET ['lang']が明示的に定義されていない限り、$ _SESSION['lang']をリセットする必要はありません。

これはより効率的で、lang値に基づいてif/elseまたはswitch条件で使用されるコードの半分未満になります。

<?php
session_start();

// Only set $_SESSION[$lang] if it is not set
// or if $_GET['lang'] is explicitly defined
if (isset($_GET['lang']) || !isset($_SESSION['lang'])) {

    // Array of allowed languages
    $allowed = array('fr', 'en', 'it');

    // Set fr to default if lang isn't defined or not allowed
    $_SESSION['lang'] = isset($_GET['lang']) && in_array($_GET['lang'], $allowed) ? $_GET['lang'] : 'fr';
}

// dynamically include file
include($_SESSION['lang'] . '.php');
于 2013-03-05T23:58:15.767 に答える
0

セッションを使用するときは、セッションを初期化する場合でも再開する場合でも、常に を呼び出すsession_start()必要があるため、ステートメントから取り出してページの一番上に配置してください。さらに、あなたが達成しようとしていることや失敗したことを完全には理解していません。

于 2013-03-05T23:41:29.097 に答える