2013-03-21 4 views
1

У меня есть файл с именем file_with_data_from_server.php, это получает $_POST['data] от звонка AJAX. Мне удалось создать новый массив для хранения данных с сервера. Этот file_with_data_from_server.php затем включается в другой файл .php. Естественно, что все переменные, присутствующие на file_with_data_from_server.php, могут быть доступны в файле, где он был включен, но в моем случае я не могу получить доступ к переменной, в которой это значение берется из данных json_decoded. Это код на file_with_data_from_server.php,Переменная недоступна в PHP

 $data_for_reports = $_POST['data']; // data from server 

     $rrow = json_decode($data_for_reports); 
     $dates_for_reports = array(); 
     foreach($rrow as $rr){ 
      $dates_for_reports[] = $rr->time_period; 
     } 
     $current_date_with_data = end($dates_for_reports);  // this contains data like '201301' 

в моем файле .php где я включил file_with_data_from_server.php, у меня есть этот код,

 include('file_with_data_from_server.php'); 
     echo '<pre>'; 
      print_r('test'.$current_date_with_data); 
     echo '</pre>'; 

Я пытаюсь напечатать значение $current_date_with_data переменной, но она ничего не отображает ,

+0

ли вы пытаетесь сбросить эту переменную (в первом файле)? – Uby

+0

@Uby, конечно, и у него есть данные по нему. –

+0

Итак, вы отправляете файл 'file_with_data_from_server.php', но включаете его в другую .php-страницу? – juco

ответ

1

Из того, что я могу собрать вас в том числе file_with_data_from_server.php в другой PHP скрипт (в дальнейшем именуемого other.php) и размещение в file_with_data_from_server.php, ожидая, что переменные, которые будут напечатаны в other.php. Это не сработает, так как на самом деле не называется other.php.

Рассмотрим это:

a.php

$myVar = $_POST; 

b.php

include('a.php'); 
var_dump($myVar); 

Если вы публикуете a.php - b.php никогда не вызывается! Это include и var_dump в этом случае никогда не будут выполнены, так как был вызван только a.php.

Однако, если вы должны были отправить сообщение в b.php (включая a.php), это будет работать так, как вы ожидаете.

+0

Итак, вы предлагаете отправить сообщение на 'b.php' вместо того, чтобы отправлять его на' a.php'? –

+0

В этом сценарии 'a.php' понятия не имеет, что' b.php' хочет включить его - он никогда не загружается. Поэтому в этой ситуации вам придется, да. – juco

+0

Похоже, что плакат не может сделать эту ошибку, так как они говорят, что '' test "' получает выход. Но они могут говорить о двух разных запросах. – Cal

1

Выполняет ли вывод "test"? Может быть, что $current_date_with_data содержит null или что-то, что ничем не стягивает.

Это простой способ проверить каждую переменную вы определены:

echo "<pre>"; 
echo HtmlSpecialChars(print_r($GLOBALS, true)); 
echo "</pre>"; 

UPDATE

Это звучит как Juco нашел свое решение. Фактически вы не отправляете данные во второй файл php. Данные будут доступны только в file_with_data_from_server.php в исходном сообщении, а не в последующих запросах.

Если вам нужно отправить данные по одному запросу и получить к нему доступ позднее в другом запросе, вам необходимо сохранить данные где-нибудь, такую ​​как переменную сеанса или в базе данных.

Каждый запрос в PHP является новым и не содержит данных предыдущих запросов. Это называется «без гражданства». У Google много результатов, объясняющих безгражданство в веб-приложениях.

http://www.phpfreaks.com/tutorial/sessions-and-cookies-adding-state-to-a-stateless-protocol

+0

Он, безусловно, выводит '' test '', только это один. –

+0

Что происходит, когда вы выгружаете все глобальные переменные, используя мой пример кода? – Cal

+0

Он возвращает эту ошибку: «Уровень вложенности слишком глубокий - рекурсивная зависимость». –

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