Файл cookie не сохраняется при установке флажка

У меня есть флажок, когда я нажимаю, я хочу, чтобы он установил файл cookie со значением массива. Но когда я нажимаю на флажок, мой файл cookie не устанавливается.

Не понимаю, почему не ставится. Что-то не так с тем, как я создаю массив для значения файла cookie?

Вот мой код:

 extract($_POST);
 $code = $_POST['code'];
 $total= 100;
 if (isset($save)){
        echo "Saved";
        $cookie = array(
            'name'   => $code,
            'value'  => $total,
    );
    setcookie("cookie",json_encode($cookie),86500);
}

 if (isset($_COOKIE['cookie'])){
        echo "SET";
    }else{
        echo "NOT SET";
    }


<form method='post'>
     <input type = "checkbox" name = "save" value = "1">Save
     <input name='code' />
</form

Если бы у вас были включены правильные отчеты об ошибках PHP, это, по всей вероятности, дало бы вам сообщение об уже отправленных заголовках, потому что вы уже создаете вывод до того, как вызвали setcookie. Кроме того, неясно, откуда на самом деле должны браться $code и $total. Думаю, у вас, вероятно, есть больше полей формы с этими именами, но вы действительно должны показывать правильный минимальный воспроизводимый пример, когда спрашиваете здесь. И extract не лучший метод для использования в таком контексте, вы должны прочитать, какие опасности это может представлять.

CBroe 23.03.2022 08:12

@CBroe я показал, откуда берутся $code и $total. об уже упомянутой вами ошибке заголовков, что я могу сделать, чтобы исправить это и установить файл cookie?

james 23.03.2022 08:16

щелкнув флажок, НЕТ отправит значение сохранения по POST. (тем более у вас нет никакого ajax)

Ken Lee 23.03.2022 08:16

@KenLee, тогда что мне делать?

james 23.03.2022 08:17

Добавить кнопку отправки в форму...?

CBroe 23.03.2022 08:18

@CBroe, у меня есть один, и это то же самое. это не устанавливается

james 23.03.2022 08:18

@CBroe Я хочу, чтобы, если пользователь нажимал кнопку-флажок для сохранения, он сохранял информацию при отправке.

james 23.03.2022 08:19
«Я показал, откуда берутся $code и $total». - не совсем. Все, что мы видим, это extract($_POST);, но есть ли там действительно элементы находятся под этими ключами, мы не можем сказать. «О заголовке, уже отправленном с ошибкой, о которой вы упомянули, что я могу сделать, чтобы исправить это и установить файл cookie?» - хорошо, если проблема заключается в том, что вы создаете вывод до чего-то, то решение, вероятно, будет состоять в том, что вы перестанете это делать...?
CBroe 23.03.2022 08:19
"он сохраняет информацию при отправке" - а на основании какого делает эту форму отправлять...?
CBroe 23.03.2022 08:20

@CBroe, что вы имеете в виду, создавая вывод перед чем-то? $code — это значение введенного именованного кода, а $total — фиксированное значение. не могли бы вы направить и помочь, как решить проблему, может быть, дать подробный ответ и как это должно работать и где ошибка, это было бы здорово.

james 23.03.2022 08:22

@CBroe Когда пользователь заполняет полную информацию формы, я не включал полный код, чтобы сосредоточиться только на ошибке или проблеме, которую я получаю. Пожалуйста, у вас есть что-нибудь, что может помочь?

james 23.03.2022 08:24
«Что вы имеете в виду, создавая вывод перед чем-то?» - stackoverflow.com/a/8028987/1427878
CBroe 23.03.2022 08:25

@CBroe, не могли бы вы помочь решить вопрос, пожалуйста?

james 23.03.2022 08:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
13
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Как упоминал CBroe, вам следует избегать использования экстракта (в целях безопасности).

  2. У вас должна быть кнопка отправки (но я полагаю, что она у вас есть, но вы не включили ее в опубликованный код, верно?)

  3. Пожалуйста, используйте time() для расчета продолжительности жизни файла cookie, поэтому используйте что-то вроде:

setcookie("cookie",json_encode($cookie),time()+3600);
  1. используйте перенаправление заголовка, чтобы перезагрузить ваш скрипт после установки файлов cookie (как показано ниже), чтобы показать последний статус файла cookie:
header('Location: '.$_SERVER['PHP_SELF']);

Следовательно, используйте следующий код:

<?php
// extract($_POST);
 $code = $_POST['code'];
 $total= $_POST['total'];
 if ( isset($_POST["save"]) ){

    if ($_POST["save"]= = "1") {
        echo "Saved";
        $cookie = array(
            'name'   => $code,
            'value'  => $total,
    );
    setcookie("cookie",json_encode($cookie),time()+3600);
}
header('Location: '.$_SERVER['PHP_SELF']);
die;
}

 if (isset($_COOKIE['cookie'])){
        echo "SET";

$getcookie=json_decode($_COOKIE['cookie']);
echo "<br>Name:". $getcookie ->name;
echo "<br>Value:". $getcookie ->value;
echo "<br>";

    }else{
        echo "NOT SET";
    }

?>

<form method='post' action=#>
     <input type = "checkbox" name = "save" value = "1">Save (must tick to save as cookie)
     <input name='code' placeholder='Enter Name'/>
     <input name='total' placeholder='Enter a value'/>

     <input type=submit>
</form>

Большое спасибо, единственная проблема заключалась в том, что я не включил time()+ в настройку файла cookie.

james 23.03.2022 09:13

и последнее, как мне восстановить и показать все значения файла cookie?

james 23.03.2022 09:21

что означает, как я могу позволить одному и тому же файлу cookie иметь более одного значения, а затем отображать все значения?

james 23.03.2022 09:29

Просто используйте $getcookie=json_decode($_COOKIE['cookie']); , тогда $getcookie ->name и $getcookie ->value будут тем, что вы хотите (я изменил свой ответ выше, чтобы показать это)

Ken Lee 23.03.2022 09:39

Другие вопросы по теме