2014-10-12 4 views
0

Итак, у меня есть класс PHP, у которого есть метод, который обновляет переменную сеанса с именем $_SESSION['location']. Но проблема в том, что каждый раз, когда вызывается метод, он не находит сохраненную переменную сеанса и говорит мне, что он не установлен. Он должен хранить идентификатор местоположения, а метод вытаскивает следующее местоположение из базы данных MySQL на основе переменной сеанса, а затем сохраняет новый идентификатор. Но место в коде SQL, которое должно включать переменную, пусто.Сессия PHP не сохраняется при обновлении

У меня есть session_start() в начале страницы. Я попытался вручную установить переменную, и она тоже ничего не делает. Также попытался получить эту переменную с другой страницы PHP, и не повезло. Пожалуйста помоги.

Небольшой образец моего кода:

class location { 
@session_start(); 
function compass($dir) { 
    $select = $_SESSION['location']; 

    if($dir == "north") { 
     $currentlat = mysql_result(mysql_query("SELECT `lat` FROM `locationdb` WHERE id=".$select), 0, "lat"); 
     $currentlon = mysql_result(mysql_query("SELECT `lon` FROM `locationdb` WHERE id=".$select), 0, "lon"); 
     $sql = "[THE SQL CODE THAT GETS THE NEXT LOCATION]"; 
     $id = mysql_result(mysql_query($sql), 0, "id"); 

     $_SESSION['location'] = $id; 

     $return['loc']  = $this->display_location($id); 
     $return['lat']  = $this->display_lat($id); 
     $return['long']  = $this->display_long($id); 
     $return['id']  = $id; 
    } 

    return $return; 
} 
} 
+1

, пожалуйста, напишите свой код. – Ejaz

+2

Вы должны поместить 'session_start();' в верхней части страницы вне класса. Он должен быть просто включен на страницы при загрузке. Где вы устанавливаете '$ _SESSION ['location']'? – Rasclatt

+2

Это один из примеров, почему подавление ошибок (@) редко нужно использовать и только для особых целей. – Devon

ответ

0

Я проверил ваш код

** Не используйте session_start() в этом файле.

Для простого тестирования сначала добавьте это внутри своей функции compass().

$_SESSION['location'] .= 'World'; 

Затем создайте скрипт php с этими кодами.

<?php 
    session_start(); 
    $_SESSION['location'] = 'Hello'; 
    include_once('*your name of class file*'); 
    $obj = new location(); 
    $obj -> compass('north'); 
    echo $_SESSION['location']; 
?> 

Выполнить этот скрипт

Если выход "HelloWorld", то ваш $ _SESSION [ 'место'] работает.

0

Проверьте свой phpinfo(), чтобы узнать, определен ли путь сохранения сеанса. Если нет, определите каталог для хранения сеансов. В вашем коде:

session_save_path ('/ СПРАВОЧНИК В ВАШЕМ СЕРВЕРЕ);

Затем повторите попытку.

+0

Да, все переменные сеанса работают, кроме этого. – Thomas

0

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

class location 
    { 
     public function compass($dir = '') 
      { 
       // Set the $select by $_SESSION or by your function 
       $select = (isset($_SESSION['location']))? $_SESSION['location']: $this->myFunctionToSetDefault(); 

       // I set $dir to empty so not to throw error 
       if($dir == "north") { 
         $currentlat = mysql_result(mysql_query("SELECT `lat` FROM `locationdb` WHERE id=".$select), 0, "lat"); 
         $currentlon = mysql_result(mysql_query("SELECT `lon` FROM `locationdb` WHERE id=".$select), 0, "lon"); 
         $sql  = "[THE SQL CODE THAT GETS THE NEXT LOCATION]"; 
         $id   = mysql_result(mysql_query($sql), 0, "id"); 

         $_SESSION['location'] = $id; 
         $return['loc']   = $this->display_location($id); 
         $return['lat']   = $this->display_lat($id); 
         $return['long']   = $this->display_long($id); 
         $return['id']   = $id; 
        } 

       // This will return empty otherwise may throw error if $return is not set 
       return (isset($return))? $return:''; 
      } 
    } 
Смежные вопросы