За последние 24 часа нас посетили 20979 программистов и 1035 роботов. Сейчас ищут 528 программистов ...

Помогите с сессией

Тема в разделе "PHP для новичков", создана пользователем gpi65, 11 мар 2014.

  1. gpi65

    gpi65 Активный пользователь

    С нами с:
    15 май 2007
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте.

    Делаю рейтинг фотографий. Хочу сделать так, чтобы пользователь мог изменить рейтинг в плюс и в минус только один раз. Решил сделать это через сессию. Делаю так:

    В главном файле index.php:
    Код (Text):
    1. session_start();
    В файле обработчике клика на кнопке рейтинга:
    Код (Text):
    1.     // $photoPuth - путь к фотографии, сохраненный в базе, в таблице photos
    2.         // $upd_type - тип изменения ('plus' или 'minus')
    3.  
    4.         $ses = $photoPuth.$upd_type;
    5.    
    6.     if(isset($_SESSION[$ses]) && ($_SESSION[$ses] == 'Y')){
    7.         exit;
    8.     }
    9.     else{
    10.        
    11.         if($upd_type == 'plus'){
    12.             $sql = "update photos set plus = plus + 1 where photo = '$photoPuth'"; 
    13.         }
    14.         else{
    15.             $sql = "update photos set minus = minus + 1 where photo = '$photoPuth'";
    16.         }
    17.        
    18.         if(!mysql_query($sql)) {
    19.             exit(mysql_error());
    20.         }
    21.        
    22.          $_SESSION[$ses] = 'Y';
    23.        
    24.     }
    Насколько я понимаю, если я пытаюсь изменить рейтинг в первый раз, проходит апдейт и в $_SESSION[$ses] записывается 'Y'.
    При повторной попытке изменить рейтинг в ту же сторону должно срабатывать
    Код (Text):
    1. if(isset($_SESSION[$ses]) && ($_SESSION[$ses] == 'Y')){
    2.         exit;
    3.     }
    Но почему-то это не срабатывает, рейтинг меняется еще раз.

    Подскажите, что тут не так и как с этим бороться?
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Должно быть обработчик не подключается на главный файл.
    Если нет то собственно в обработчике тоже нужно session_start.
    А лучше обработать на одной странице.
     
  3. gpi65

    gpi65 Активный пользователь

    С нами с:
    15 май 2007
    Сообщения:
    14
    Симпатии:
    0
    В начале файла обработчика пишу
    Код (Text):
    1. require_once('../../../index.php'');
    Получаю сообщение о синтаксической ошибке.
    Хотя там же написано
    Код (Text):
    1. require_once('../../../config.php');
    и ошибки нет.
    Также в начале файла вместо
    Код (Text):
    1. require_once('../../../index.php'');
    пишу
    Код (Text):
    1. session_start();
    Тоже синтаксическая ошибка.
    Может быть надо что-то настроить в php.ini?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    органичения на единственность делается на уровне базы данных. а сессия это всего-лишь способ передачи данных между запросами.
    сходу сделал ошибку проектирования.
     
  5. gpi65

    gpi65 Активный пользователь

    С нами с:
    15 май 2007
    Сообщения:
    14
    Симпатии:
    0
    "Нравится" или "Не нравится" нажать может любой пользователь, в том числе и неавторизованый. как в таком случае сделать ограничение в базе?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Если только сказать в лоб "Не авторизовался", а там уже на месте проверить.
    Аноним никак.