dimastik1986
@dimastik1986
учусь

Правильно ли я перебрал массив для записи в mysql?

Правильно ли я сделал?
Нужно перебрать массив, если есть вложенные - перевести их в json, если пустые - пропустить.
И на выходе получить запрос на обновление БД
А и еще, 0 значения могут быть, пустых не должно быть

$POST - это сам массив, просто я думаю потом еще попробовать в фильтры вникнуть и пока так сделал )
foreach ($POST as $key => $value):       
	if(is_array($value)) $value =  json_encode($value);     
	if(empty(strlen($value))) continue;
	$input[$key] = $value;
endforeach;
			
$keys = implode(',', array_keys ($input)); 
$vals = implode(',', $input);

$sql = "INSERT INTO `table` ($keys) VALUES ($vals)";

с виду вроде рабочая конструкция, на первый взгял )) но я мало еще понимаю, вот прошу глянуть )
  • Вопрос задан
  • 667 просмотров
Решения вопроса 1
Minifets
@Minifets
Hello world!!!
Технически скрипт будет работать, но к нему есть много вопросов. :)

1) foreach ($POST as $key => $value):
Зачем перебирать весь POST, когда вы работаете с формой, которая записывает данные в таблицу БД. В таблице все поля жестко заданы и известны заранее, поэтому лучше перебирать не весь POST, а заранее подготовленный объект/массив только с теми ключами, которые должны быть в вашей форме.

2) Отсутствует валидация.
Помимо фильтрации пустых значений, было бы хорошо, если каждое поле проходило бы еще и валидацию данных. Т.к. мы работаем с заранее известной формой, то и можем предположить, какие данные должны быть в ней.

2.1) Добавить к валидации еще и csrf защиту.

3)
$sql = "INSERT INTO `table` ($keys) VALUES ($vals)";

Тут у вас аж 2 SQL инъекции. Первая в $keys - т.к. в post запросе можно будет добавить кастомных полей с произвольным кодом в ключах. К слову, почему нужно готовить для foreach свою форму.
Вторая в $vals. Тут нужно использовать подготавливаемые SQL запросы и в VALUES передавать ? , а не данные. А сами данные уже подставлять при извлечении подготовленного запроса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Вы запускать это не пробовали что-ли?
строки без кавычек
потенциальные возможности для sql-инъекций
зачем-то применен альтернативный синтаксис управляющих конструкций (foreach с двоеточием).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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