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

Статус
В этой теме нельзя размещать новые ответы.
Регистрация
14 Апр 2013
Сообщения
29
Реакции
10
Доброго времени суток Господа. Подскажите где может быть косяк - есть скрипт который при нажатии кнопки сначала пишет куки а потом если куки есть - выводит меседж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
 
ну насколько я понимаю, условие if ($kuka = TRUE)
должно быть if ($kuka == TRUE)
а то и вообще if ($kuka)
 
посмотрите переменную $kuka, что там в ней. Да и куки перед тестом чистите?
 
при чем врет странно - по идее при нажатии на кнопку куки должны записаться и логика верна - но при нажатии на кнопку куки пишутся но логика не выполняется а при оббновлении страницы - работает /

посмотрите переменную $kuka, что там в ней. Да и куки перед тестом чистите?
куки чищу в переменной выводится значенике куков тоесть 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 "Нет куков";
    }
?>
 
Последнее редактирование модератором:
закомментировать Cookie::set('kukaStyle','1');

если не поможет, значит ковырять класс. он наверно и ставит 1
 
закомментировать Cookie::set('kukaStyle','1');
может быть кто-то еще ставит куки...
или попробовать вместо isset empty
если ни то ни другое, значит ковырять класс
не там по ходу все из-за того что сначала идет пост куки а потомо уже условие проверки наличия куков и вывод месседжа.

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

Как сделать вывод товаров плиткой и списком в 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.
Вот такое не хитрое решение проблеммы. Кому будет мой совет полезен - был рад помочь:)
 
Последнее редактирование модератором:
собственно весь корень зла вашей проблемы складывается из непонимания вами происходящих процессов.. давайте по-порядку..
  1. вы ставите куку методом Cookie::set().. ок.. топаем в Для просмотра ссылки Войди или Зарегистрируйся.. как видим, кука ставится методом setcookie.. запомним..
  2. читаете вы куку методом Cookie::get().. опять в Для просмотра ссылки Войди или Зарегистрируйся.. откуда он возвращает куку?.. из массива $_COOKIE.. замечательно..
  3. а теперь заглянем на страничку с Для просмотра ссылки Войди или Зарегистрируйся, и вдумчиво читаем строку: "После передачи клиенту cookie станут доступны через массивы $_COOKIE и $HTTP_COOKIE_VARS при следующей закгрузке страницы."
т.о. сразу установить и прочитать куку таким образом просто невозможно.. вот и вся любовь..

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

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

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

if( 1 === $cookieStyle or 1 === $style ){
    echo 'плитка';
}
else{
    echo 'список';
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху