Здравствуйте! Пытаюсь записать массив данных в куки, но не работает запись почему-то, выдает null постоянно, но если записывать в куки без массива, то работает, очень прошу вашей помощи, мой код: PHP: $array = array( array( "name"=>"Архив", "price"=>"100" ), array( "name"=>"Архив 2", "price"=>"200" ), ); $json = json_encode($array); setcookie("filtername", $json); $array2 = json_decode($_COOKIE['filtername']); echo "<pre>"; var_dump($array2); echo "</pre>"; Заранее спасибо! Подскажите еще пожалуйста, как потом в дополнение к этим данным добавить новые(без перезаписи всего массива)? то бишь при текущем коде идет в запись Архив и Архив2, и после я мог к ним добавить новые Архив 3 к примеру, но без полной замены массива, а его дополнению, спасибо!
Не знаю, у меня все работает и выводит: Код (Text): array(2) { [0]=> object(stdClass)#5 (2) { ["name"]=> string(10) "Архив" ["price"]=> string(3) "100" } [1]=> object(stdClass)#6 (2) { ["name"]=> string(12) "Архив 2" ["price"]=> string(3) "200" } } --- Добавлено --- Может ты сервер настроил не правильно...
Если принудительно писать $_COOKIE['filtername'] = json_encode($array);, то выводит, но не хочет через setcookie... У меня есть 3 страницы, на каждой странице есть форма post, и каждая форма отправляется на выбор на 1 общую страницу где и сохраняются данные с всех форм которые отправили... Код: Код (Text): 1 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="Name array1"> <input type="hidden" name="pricep" value="price array1"> <input name="but" type="submit"> </form> 2 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="Name array2"> <input type="hidden" name="pricep" value="price array2"> <input name="but" type="submit"> </form> 3 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="Name array3"> <input type="hidden" name="pricep" value="price array3> <input name="but" type="submit"> </form> И файл обработки и сохранения отправок с форм: PHP: $array = array( array( "name"=>$_POST['namep'], "price"=>$_POST['pricep'] ), ); $json = json_encode($array); setcookie("filtername", $json); $array2 = json_decode($_COOKIE['filtername']); echo "<pre>"; var_dump($array2); echo "</pre>"; В итоге я к примеру перешел на 1 страницу, нажал Submit и на странице post.php добавилось значение из первой формы и сохранилось в куках, затем я вышел с post.php и перешел к примеру на страницу 3 и отправил форму, затем опять меня перекинуло на post.php и там уже должны быть данные не только с последней формы, но и с 1-й что я отправлял ранее. Подскажите пожалуйста, как это реализовать? 1. через setcookie у меня почему-то не записывает массив, а если принудительно $_COOKIE['filtername'] = json_encode($array); то работает 2. Как сохраняя предыдущее значение, добавлять новое? так выдает ошибку PHP: $array = array( array( "name"=>$_POST['namep'], "price"=>$_POST['pricep'] ), ); $json = json_encode($array); setcookie("filtername", $json); $array2 = json_decode($_COOKIE['filtername']); $secondArray= array( array( "name"=>$_POST['namep'], "price"=>$_POST['pricep'] ), ); $_COOKIE['filtername'][] = json_encode($secondArray); echo "<pre>"; var_dump($array2); echo "</pre>"; [] operator not supported for strings
1. через setcookie у меня почему-то не записывает массив, а если принудительно $_COOKIE['filtername'] = json_encode($array); то работает , точнее если через setcookie , то var_dump(json_decode($_COOKIE['filtername'])) выдает постоянно null
Теперь по порядку: $_COOKIE['filtername'] = json_encode($array); - чисто в теории это будет выглядеть также как ты будешь присваивать к переменной $b значения. Проще говоря, так не выйдет. Что касаемо куки, я бы на твоем месте посмотрел в сторону сессии, почему? Ну, потому что она запоминает. PHP: $array = array( array( "name"=>14, "price"=>51 ), ); $_SESSION['filtername'] = $array; $_SESSION['filtername'][] = ['test'=>'test1']; //Новый массив $array2 = $_SESSION['filtername']; echo "<pre>"; var_dump($array2); echo "</pre>"; Но тебе действительно ли нужен json? Если да, то скорее тебе придется разбивать на разные переменные... result: Код (Text): array(2) { [0]=> array(2) { ["name"]=> int(14) ["price"]=> int(51) } [1]=> array(1) { ["test"]=> string(5) "test1" } } --- Добавлено --- Однако можно сделать так и ты объединишь два массива, вот как тебе надо: PHP: $array = array( array( "name"=>'user', "price"=>100 ), ); $array2 = array( array( "nameAdmin"=>'test', "Password"=>'123' ) ); $array=array_merge($array, $array2); $json = json_encode($array); setcookie("filtername", $json); echo "<pre>"; var_dump($_COOKIE['filtername']); echo "</pre>";
Я выбрал куки, т.к. мне нужно запоминание на уровне браузера и по времени. Вот моя идея, но она не работает как нужно, посмотрите пожалуйста, буду очень благодарен за помощь: PHP: $strcoc = json_decode(stripslashes($_COOKIE['filtername'])); if($strcoc[0] != null){//если есть куками 0 из массива то заполяем основной массив куками, если нет, то post если был отправлен $arrname0 = $strcoc[0]['name']; $arrprice0 = $strcoc[0]['price']; } else { $arrname0 = $_POST['namep']; $arrprice0 = $_POST['pricep']; } if($strcoc[1] != null){ $arrname1 = $strcoc[1]['name']; $arrprice1 = $strcoc[1]['price']; } else { $arrname1 = $_POST['namep2']; $arrprice1 = $_POST['pricep2']; } if($strcoc[2] != null){ $arrname2 = $strcoc[2]['name']; $arrprice2 = $strcoc[2]['price']; } else { $arrname2 = $_POST['namep3']; $arrprice2 = $_POST['pricep3']; } $array = array(//основной массив куки, куда записываем все сохранения и выводим array( "name"=>$arrname0, "price"=>$arrprice0 ), array( "name"=>$arrname1, "price"=>$arrprice1 ), array( "name"=>$arrname2, "price"=>$arrprice2 ), ); SetCookie("filtername", json_encode($array));//обновление основной куки $strcocecho = json_decode(stripslashes($_COOKIE['filtername']));//выводим массив echo "<pre>"; var_dump($strcocecho); echo "</pre>";
Как я выше писал, к примеру перешел на 1 страницу, нажал Submit и на странице post.php добавилось значение из первой формы и сохранилось в куках, затем я вышел с post.php и перешел к примеру на страницу 3 и отправил форму, затем опять меня перекинуло на post.php и там уже должны быть данные не только с последней формы, но и с 1-й что я отправлял ранее
HTML: 1 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="<?=$_POST['namep']?>"> <input type="hidden" name="pricep" value="<?=$_POST['pricep']?>"> <input name="but" type="submit"> </form> 2 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="<?=$_POST['namep']?>"> <input type="hidden" name="pricep" value="<?=$_POST['pricep']?>"> <input name="but" type="submit"> </form> 3 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="<?=$_POST['namep']?>"> <input type="hidden" name="pricep" value="<?=$_POST['pricep']?>"> <input name="but" type="submit"> </form> --- Добавлено --- И все... Что строить города...
Информация в формах статична, я их отправлял ранее уже, мне нужно поправить мой обработчик что я выслал выше с сохранением всей информации на куках как я описал ранее. --- Добавлено --- Мой нужный html: Код (Text): 1 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="Name array1"> <input type="hidden" name="pricep" value="price array1"> <input name="but" type="submit"> </form> 2 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="Name array2"> <input type="hidden" name="pricep" value="price array2"> <input name="but" type="submit"> </form> 3 страница <form action="/post.php" method="post"> <input type="hidden" name="namep" value="Name array3"> <input type="hidden" name="pricep" value="price array3> <input name="but" type="submit"> </form> Мой обработчик который не работает, не сохраняет данные: PHP: $strcoc = json_decode(stripslashes($_COOKIE['filtername'])); if($strcoc[0] != null){//если есть куками 0 из массива то заполяем основной массив куками, если нет, то post если был отправлен $arrname0 = $strcoc[0]['name']; $arrprice0 = $strcoc[0]['price']; } else { $arrname0 = $_POST['namep']; $arrprice0 = $_POST['pricep']; } if($strcoc[1] != null){ $arrname1 = $strcoc[1]['name']; $arrprice1 = $strcoc[1]['price']; } else { $arrname1 = $_POST['namep2']; $arrprice1 = $_POST['pricep2']; } if($strcoc[2] != null){ $arrname2 = $strcoc[2]['name']; $arrprice2 = $strcoc[2]['price']; } else { $arrname2 = $_POST['namep3']; $arrprice2 = $_POST['pricep3']; } $array = array(//основной массив куки, куда записываем все сохранения и выводим array( "name"=>$arrname0, "price"=>$arrprice0 ), array( "name"=>$arrname1, "price"=>$arrprice1 ), array( "name"=>$arrname2, "price"=>$arrprice2 ), ); SetCookie("filtername", json_encode($array));//обновление основной куки $strcocecho = json_decode(stripslashes($_COOKIE['filtername']));//выводим массив echo "<pre>"; var_dump($strcocecho); echo "</pre>"; Помогите поправить данный код пожалуйста, чтобы работало сохранение и запись как нужно, заранее спасибо!
Записать в куку массив не получится, и дописать что-то тоже вряд ли, а лишь удалить и записать новую.
Может слишком длинная переменная получается? там 4кб (2000 юникодных русских букоф) SetCookie в php регистр не важен?
да, проверьте у себя мой код пожалуйста, мб он только у меня не работает, мб я что-то с переменными намудрил
да там мудрить нечего, либо устанавливать по одному значению, либо объединять значения в одну строку типа "Name array1_price array1"
Проверил первый код. Все работает. При первом запросе страницы переменной нету. При втором отображается. Вы же не пытаетесь сделать точно так же как в коде? Куки появится только когда в пользователя отобразится страница. --- Добавлено --- Ну так он же и объединяет созданием json объекта.
этот код вы проверяли? работает сохранение с разных форм и обьеденяет новые данные с старыми в куках?
Не знаю в чем здесь сложность. Но вот так точно работать не будет. Сначала сет куки потом отображения страницы и при следующем запросе уже можно использовать гет. Пока Страница не вернется браузер не сможет прописать куки. Это смущает? В данном примере возвращается старая кука до сета. PHP: SetCookie("filtername", json_encode($array));//обновление основной куки. $strcocecho = json_decode(stripslashes($_COOKIE['filtername']));//выводим массив
Логика кода вообще странная PHP: $strcoc=json_decode(stripslashes($_COOKIE['filtername'])); $arr = [ "name" => $_POST['namep']; "price" => $_POST['price']; ]; $strcoc[] = $arr // или array_push или даже $page = $_POST['page_num']; $strcoc[$page] = $arr setcookie("filtername",json_encode($strcoc)); echo $strcoc;
PHP: $strcoc=json_decode(stripslashes($_COOKIE['filtername'])); $arr = [ "name" => $_POST['namep']; "price" => $_POST['price']; ]; $strcoc[] = $arr // или array_push или даже $page = $_POST['page_num']; $strcoc[$page] = $arr setcookie("filtername",json_encode($strcoc)); echo $strcoc; Спасибо, подскажите пожалуйста как сохранить предыдущий выбор? к примеру я перешел на 1 страницу с формой, нажал Submit и на странице post.php добавилось значение из первой формы и сохранилось в куках, затем я вышел с post.php и перешел к примеру на страницу 3 и отправил форму другую, затем опять меня перекинуло на post.php и там уже должны быть данные не только с последней формы, но и с 1-й что я отправлял ранее --- Добавлено --- Добавлять в массив должно такие же ключи "name" => $_POST['namep']; "price" => $_POST['price'];, но с разными значениями, т.к. разные формы, к примеру как я писал тут PHP: if($strcoc[0] != null) $arrname0 = $strcoc[0]['name']; $arrprice0 = $strcoc[0]['price']; } else { $arrname0 = $_POST['namep']; $arrprice0 = $_POST['pricep']; } if($strcoc[1] != null){ $arrname1 = $strcoc[1]['name']; $arrprice1 = $strcoc[1]['price']; } else { $arrname1 = $_POST['namep2']; $arrprice1 = $_POST['pricep2']; } if($strcoc[2] != null){ $arrname2 = $strcoc[2]['name']; $arrprice2 = $strcoc[2]['price']; } else { $arrname2 = $_POST['namep3']; $arrprice2 = $_POST['pricep3']; } $array = array(//основной массив куки, куда записываем все сохранения и выводим array( "name"=>$arrname0, "price"=>$arrprice0 ), array( "name"=>$arrname1, "price"=>$arrprice1 ), array( "name"=>$arrname2, "price"=>$arrprice2 ), );
Вот мой код как раз для этого. Он уже должен работать и ваш возможно заработает если измените PHP: $strcocecho = json_decode(stripslashes($_COOKIE['filtername']));//выводим массив //на $strcocecho = $array; //выводим массив Но мой короче а делает тоже самое. А еще лучше вот так PHP: $strcoc=json_decode(stripslashes($_COOKIE['filtername'])); if(isset($_POST['namep']) && isset($_POST['price'])) { $strcoc[] = [ "name" => $_POST['namep'], "price" => $_POST['price'], ]; } setcookie("filtername",json_encode($strcoc)); echo $strcoc;
Большое спасибо, сохраняет как нужно, подскажите пожалуйста, почему выводит информацию, но с ошибкой Trying to get property of non-object 14, не могу понять... PHP: $strcoc=json_decode(stripslashes($_COOKIE['filtername'])); if(isset($_POST['namep']) && isset($_POST['price'])) { $strcoc[] = [ "name" => $_POST['namep'], "price" => $_POST['pricep'], ]; } setcookie("filtername",json_encode($strcoc)); foreach($strcoc as $k){ echo $k->name; } --- Добавлено --- И можно ли как-то удалить один из массивов в куках? уже после сохранения
сделай вот так PHP: $strcoc[] = (object) [ ... ] PHP: unset($strcoc[1]); setcookie("filtername",json_encode($strcoc));
Спасибо, вышло вот так, но что-то все равно ошибки выкидывает, посмотрите пожалуйста, не могу понять из-за чего, уже разные вариации пробовал...: PHP: $strcoc=json_decode(stripslashes($_COOKIE['filtername'])); if(isset($_POST['namep']) && isset($_POST['price'])) { $strcoc[] = (object) [ "name" => $_POST['namep'], "price" => $_POST['pricep'], ]; } setcookie("filtername",json_encode($strcoc)); echo "<ul>"; foreach($strcoc as $k => $val){ echo <<<HTML <li>Name - {$val->name} <span>Price - {$val->price}</span> <form method="post"><input type="hidden" name="delid[{$k}]" value="{$k}"><input type="submit" name="delb[{$k}]" value="Del."></form></li> HTML; if(isset($_POST['delb'][$k])){ unset($strcoc[$_POST['delid'][$k]]); setcookie("filtername",json_encode($strcoc)); } } echo "</ul>"; Скрин ошибок https://prnt.sc/imgr5p
Пустые заголовки говорят о том что ты добавил форму с пустым input (хотя учитывая попытку получить свойство не объекта это старые данные до того как код заработал) можно еще делать не isset($_POST['namep']) a просто $_POST['namep'] или $_POST['namep'] != '' или strlen($_POST['namep']) > 2 Не возможно изменить заголовок говорит о том что ты пытаешься перезаписать заголовок после вывода контента. Куки это html заголовок он отдается в самом начале PHP: if(isset($_POST['delb'][$k])){ unset($strcoc[$_POST['delid'][$k]]); } setcookie("filtername",json_encode($strcoc)); echo "<ul>"; foreach($strcoc as $k => $val){ Может тебе лучше установить magento?)