2015-07-30 3 views
-2

Здравствуйте, я столкнулся с проблемой, которая меня действительно сбивает с толку, когда я хочу напечатать строки, хранящиеся в массиве. У меня естьмногоязычный сайт PHP, незаконная строка смещения

Предупреждение: Illegal строка Смещение «TITLE» в C: \ XAMPP \ HTDOCS \ site1 \ index.php в строке 443 ... На самом деле сайт нескольких языков и я хочу, чтобы отобразить diffenet языков на желание пользователя. Какова причина этой проблемы?

<?php 
 
include_once 'common.php'; 
 
?> 
 

 
<form method="get" name="signup" > 
 
<h1 id="head"></head></br> 
 
<h1 ><?php echo $lang['USER_REGISTRATION']; ?></h1> 
 
<h4 id="req">*Donates Required Fields</h4> 
 
<table> 
 

 
<tr> 
 
    <td><?php echo $lang['TITLE']; ?>:*</td> 
 
    <td><input type="text" name="title"/></td> 
 
    </td> 
 
</tr> 
 
</table> 
 
</form>

<?php 
 
session_start(); 
 
header('Cache-control: private'); // IE 6 FIX 
 

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

 
// register the session and set the cookie 
 
$_SESSION['lang'] = $lang; 
 

 
setcookie("lang", $lang, time() + (3600 * 24 * 30)); 
 
} 
 

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

 
else if(isSet($_COOKIE['lang'])) 
 
{ 
 
$lang = $_COOKIE['lang']; 
 
} 
 

 
else 
 
{ 
 
$lang = 'en'; 
 
} 
 

 
switch ($lang) { 
 
    case 'en': 
 
    $lang_file = 'lang.en.php'; 
 
    break; 
 

 

 
    case 'pr': 
 
    $lang_file = 'lang.pr.php'; 
 
    break; 
 

 
    case 'ar': 
 
    $lang_file = 'lang.ar.php'; 
 
    break; 
 
    
 
    default: 
 
    $lang_file = 'lang.en.php'; 
 

 
} 
 

 
include_once 'languages/'.$lang_file; 
 
?>

$lang['USER_REGISTRATION']="User Registration"; 
 
$lang['TITLE']="Title";

+1

'$ lang ['USER_REGISTRATION'] =" Регистрация пользователя "; $ lang ['TITLE'] = "Название"; 'это ваш общий.php? –

+0

@PrashantTapase Нет Я думаю, что это его языки 'include_once '/' .$ lang_file;' – RiggsFolly

+0

Вы уверены, что языковой файл, загружаемый с помощью языков 'include_once '/' .$ lang_file;', действительно существует? – RiggsFolly

ответ

0

Эта ошибка означает, что $lang не имеет key и value от TITLE. Чтобы проверить, какие ключи и значения использует массив, var_dump(). Вы должны определить $lang['TITLE'] перед echo'ing.

+0

Вы имеете в виду var_dump ($ lang)? –

+0

Да. В основном вы увидите, что в массиве нет ключа 'TITLE'. Сначала вам нужно определить это. Тогда вы можете повторить это. – Nytrix

0

Как ясно сообщение об ошибке, $lang - это строка, а не массив. Всего выстрел в темноте здесь:

Ваш include_once не включая файл, потому что вы уже включили его в другом месте, и это не должна быть включена во второй раз из-за _once. Это или этот файл не существует, и в этом случае вам нужно проверить свои журналы ошибок.

+0

Да, переменная '$ lang' является строкой, но строка может рассматриваться как ** индексированный массив **, и ошибка говорит о том, что' string offset' является незаконным, поскольку даже если PHP не проводит различия между индексированными и ассоциативные массивы, строка не может рассматриваться как ** ассоциативный массив **, поэтому PHP говорит, что вы не можете искать элемент массива со строковым ключом в переменной 'string'. –

+0

Ну, да, точно. OP ожидает, что '$ lang' является массивом, чего явно нет. – deceze

+0

Я просто хочу указать, что означает _ "string offset" _. В [этом комментарии] (http://stackoverflow.com/q/31723602/#comment51385067_31723602), вы говорите, что _ «смещение строки» _ относится к типу данных, но относится к смещению '[" TITLE "] 'и не к типу данных.** 1) ** '$ array [3] // Законодательное смещение' ** 2) **' $ array ["TITLE"] // Юридическое смещение (если ключ «TITLE» не установлен, PHP выдает " Примечание: Неинициализированное смещение строки: 'TITLE' ")' ** 3) ** '$ string [0] // Юридическое смещение' ** 4) **' $ string ["TITLE"] // Нелегальное смещение, PHP строка не может рассматриваться как ассоциативный массив. –