Задать вопрос
@Gesha946
Познаю азы PHP

Запрос SQL на добавление записи?

Добрый день, товарищи. Имеется рабочий запрос на добавление записи в БД. Почему рабочий? Потому что он работал, пока не увеличилось количество переменных.
Собственно сам запрос:
$name = $_POST['name'];
$content = $_POST['content'];
$price = ['price'];
$sale = ['sale'];
$thumb = $_POST['Thumbnail'];
$smallContent= $_POST['smallContent'];

$query = "INSERT INTO `orders` ( `name`, `content`, `price`, `sale`, `image`, `smallContent` ) VALUES ('$name', '$content', '$price', '$sale', '$thumb', '$smallContent')";
// запрос на добавления записи//
mysqli_query($link, $query) or die(mysqli_error($link));

if(!$query) {
	echo "<h1 style='text-align: center'>Ошибка добавления товара</h1>";
} else {
	echo "<h1 style='text-align: center'>Товар добавлен</h1>";
}

?>

Вот что он мне отвечает:
"Warning: Array to string conversion in C:\Users\users\Desktop\xamp\htdocs\public_html\admin\create-order.php on line 74"

Говорит Предупреждение: преобразование массива в строку в C:\Users\users\Desktop\xamp\htdocs\public_html\admin\create-order.php в строке 74.
Может ли на это повлиять количество переменных?
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 10 комментариев
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
кажется, вместо
$price = ['price'];
$sale = ['sale'];

надо бы
$price = $_POST['price'];
$sale = $_POST['sale'];


а сам запрос переделать хотя бы на prepared statements https://www.php.net/manual/en/mysqli.quickstart.pr... чтобы не создавать уязвимости на пустом месте

заодно почитать про xss и про https://www.php.net/manual/en/function.strip-tags.php если потом этот контент выводится напрямую
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Verkans
Классно, что вы начали изучать программирование!
Это важный шаг, и вы уже делаете что-то интересное — супер!

Позвольте дать несколько советов по вашему коду:

Возможные вопросы, которые могут у вас возникнуть:
1. Почему все пишут, что меня могут взломать?
Это правда, и дело вот в чём:
На backend’е (серверной стороне) нельзя доверять входящим данным. Любой пользователь может отправить что угодно, даже вредоносный SQL-код.

Ваш SQL-запрос:

$query = "INSERT INTO orders (...) VALUES ('$name', ...)";
Работает, но он уязвим для SQL-инъекций. Это одна из самых распространённых дыр в безопасности сайтов.

Решение: используйте подготовленные запросы (prepared statements) с mysqli или PDO. Это несложно, и вас это спасёт в будущем! Так же добавьте валидацию данных.

2. Как правильно задавать вопросы?
Чем больше информации вы даёте, тем точнее вам смогут помочь:

Какая у вас версия PHP?

Какую базу данных используете? (MySQL? PostgreSQL?)

Как вы запускаете код? (локальный сервер, хостинг, XAMPP?)

Как повторить вашу проблему?

Антон Антон уже ответил на ваш вопрос)

https://roadmap.sh/php — отличная карта навыков для изучения PHP.
https://htmlacademy.ru/blog/php/sql-injections - тут про вашу проблему с безопасностью
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы