Здравствуйте еще раз, у меня появилась еще одна задача, изменить данные select multiple, искал в интернете если и находил, то не понимал, пробовал множество вариантов. Вот один из: PHP: //Если делать таким образом, то обработчик выводит данные, как нужно. if ($cat){ foreach ($cat as $t){ echo $t; } //Однако таким образом, он вносит данные только последнее выбранного значения. Почему? И как сделать, чтобы он полностью все вносил. foreach ($cat as $t){ $stmt = $db->prepare("UPDATE `test` SET `category`=:ccWHERE `user`=:lg"); $stmt->bindParam(':cc', $t); $stmt->bindParam(':lg', $USER); $stmt->execute(); } } Вот второй вариант, аналогичная проблема: PHP: //Выводит все правильно. if(count($cat) > 0) { for ($i=0; $i<count($cat); $i++) { $array = array('name' => $cat[$i]); $str = implode("", $array); echo $str; $stmt->execute(); } //Вносит только последнее выбранное значение. if(count($cat) > 0) { for ($i=0; $i<count($cat); $i++) { $array = array('name' => $cat[$i]); $str = implode("", $array); $stmt = $db->prepare("UPDATE `test` SET `category`=:ccWHERE `user`=:lg"); $stmt->bindParam(':cc', $t); $stmt->bindParam(':lg', $USER); $stmt->execute(); } }
Реализовал, пока ждал ответа. Кому нужно, вот решение. PHP: $selected_cat = $_POST['cat']; foreach($selected_cat AS $key=>$values) { $arr .= $values.","; } $result = trim($arr, ','); $stmt = $db->prepare("UPDATE `CFU` SET `category`=:category WHERE `user`=:login"); $stmt->bindParam(':category', $result); $stmt->bindParam(':login', $login); $stmt->execute();
А что ты вообще пытаешься сделать? Если связь многие-ко-многим, то это делается по-другому: https://habrahabr.ru/post/193380/
фух начинаем переписывать корректирую вариант 1 PHP: //Если делать таким образом, то обработчик выводит данные, как нужно. if ($cat){ //вынесли за цицл и поставил пробел перед where $stmt = $db->prepare("UPDATE `test` SET `category`=:cc WHERE `user`=:lg"); //не надо циклить препаре это только тормозит $stmt->bindParam(':lg', $USER); //$USER не меняется - смысл циклить ? //Однако таким образом, он вносит данные только последнее выбранного значения. Почему? И как сделать, чтобы он полностью все вносил. foreach ($cat as $t){ echo $t; $stmt->bindParam(':cc', $t); $stmt->execute(); } } что получится ? плюс этот же вариант но вот более интересный PHP: //Если делать таким образом, то обработчик выводит данные, как нужно. if ($cat){ //вынесли за цицл и поставил пробел перед where $stmt = $db->prepare("UPDATE `test` SET `category`=:cc WHERE `user`=:lg"); //не надо циклить препаре это только тормозит $db->beginTransaction(); $stmt->bindParam(':lg', $USER); //$USER не меняется - смысл циклить ? //Однако таким образом, он вносит данные только последнее выбранного значения. Почему? И как сделать, чтобы он полностью все вносил. foreach ($cat as $t){ echo $t; $stmt->bindParam(':cc', $t); $stmt->execute(); } $db->commit(); } я добавил транзакцию - в случае сбоя обновления одного из параметров - не отработается не один иногда - но не во всех задачах это бывает полезно. Я не знаю всей Вашей задачи
так же после соединения с базой данных укажи режим вывода всех ошибок $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );