2010-11-01 3 views
0

Может ли кто-нибудь сказать мне, почему это не работает?

<?php 
$lang = $_get["lang"]; 
if (($lang == "fr")) 
{ 
    session_destroy(); 
    session_start(); 
    $_SESSION['lang'] == "fr"; 
} 

if (($lang == "en")) 
{ 
    session_destroy(); 
    session_start(); 
    $_SESSION['lang'] == "en";  
} 

if (isset($_SESSION['lang'])) 
{ 
    $lang = $_SESSION['lang']; 
} 
else 
{ 
    $lang = "fr";    
} 
?> 

Я просто не могу заставить его работать, и я пробовал много разных вещей. Просто нужно руководствоваться ошибкой.

Он работает на PHP5 на сервере Apache, если это поможет.

Даже без сеанса я даже не могу заставить $ _get работать. Обычно это никогда не бывает.

+7

Возможно, вы хотите использовать '$ _GET', а не' $ _get'? – Treffynnon

ответ

5

Я пересмотрел ваш код, чтобы упростить работу в будущем. Как говорит Пекка, и я спросил, возможно, вам нужно/нужно $ _GET.

<?php 
session_start(); 

$language = $_GET['lang']; 

$allowable_languages = array(
    'en', 
    'fr', 
); 

if(in_array($language, $allowable_languages)) { 
    $_SESSION['lang'] = $language; 
} else { 
    $_SESSION['lang'] = 'fr'; 
} 
?> 

Обновлено: В ответ на ваш комментарий:

<?php 
session_start(); 

if(isset($_GET['lang'])) { 
    $language = $_GET['lang']; 

    $allowable_languages = array(
     'en', 
     'fr', 
    ); 

    if(in_array($language, $allowable_languages)) { 
     $_SESSION['lang'] = $language; 
    } 
} 

if(!isset($_SESSION['lang'])) { 
    $_SESSION['lang'] = 'fr'; 
} 
?> 
+0

ну, я только «нужен» $ _GET, чтобы зарегистрироваться, когда язык изменен, и я делаю это, передавая другой $ lang через url. – Troels

+0

Если у вас есть лучшее решение, чем использование $ _GET, я бы хотел его услышать? Не очень нравится использовать его. – Troels

+0

Не совсем уверен, почему у вас возникнет проблема с передачей языка через параметры 'GET'. Во всяком случае, я обновил свой ответ с кодом, чтобы обновить сеанс, когда предоставляется '$ _GET ['lang']'.Если вы не хотите обновлять язык, не отправляйте параметр 'lang' в свой GET-запрос. – Treffynnon

9

Одна очевидная вещь

$_get["lang"]; 

Переменные чувствительны к регистру в PHP. Это должно быть

$_GET["lang"]; 

Если это не поможет решить вашу проблему, вам необходимо подробно описать, что именно не работает.

15
$_SESSION['lang'] == "fr"; 

два равных знака означает сравнение оператора. присвоение = (один равный)

+0

Ха, хорошо заметили! –

0

U только что сделал одну ошибку i.e, u использует неправильный синтаксис, он должен быть $ _GET ['lang'];

0

Ваш код не работает, потому что session_start() не может использоваться непосредственно после session_destroy(). Кстати, вам не нужно уничтожать сеанс. Просто переопределить переменную:

$lang = 'fr'; 
if(isset($_GET['lang']) && in_array($_GET['lang'], array('fr', 'en'))) $lang = $_GET['lang']; 
$_SESSION['lang'] = $lang; 

Для тех, кто считает, что проблема ниже переменная случай - PHP переменные чувствительны к регистру.

+1

Вы ошибаетесь, имена функций нечувствительны к регистру, но переменные - нет. – rhino

+2

$ test = 1; $ TEST = 2; echo $ test; // 1, чувствительный к регистру –

+0

нормально, вы оба правы. я пропущу что-то здесь. – Anpher

0

Вы оба правы. Было много разных ошибок. И проблема «=» и «==» плюс проблема с регистром $ _GET. Здесь код i god работает как $ _GET плюс сеанс. Большое спасибо. Я провел всю ночь, пытаясь найти эту ошибку, и думаю, что я получил ошибку.

<?php 
$lang = $_GET["lang"]; 
if (($lang == "fr")) 
{ 
session_destroy(); 
    session_start(); 
$_SESSION['lang'] = "fr"; 


} 
if (($lang == "en")) 
{ 
session_destroy(); 
    session_start(); 
$_SESSION['lang'] = "en"; 


} 
if (isset($_SESSION['lang'])) 
{ 


$lang = $_SESSION['lang']; 



} 
else { 
$lang = "fr";    
} 

?> 
+0

Стиль этого кода просто ужасен. См. Повторный факторинг, который я сделал в http://stackoverflow.com/questions/4068145/get-and-session-cant-get-it-to-work/4068193#4068193 как средство для создания читаемого и менее повторяющегося кода. , – Treffynnon

Смежные вопросы