Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773

как мне обновитть данные в таблице с нескольких чекбоксов

20.11.2012, 23:52. Показов 1870. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем . У меня есть таблица в которой два поля id и id_cat. id это id пользователя,а id_cat это id категории. Так вот я хочу сделать несколько чекбоксов с названиями категорий, что бы пользователь мог обновлять данные категорий. Если пользователь с id=1 выбрал категорию 1, 4 и 5 по таблица должна быть вот такая
id id_cat
1 1
1 4
1 5
Я знаю что перед обновлением надо удалить все данные c id пользователя, это я сделаю, но как занести данные с чекбоксов я не знаю. Зарание большое спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2012, 23:52
Ответы с готовыми решениями:

Как обновить данные в нужной мне таблице mdb файла?
Подскажите пожалуйста чайнику (то есть мне) как правельно программным путем обновить данные в нужной мне таблице mdb файла, из таблицы...

Как вытащить данные из нескольких строк в таблице в одну переменную?
Например, у нас в таблице есть столбец что хранить простые числа, таких записей несколько, как вытащить эти числа и записать как...

Кто мне поможет . Заполненые данные в таблице дублируетьца
Кто мне поможет . Заполненые данные в таблице дублируетьца. Сколько добовляю дублирует одну и тужу данную одну . во все строки в таблице. ...

20
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
21.11.2012, 00:13
Если у вас первичный ключ по двум полям, то можно не удалять, вместо INSERT можно юзать REPLACE.

А в чекбоксах... просто передавайте ID отмеченных категорий и в пхп составляйте запрос исходя из полученных ID только либо внешние ключи нужно обозначить в таблицах либо проверку делать перед добавлением, на существование категории...
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
21.11.2012, 00:32  [ТС]
Я не понимаю как это можно сделать, в случае когда один запрос все понятно, получаем данные запихиваем в запрос и все, но а здесь надо запихать все поочередно что ли или в цикле надо писать запрос. Если можно поясните поподробней. Зарание большое спасибо
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
21.11.2012, 00:39
Цитата Сообщение от Братуха Посмотреть сообщение
что ли или в цикле надо писать
А почему бы нет? Вы же выводите содержимое с таблиц в цикле, почему бы не сделать запрос в цикле. Только не цикл запросов! а запрос сформировать циклом. 1 запрос.
SQL
1
2
3
INSERT ..... VALUES
(...), -- строка 1
(...) -- строка 2;
Создайте массив строк на добавление, потом объедините их с помощью implode через запятую, а впереди подставьте запрос
SQL
1
INSERT INTO `tables` VALUES
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
21.11.2012, 21:59  [ТС]
У меня чего-то не выходит вот скрипт
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$user_id = 1;   
if (isset($_POST['tr']))
{
    $ins = array();
    foreach ($_POST['tr'] as $pos => $data)
    {
        if (is_array($data))
        {
            foreach ($data as $answer)
            {
                $ins[] = '('.$user_id.', '.(int)$pos.')';
            }
        }
    }
    if (count($ins))
    {
        $q = "INSERT INTO `user_cat` (`id`, `id_cat`) VALUES ".implode(', ', $ins);
        mysql_query($q);
    }
}
а вот html
HTML5
1
2
3
<input name="tr[]" value="1" type="checkbox"> первая
<input name="tr[]" value="2" type="checkbox"> вторая
<input name="tr[]" value="3" type="checkbox"> третья
таблица у меня называется user_cat в ней поля id(пользователя) и id_cat(категории). Зарание большое спасибо
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
21.11.2012, 23:08
Цитата Сообщение от Братуха Посмотреть сообщение
foreach ($data as $answer)
это что? как минимум эта переменная не где не используется

видимо как то так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$user_id = 1;   
if (isset($_POST['tr']))
{
    $ins = array();
    if (is_array($_POST['tr']))
    {
        foreach ($_POST['tr'] as $data)
        {
            $ins[] = '('.$user_id.', '.(int)$data.')';
 
        }
    }
    if (count($ins))
    {
        $q = "INSERT INTO `user_cat` (`id`, `id_cat`) VALUES ".implode(', ', $ins);
        mysql_query($q);
    }
}
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
22.11.2012, 00:30  [ТС]
Все равно ничего не вышло
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
22.11.2012, 00:38
а что не вышло? запрос выполняется? ошибки пишет?
PHP
1
2
if (!mysql_query($q))
    echo 'SQL: ', $q, '<br/>', mysql_error();
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
22.11.2012, 00:55  [ТС]
Вот что выдало
SQL
1
2
SQL: INSERT INTO `user_cat` (`id`, `id_cat`) VALUES (1, 2), (1, 3)
Cannot ADD OR UPDATE a child ROW: a FOREIGN KEY CONSTRAINT fails (`basa`.`user_cat`, CONSTRAINT `user_cat_ibfk_2` FOREIGN KEY (`id_cat`) REFERENCES `cat` (`id_cat`) ON DELETE CASCADE ON UPDATE CASCADE)
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
22.11.2012, 01:52
Ну вам пишет что у вас вроде как в связанных таблицах нет ключа, который в запросе указан.
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
22.11.2012, 12:46  [ТС]
Теперь данные добавляются, но не зависимо выбрал ли их в чекбоксе или нет и в базе оказывается по две одинаковых записи. Вместо трех выводит шесть.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
22.11.2012, 13:06
Цитата Сообщение от Братуха Посмотреть сообщение
но не зависимо выбрал ли их в чекбоксе или нет
Если чекбокс не выбран, то он не передаётся на сервер, так что ошибка где то в коде.

