Жесть, что-то я уже совсем запутался)) сделал вот так: PHP: if($_POST['namep'] != "" or $_COOKIE['filter2'] != null) {//выполнять только если был пост запрос или есть не пустые куки $strcoc=json_decode(stripslashes($_COOKIE['filter2'])); if($_POST['namep'] != "" and $_POST['pricep'] != "") { $strcoc[] = (object) [ "name" => $_POST['namep'], "price" => $_POST['pricep'], ]; } setcookie("filter2",json_encode($strcoc)); foreach($strcoc as $k => $val){ if(isset($_POST['delb'][$k])){//если отправили delb , то выполнять удаление из массива ключа под номером $k unset($strcoc[$_POST['delid'][$k]]); setcookie("filter2",json_encode($strcoc)); } echo <<<HTML <div>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></div><br/> HTML; } } Теперь без поста и без куков пишет ошибку Notice: Undefined index: namep in и Notice: Undefined index: filter2, а если отправляю пост с формы с данными, то первый раз выводит, и после обновления страницы не сохраняет, в куки перестало сохранять, ппц запутался уже)) Хех, magento) я учусь пока что, пытаюсь понять что и как
ты прав все плохо $_COOKIE['filter2']!=null убери setcookie("filter2",json_encode($strcoc)); только один раз перед foreach if(isset($_POST['delb'])) unset($strcoc[$_POST['delb']]); только один раз перед setcookie
Выкидывает ошибку Notice: Undefined index: namep on line 5 PHP: if($_POST['namep'] != "") { $strcoc=json_decode(stripslashes($_COOKIE['filter2'])); if($_POST['namep'] != "" or $_POST['pricep'] != "") { $strcoc[] = (object) [ "name" => $_POST['namep'], "price" => $_POST['pricep'], ]; } if(isset($_POST['delb'])){ unset($strcoc[$_POST['delid']);//с этой строкой выкидывает 500 ошибку } setcookie("filter2",json_encode($strcoc)); foreach($strcoc as $k => $val){ echo <<<HTML <div>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></div><br/> HTML; } } Если я удаляю $_COOKIE['filter2']!=null проверку в самом начале, как же тогда ничего не выводить если куки и пост запрос пустые?(они изначально до отправки пустые могут быть, но уже как отправят формы - сохраняеться)
Ну если они пустые то ничего и не выведется а проверка на присвоение уже есть ниже if($_POST['namep'] != "" or $_POST['pricep'] != "") { Notice: Undefined index: namep on line 5 не знаю. не должно быть. Выше идет проверка
да, я сделал вот так и работает, но теперь после удаления 1 любого элемента из массива меняет его структуру и уже перестает работать следующее добавление в массив и пишет ошибку Fatal error: Cannot use object of type stdClass as array on line 8 http://prntscr.com/imm14m добавляет индекс к элементу массива я так понял, но как сделать чтобы дальше сохраняло новые после удаления любого из элементов? подскажите пожалуйста PHP: if(isset($_POST['namep']) or isset($_COOKIE['servlist'])) { $strcoc=json_decode(stripslashes($_COOKIE['servlist'])); if(isset($_POST['namep']) or isset($_POST['pricep'])) { $strcoc[] = (object) [ "name" => $_POST['namep'], "price" => $_POST['pricep'], ]; } if(isset($_POST['delb'])){ unset($strcoc[$_POST['delid']]); } setcookie("servlist",json_encode($strcoc)); foreach($strcoc as $k => $val){ echo <<<HTML <div>Name - {$val->name} <span>Price - {$val->price}</span> <form method="post"><input type="hidden" name="delid" value="{$k}"><input type="submit" name="delb" value="Del."></form></div><br/> HTML; } } else { echo "No list."; }
Решил проблему так PHP: if(isset($_POST['delb'])){ unset($strcoc[$_POST['delid']]); $strcoc = array_values($strcoc); } , спасибо! Подскажите пожалуйста, как можно побороть дубль http://prntscr.com/imm5lq Name Price, и дубли элементов в массиве? заранее спасибо
PHP: if(isset($_POST['delb'])){ $strcoc = json_decode(**********, true); // попробуй так unset($strcoc[$_POST['delid']]); // или возможно так заработает $strcoc[$_POST['delid']] = null; }
проблему с добавлением индекса я решил так $strcoc = array_values($strcoc);, а вот с дублями можете подсказать? что-то функция array_unique не хочет работать с json... спасибо! --- Добавлено --- Точнее еще до добавления нового пост запроса как-то обработку сделать, чтобы если уже есть такой элемент в массиве, то новый не добавлять
Я тебе дам один очень классный совет который съекономит тебе много времени в будущем. https://rutracker.org/forum/tracker.php?f=1565&nm=php Используй сразу многомерные массивы тогда и удалять будет проще. Плюс сведи все или к массиву или к объекту true в последнем примере как раз будет возвращать масив а после json у тебя всегда object
@nospiou Спасибо за информацию, буду смотреть, по этой задаче осталось только дубли убрать и все мне, вот что получилось, но функция array_column выдает пустой массив array(0) { }, сможете подсказать? PHP: if(isset($_POST['namep']) or isset($_COOKIE['servlists'])) { $strcoc=json_decode(stripslashes($_COOKIE['servlists'])); if(isset($_POST['namep']) or isset($_POST['pricep'])) { $whcoc = array_column($strcoc, 'name'); $postcheck = $_POST['namep']; $checkwhcoc = array_search($postcheck, $whcoc); if($checkwhcoc !== false){ $strcoc[] = (object) [ "name" => $_POST['namep'], "price" => $_POST['pricep'], ]; }else{ echo "no"; } } if(isset($_POST['delb'])){ unset($strcoc[$_POST['delid']]); $strcoc = array_values($strcoc); } setcookie("servlists",json_encode($strcoc)); foreach($strcoc as $k => $val){ echo <<<HTML <div>Name - {$val->name} <span>Price - {$val->price}</span> <form method="post"><input type="hidden" name="delid" value="{$k}"><input type="submit" name="delb" value="Del."></form></div><br/> HTML; } } else { echo "No list."; }
Убери array_values верни все обратно и давай строку с true Там все слишком не правильно что бы исправлять) и еще перед сет куки добавь $strcoc=json_encode($strcoc); $strcoc=json_decode($strcoc); Но лучше все переписать..
А чем плох вариант в моей случае array_values? чтобы я понимал, и что в общем плохого в коде текущем, что его нужно переписать? он дорабатываться не будет в плане новых функций, просто добавил - сохранил- удалил если нужно и все
$strcoc=array_values($strcoc); ты затираешь все ключи а дальше по ключам пробуешь пройтись циклом а они уже другие у тебя уже совершенно другая переменная