Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 2 / 1
Регистрация: 27.06.2021
Сообщений: 37

Добавить запись в БД

07.02.2023, 12:13. Показов 549. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю интернет-магазин. Необходимо сохранить в БД товары, которые пользователь закинул в корзину и решил купить. На PHP отправляется id товаров и их количество в формате: {"58":1,"60":1,"61":2}. Структура таблицы во вложениях. При нажатии кнопки "оформить заказ", товары должны сохраниться в БД, но товары не сохраняются.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function saveBooks() {
    $conn = connect();
    $cart = $_POST['cartUser'];
    $cartUser = (json_decode($cart, true));
    for ($i = 0; $i< count($cartUser); $i++) {
        $book_id = $cartUser[i];
        $quanity = $cartUser[i].value;
        $sql = "INSERT books_buying(book_id, buy_id, quanity) VALUES ('$book_id', 1, $quanity) ";
       
        if(mysqli_query($conn, $sql)){
            echo "Данные успешно добавлены";
        } else{
            echo "Ошибка: " . mysqli_error($conn);
        }
        
    }
    mysqli_close($conn);
}
Миниатюры
Добавить запись в БД  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2023, 12:13
Ответы с готовыми решениями:

Четыре кнопки на форме: добавить запись, удалить запись, закрыть, найти запись
Private Sub КнопкаДобавитьЗапись_Click() On Error GoTo Err_КнопкаДобавитьЗапись_Click DoCmd.GoToRecord , , acNewRec ...

Добавить запись, если запись существует, то обновить данные
Добрый день, форумчане! Подскажите, пожалуйста, как выполнить запрос к базе MSSQL так, чтобы при существующей записи - данные...

Составить программу с помощью которой можно добавить запись, удалить запись и распечатать дешевое издание.
program _file_LB7_Zeleniuk; type zurnal=record name:string; tiraz:integer; vartist:integer; end; var f:file of zurnal; ...

7
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,874
07.02.2023, 13:58
Там должен быть ассоциативный массив, так что используйте foreach.

И пробуйте "упаковывать" по несколько записей в один запрос. Или, если есть ограничение на "размер корзины", можно добавлять все ее содержимое одним запросом.

Добавлено через 57 секунд
В заказе нужно хранить стоимость товара на момент покупки.
1
Эксперт PHP
 Аватар для liris
4366 / 1007 / 152
Регистрация: 16.01.2023
Сообщений: 2,498
07.02.2023, 14:00
Цитата Сообщение от Aletom Посмотреть сообщение
$cartUser[i]
Эта запись у вас некорректна.
PHP должен выбрасывать ошибку (если у вас вывод ошибок отключен - не ленитесь заглядывать в error_log).

В целом я бы посоветовал:
1) использовать foreach вместо for
2) убрать запрос из цикла, можно сформировать массив данных на добавление и подставить в запрос один раз
3) использовать prepared statements, чтобы не получить SQL-инъекцию на ровном месте
1
Заблокирован
07.02.2023, 17:37
Цитата Сообщение от Aletom Посмотреть сообщение
VALUES ('$book_id', 1, $quanity)
$book_id добавляется как строка, хотя это int. Вторым значением постоянно добавляется единица, а по структуре buy_id, которое имеет уникальное значение. Больше одной записи никогда не добавится.
1
3 / 2 / 1
Регистрация: 27.06.2021
Сообщений: 37
07.02.2023, 18:14  [ТС]
POSE,
Цитата Сообщение от POSE Посмотреть сообщение
$book_id добавляется как строка, хотя это int
Исправил. Спасибо. (Единица была введена умышлено для тестирования. В будущем буду отправлять id пользователя или что-то подобное)
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,874
07.02.2023, 18:59
Цитата Сообщение от Aletom Посмотреть сообщение
Исправил. Спасибо.
Можно было не исправлять. По крайней мере пока не дойдете до использования подготовленных выражений.

Добавлено через 3 минуты
В общем случае в MySQL любые значения записываются в кавычках. Пока можно и $quanity заключить в кавычки. И даже 1.
1
Заблокирован
07.02.2023, 19:54
Цитата Сообщение от estic Посмотреть сообщение
В общем случае в MySQL любые значения записываются в кавычках.
Я бы сказал - допускается. Но, не все с вами согласятся https://metanit.com/sql/mysql/3.1.php
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
07.02.2023, 22:11
Лучший ответ Сообщение было отмечено Aletom как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$json = filter_input(INPUT_POST, "cartUser", FILTER_SANITIZE_STRING);
if(($json !== null || $json !== false)
    && is_array($jsonData = @json_decode($json, true)) && count($jsonData)) {
    $sql = [];
    foreach($jsonData as $book_id => $quanity) {
        $quanity = (int)$quanity;
        $book_id = (int)$book_id;
        $sql[] = "($book_id, 1, $quanity)"; 
    }
    
    $sql = 'INSERT books_buying(book_id, buy_id, quanity) VALUES ' . PHP_EOL . implode(','.PHP_EOL, $sql) .';';
    
    if(mysqli_query($conn, $sql)){
        echo "Данные успешно добавлены";
    } else{
        echo "Ошибка: " . mysqli_error($conn);
    }
} else {
    echo "Ошибка: Массива";
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2023, 22:11
Помогаю со студенческими работами здесь

Нужно добавить кнопку Добавить запись
Подключил бд access уже заполненую. Нужно добавить кнопку, с помощью которой выводится еще одна форма, с помощью которых можно будет...

Вывести из файла определённую запись, и добавить запись в середину файла скопировав его в обратном порядке
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;locale.h&gt; using namespace std; class name { private: ...

Код обработки событий на нажатие кнопок "Добавить запись в БД" и "Найти запись" в Access
Уважаемые программеры. Я - лузер. Очень нужна ваша помощь! Иначе пропаду. Помогите написать код обработки событий на нажатие кнопок...

Добавить Запись
У меня ленточная форма. Внедрена кнопка &quot;Добавить Запись&quot;. Подскажите, пожалуйста, как убрать ленту добавления записи, ту что со...

Добавить запись в БД
Всем доброго времени суток. Задача - добавить по записи в две таблицы. Cтруктуры этих двух таблиц во вложении. Возникает ошибка: ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru