Скрипт проверяет есть ли куки и нагло лжет - как исправить?

Тема в разделе "Как сделать...", создана пользователем ВадимПолоусоВорон, 12 ноя 2013.

Статус темы:
Закрыта.
  1. ВадимПолоусоВорон

    ВадимПолоусоВорон Создатель

    Регистр.:
    14 апр 2013
    Сообщения:
    29
    Симпатии:
    9
    Доброго времени суток Господа. Подскажите где может быть косяк - есть скрипт который при нажатии кнопки сначала пишет куки а потом если куки есть - выводит меседж1 а если куков нет (тоесть кнопку никто не нажимал) меседж 2 - суть в том что при нажатии куки пишутся и все норм, но если даже не нажать кнпоку скрипт пишет меседж 1 мол куки записанны - чего быть не должно (
    PHP:
    <form action="" method="POST">
    <input type="submit" name="b1" value="кнопка 1" <?php if(isset($_POST["b1"])) echo "disabled"?>/>
    <input type="submit" name="b2" value="кнопка 2" <?php if(isset($_POST["b2"])) echo "disabled"?>/>
    </form>
    <?php
        
    if(isset($_POST["b1"])) {
            
    Cookie::set('kukaStyle','1');
        }
        
    $kuka =Cookie::get('kukaStyle');
        if (
    $kuka TRUE){
            echo 
    "Записали куки";
        }
        else {
            echo 
    "Нет куков";
        }
    ?>
    Сайт на Kohana
     
  2. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    ну насколько я понимаю, условие if ($kuka = TRUE)
    должно быть if ($kuka == TRUE)
    а то и вообще if ($kuka)
     
  3. ВадимПолоусоВорон

    ВадимПолоусоВорон Создатель

    Регистр.:
    14 апр 2013
    Сообщения:
    29
    Симпатии:
    9
    попробовал - все равно врет
     
  4. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    посмотрите переменную $kuka, что там в ней. Да и куки перед тестом чистите?
     
  5. ВадимПолоусоВорон

    ВадимПолоусоВорон Создатель

    Регистр.:
    14 апр 2013
    Сообщения:
    29
    Симпатии:
    9
    при чем врет странно - по идее при нажатии на кнопку куки должны записаться и логика верна - но при нажатии на кнопку куки пишутся но логика не выполняется а при оббновлении страницы - работает /

    куки чищу в переменной выводится значенике куков тоесть 1

    Фуух вроде бы решил, не знаю на сколько это красиво, правильно и почему именно так оно работает, но все же ОНО работает! :party::yahoo::yahoo::yahoo::yahoo: Решил сл образом - создал при условии что кука записалась вывод еще одного сообщение, на месте которого потом будет просто подгрузка стиля CSS
    Сам код
    PHP:
    <form action="" method="POST">
    <input type="submit" name="b1" value="кнопка 1" <?php if(isset($_POST["b1"]))?>/>
    </form>
    <?php
        
    if(isset($_POST["b1"])) {
            
    Cookie::set('kukaStyle','1');
            
    $kuka =Cookie::get('kukaStyle');
            echo 
    "Записали куки через пост";
        }
        
    $kuka =Cookie::get('kukaStyle');
        if(
    $kuka){
            echo 
    "Записали куки";
        }
        else{
            echo 
    "Нет куков";
        }
    ?>
     
    Последнее редактирование модератором: 13 ноя 2013
  6. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    закомментировать Cookie::set('kukaStyle','1');

    если не поможет, значит ковырять класс. он наверно и ставит 1
     
  7. ВадимПолоусоВорон

    ВадимПолоусоВорон Создатель

    Регистр.:
    14 апр 2013
    Сообщения:
    29
    Симпатии:
    9
    не там по ходу все из-за того что сначала идет пост куки а потомо уже условие проверки наличия куков и вывод месседжа.

    В общем готовое решение и описание всего происходящего:

    Как сделать вывод товаров плиткой и списком в Kohana 3.2 с записью в Cookie (Решение)

    Доброго времени суток. Хочу поделится, может кому и пригодится, своим решением сл вопроса. Необходимо было реализовать в интернет-магазине построенном на фреймворке Kohana вывод товаров плиткой и списком с записью выбора пользователя в куки. И так, для начала я прописал в базовом css основные стили для вида товаров (в моем случае вид плиткой.) Далее я создал в папке css 2 файла plitka.css и spisok.css в которые вписал соответствующие стили. Ну и в файле который отвечает за вывод товаров я прописал сл код (в коде комменты вам в помощь) :
    HTML:
    <form action="" method="POST">
    <input type="submit" class="btnplitka" name="b2" value="" <?php if(isset($_POST["b2"]))?>/>
    <input type="submit" class="btnspisok" name="b1" value="" <?php if(isset($_POST["b1"]))?>/>
    </form>
    PHP:
    <?php
        
    if(isset($_POST["b1"])) {
        
    // Если выбран список - удаляем куки плитки, если таковы имеются и пишем куки списка
        
    Cookie::delete('kukaStyle2');
        
    Cookie::set('kukaStyle','1','86400');
        
    // Если все прописалось - выводим стиль для вида товаров список
        
    echo '<link rel="stylesheet" type="text/css" href="css/spisok.css" />';
        }
    if(isset(
    $_POST["b2"])) {
        
    //Если нажата кнопка плитка - удаляем куки списка и записываем куки плитки
        
    Cookie::delete('kukaStyle');
        
    Cookie::set('kukaStyle2','2','86400');
        
    // Выводим стиль для плитки
        
    echo '<link rel="stylesheet" type="text/css" href="css/plitka.css" />';
    }
        
    // После того как мы записали куки - пишем логику проверки записи куков и выода соответсвующего стиля
        
    $kuka  =  Cookie::get('kukaStyle');
        
    $kuka2  =  Cookie::get('kukaStyle2');
    if(
    $kuka){
        
    //Есть куки спика - подгружаем стиль списка
        
    echo '<link rel="stylesheet" type="text/css" href="css/spisok.css" />';
    }
    elseif (
    $kuka2){
    // Если куки плитки - подгружаем стиль плитки
        
    echo '<link rel="stylesheet" type="text/css" href="css/plitka.css" />';
    }
    else {
        
    // Если куков нет - ничего не происходит и стиль для товаров берется с главного файла css
    }
    ?>
    Таким образом при первом заходе в каталог товаров пользователь видет все товары плиткой, далее если пользователь выбирает вид списком (или плиткой если список ему не понравился) скрипт удаляет старые куки, пишет новые, и в зависимости от существования тех или иных куков подгружает тот или иной стиль css.
    Вот такое не хитрое решение проблеммы. Кому будет мой совет полезен - был рад помочь:)
     
    Последнее редактирование модератором: 13 ноя 2013
  8. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    собственно весь корень зла вашей проблемы складывается из непонимания вами происходящих процессов.. давайте по-порядку..
    1. вы ставите куку методом Cookie::set().. ок.. топаем в доку на офсайт коханы.. как видим, кука ставится методом setcookie.. запомним..
    2. читаете вы куку методом Cookie::get().. опять в доку коханы.. откуда он возвращает куку?.. из массива $_COOKIE.. замечательно..
    3. а теперь заглянем на страничку с маном по setcookie, и вдумчиво читаем строку: "После передачи клиенту cookie станут доступны через массивы $_COOKIE и $HTTP_COOKIE_VARS при следующей закгрузке страницы."
    т.о. сразу установить и прочитать куку таким образом просто невозможно.. вот и вся любовь..

    на самом деле задача решается элементарно.. примерно так:
    PHP:
    $style 0;

    if( isset( 
    $_POST["b1"] ) ){
        
    Cookie::set('kukaStyle''1');
        
    $style 1;
    }

    $cookieStyle = (int)Cookie::get('kukaStyle');

    if( 
    === $cookieStyle or === $style ){
        echo 
    'плитка';
    }
    else{
        echo 
    'список';
    }
     
Статус темы:
Закрыта.