Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 01.03.2016, 11:02
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Сообщение от laimas
if($post = array_diff(array_map('trim', $_POST), [''])) {
    //есть заполненные поля, ключи которых и будут ссылаться на поля таблицы в условии
}
Вот как составить запрос? Ведь я не знаю какие поля появятся в $post, и как я тогда буду составлять запрос? Можешь привести пример?
Вот допустим в $post поместились такие поля:
Код:
Array ( [sat] => Terra [device] => MODIS )
Как мне составить запрос, если поля в БД им соответствуют: satellite и device?
Ответить с цитированием
  #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". Как видите во многом можно работать с полями и анонимно.
Ответить с цитированием
  #13 (permalink)  
Старый 01.03.2016, 13:46
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

laimas,
Спасибо за пояснение!
А вот такой случай: Поиск по дате и времени лежит в каком-то диапазоне, но может быть случай когда в базе данных появилась запись о снимке, но ещё не заполнены эти поля, как можно сделать, если пользователь не выбирал дату, вошли и эти значения? У меня получается так, что они не попадают в поиск по умолчанию.

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

Никак. Если объект можно идентифицировать по характеристике, но он ее не имеет, то понятно, что определить будет не возможно.
Наверное нужно исключать такие ситуации и характеристика идентификатор должна быть обязательным значением при записи.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите плагин для подсветки синтаксиса html css php js кода Кирюха =) Библиотеки/Тулкиты/Фреймворки 2 31.10.2015 06:12
Передача значений нескольких параметров из js в php TomTykver AJAX и COMET 2 13.05.2015 22:19
Передача данных с js в php juramaj AJAX и COMET 2 11.03.2015 12:42
Как передавать параметры из php скрипта в js imissyouso Общие вопросы Javascript 3 01.08.2012 18:24
Вызов PHP обработчика из JS Arfey Общие вопросы Javascript 15 07.06.2010 20:28