У меня есть флажок, когда я нажимаю, я хочу, чтобы он установил файл 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
@CBroe я показал, откуда берутся $code и $total. об уже упомянутой вами ошибке заголовков, что я могу сделать, чтобы исправить это и установить файл cookie?
щелкнув флажок, НЕТ отправит значение сохранения по POST. (тем более у вас нет никакого ajax)
@KenLee, тогда что мне делать?
Добавить кнопку отправки в форму...?
@CBroe, у меня есть один, и это то же самое. это не устанавливается
@CBroe Я хочу, чтобы, если пользователь нажимал кнопку-флажок для сохранения, он сохранял информацию при отправке.
extract($_POST);
, но есть ли там действительно элементы находятся под этими ключами, мы не можем сказать. «О заголовке, уже отправленном с ошибкой, о которой вы упомянули, что я могу сделать, чтобы исправить это и установить файл cookie?» - хорошо, если проблема заключается в том, что вы создаете вывод до чего-то, то решение, вероятно, будет состоять в том, что вы перестанете это делать...?
@CBroe, что вы имеете в виду, создавая вывод перед чем-то? $code — это значение введенного именованного кода, а $total — фиксированное значение. не могли бы вы направить и помочь, как решить проблему, может быть, дать подробный ответ и как это должно работать и где ошибка, это было бы здорово.
@CBroe Когда пользователь заполняет полную информацию формы, я не включал полный код, чтобы сосредоточиться только на ошибке или проблеме, которую я получаю. Пожалуйста, у вас есть что-нибудь, что может помочь?
@CBroe, не могли бы вы помочь решить вопрос, пожалуйста?
Как упоминал CBroe, вам следует избегать использования экстракта (в целях безопасности).
У вас должна быть кнопка отправки (но я полагаю, что она у вас есть, но вы не включили ее в опубликованный код, верно?)
Пожалуйста, используйте time() для расчета продолжительности жизни файла cookie, поэтому используйте что-то вроде:
setcookie("cookie",json_encode($cookie),time()+3600);
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.
и последнее, как мне восстановить и показать все значения файла cookie?
что означает, как я могу позволить одному и тому же файлу cookie иметь более одного значения, а затем отображать все значения?
Просто используйте $getcookie=json_decode($_COOKIE['cookie']);
, тогда $getcookie ->name
и $getcookie ->value
будут тем, что вы хотите (я изменил свой ответ выше, чтобы показать это)
Если бы у вас были включены правильные отчеты об ошибках PHP, это, по всей вероятности, дало бы вам сообщение об уже отправленных заголовках, потому что вы уже создаете вывод до того, как вызвали
setcookie
. Кроме того, неясно, откуда на самом деле должны браться$code
и$total
. Думаю, у вас, вероятно, есть больше полей формы с этими именами, но вы действительно должны показывать правильный минимальный воспроизводимый пример, когда спрашиваете здесь. Иextract
не лучший метод для использования в таком контексте, вы должны прочитать, какие опасности это может представлять.