Показать сообщение отдельно
  #12 (permalink)  
Старый 01.03.2016, 12:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ага, вот теперь вспомнил о чем речь была, тогда информация к размышлению:
- Истинный ариец, связей порочащих не имеет, ... )

Сообщение от AciDWarrioR
Вот как составить запрос? Ведь я не знаю какие поля появятся в $post, и как я тогда буду составлять запрос?
array_diff(array_map('trim', $_POST), ['']) - не скрывает и не переименовывает ключей, так что как были они к примеру a и b, так и останутся. Данная операция удаляет в значениях массива крайние пробелы, и удаляет пустые поля. Для многомерного массива (и такой может вернуть форма) можно использовать для этого функцию array_walk_recursive().

Вспоминайте, что выделали, методично if($_POST[station] == "empty") ..., то есть фактически устанавливая значения по умолчанию. А делать надо было так:
удалили сразу у всех значений массива пробелы крайние, после чего удалили те поля, что стали пустыми. Осталось заменить в определенном массиве хранящем значения по умолчанию, значениями пришедшими из формы (читать о функции array_replace()). Как это делается я показывал.

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

Осталось разобраться с ключами. Стоит заметить, о чем не сказал ранее, что вот так указывать имя ключа $_POST[station] нельзя, хотя РНР и не сообщит ни о чем, и выполнит. Строковые значения должны заключаться в кавычки, если их нет, значит это константа. Прежде чем выполнить условие $_POST[station], РНР будет искать среди объявленных констант константу station, а не найдя ее, примет это как строковое значение. То есть допущенную вами ошибку он исправит сам. Но если в понедельник 32 числа разработчики зарезервируют это имя в РНР, то выполнение вашего кода будет уже не предсказуемо. PHP такое написание будет воспринимать как строковое значение в случаях, если эта переменная указана в строке с двойными кавычками.

Если ключи массива также являются параметрами запроса, то их необходимо проверять и экранировать также как и значения ключей.

Сообщение от AciDWarrioR
Как мне составить запрос, если поля в БД им соответствуют: satellite и device?
Не обязательно иметь в качестве имен полей формы ключи связанные с полями в базе, можно и просто индексы, ведь и по ним можно связать соответствующие поля SQL таблицы. Но если ключи, то самое простое, это имя поля таблицы с префиксом, а соответствующего поля формы без префикса. Например, префикс полей в базе "prefix_", поля имеют имена "field_1", "field_2", "field_3" и такие будут иметь имена полей формы, а в базе хранятся в ней как "prefix_field_1", "prefix_field_2", "prefix_field_3".

После обработки пришедших данных как говорилось ранее составить запрос, например для записи, это:

$sql = 'INSERT INTO table (`prefix_' . implode('`, `prefix_', array_keys($post)) . '`) VALUES ("' . implode('", "', $post) . '")';
//получим, для примера - INSERT INTO table (`prefix_field_1`, `prefix_field_2`, `prefix_field_3`) VALUES ("text1", "text2", "text3")


Можно давать полям формы одно и тоже имя как ключа индексного массива, явно указывая индекс каждого поля. Можно вообще в качестве этого имени иметь хеш, который действителен только на время сеанса обработки формы. Главное здесь индексы, которые соответствуют порядку полей в SQL таблице. Получив индексный массив формы, отсортировав его по индексу, и получив имена полей таблицы, можно пересечением этих массивов сопоставить поля формы с полями таблицы.

В общем решений гораздо больше, чем зная что обозвали поле "male", получив его, обращаемся к SQL полю "female". Как видите во многом можно работать с полями и анонимно.
Ответить с цитированием