Цитата Сообщение от Братуха Посмотреть сообщение
в базе оказывается по две одинаковых записи
Ну сделайте первичным ключом оба поля. И удаляйте все записи перед добавлением, что бы удалились и сброшенные.
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
22.11.2012, 16:31  [ТС]
Странно, почему-то когда я не выбрал ни одного чекбокса и жму кнопку обновить, все данные с id пользователя не удаляются. Если выбрать хоть один чекбокс все нормально. Вот скрипт
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 if($ok)
    { 
    $user_id = (int)$_SESSION['user_data']['id'];  
    $del = "DELETE FROM `user_cat` WHERE `id` =".$user_id;
if (isset($_POST['tr'])&& is_array($_POST['tr']))
{
    
    mysql_query($del);
    $ins = array();
    if (is_array($_POST['tr']))
    {
        foreach ($_POST['tr'] as $data)
        {
            $ins[] = '('.$user_id.', '.(int)$data.')';
 
        }
    }
    
    if (count($ins))
    {
        $q = "INSERT INTO `user_cat` (`id`, `id_cat`) VALUES ".implode(', ', $ins);
        mysql_query($q);
    }
}}
Зарание большое спасибо.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
22.11.2012, 16:37
а что такое $ok?
по коду не видно
0
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
22.11.2012, 16:41  [ТС]
$ok это нажатая кнопка.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
22.11.2012, 16:43
Ну покажи код? Который присваивается переменной $ok.
В данном коде $ok это не существующая переменная
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
22.11.2012, 16:48  [ТС]
Это находится файле конфигураций
PHP
1
 $ok   = !empty($_POST['ok'])?true:false;
;
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
22.11.2012, 16:56
Цитата Сообщение от Братуха Посмотреть сообщение
PHP
1
$ok * = !empty($_POST['ok'])?true:false;
Зачем там условие?
просто
PHP
1
$ok = !empty($_POST['ok']);
И заметьте, в коду у вас выполняется запрос на удаление в 8 строке.
А в 5ой проверка отмечен ли хоть один чекбокс.
Если 5 не выполнится то и 8 тоже
1
 Аватар для Братуха
5 / 5 / 5
Регистрация: 15.07.2012
Сообщений: 773
22.11.2012, 17:27  [ТС]
С начало я запрос написал в проверке есть ли хоть один чекбокс, а потом посмотрел что не правильно и перенес его выше, а про mysql_query($del); забыл. У меня К Вам еще один вопрос тоже связан с этой таблицей. Я делаю поиск пользователей по тем самым категориям которые Вы мне помогли обновить. У меня есть запрос но он не правильно составлен вот он
MySQL
1
SELECT a.name, a.id FROM user_cat c JOIN users a ON a.id=c.id JOIN cat b ON b.id_cat = c.id_cat AND b.cat IN ("первая","вторая", "третья", "четвертая")
Здесь связанно три таблицы:

users (id(пользователя), name(имя пользователя).......)
cat (id_cat(категории), cat(название категории))
user_cat(id_cat(категории) и id(пользователя)) с этой таблицей мы и разбирались

По этому запросу все нормально выходит только пользователи повторяются при выборке. То есть у кого в базе есть все четыре категории он будет в поиске и встречаться 4 раза. Как мне сделать что бы пользователь у которого была одна из категорий, был выбран один раз , а не столько, сколько категорий совпало. Зарание большое спасибо
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
22.11.2012, 17:59
SQL
1
GROUP BY `a`.`id`
Добавлено через 59 секунд
Кстати, удобней сокращать по первм буквам таблицы. То есть не
SQL
1
 `user` `a`
а
SQL
1
`user` `u`
что бы потом не гадать ту ли букву вписал )
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2012, 17:59
Помогаю со студенческими работами здесь

Как мне сделать, чтобы при нажатии на блок 2 в 1 таблице, в нижней таблице высвечивалась информация по этому блоку
Программа на С#

Как лучше сохранить данные чекбоксов?
Доброго времени суток! У меня в программе, на одной форме, есть 50+ чекбоксов и мне надо чтобы при повторном открытии формы, чекбоксы...

Treeview данные от нескольких checkbox передать в запись в таблице
Здравствуйте! Есть БД, частью функционала которой является учет посещений сотрудниками населенных пунктов. С указанием административной...

Как сохранить данные в одной строке из группы чекбоксов?
Доброго времени суток. Совсем недавно занялась программированием, и тут же возникла проблема. Как сохранить отметки в группе чекбоксов...

Как взять данные из чекбоксов с динамическими именами в цикле?
Доброго времени суток! Возникла проблема и не сумел справиться с ней сам. В общем: Есть файл обработчик подгружающий названия...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru