Составление запросов для данных из формы (checkbox, radio, text и т.д.)

Pavel_Mpscow

Новичок
Составление запросов для данных из формы (checkbox, radio, text и т.д.)

Добрый день!
Есть ли какой-нибудь общепринятый алгоритм для составления длинного запроса для данных, введенных из большой формы, где много чекбоксов, радиокнопок и просто текстовых полей, с учетом того, что некоторые параметры могут пользователем не указываться (и в запрос не передаваться), и, соответственно, AND или OR перед соответствующими полями быть не должно.
То есть WHERE checkbox1[1]=x OR checkbpx1[2]=y AND radiobutton1=z AND (а вот следующий чекбокс вообще не отмечен, соответственно AND ставить не нужно)...

Как это сделать, кроме как использовать глобальную переменную-флаг в функциях, составляющих кусочки запроса (если первое условие в запросе, AND не ставим (WHERE checkbox1[1]=x), а если не первое, то ставим (....AND checkbox2[1]=y)
?
 

Фанат

oncle terrible
Команда форума
записывать готовые условия в массив, которому потом сделать join
вот только зачем здесь функции - я не понял. по функции на каждый параметр пишется?
 

Pavel_Mpscow

Новичок
Ок, спасибо!
Функции - чтобы составлять кусочек запроса в зависимости от названия поля и условия (AND или OR)
 

Фанат

oncle terrible
Команда форума
ну так вот мне и непонятно, зачем нужна функция, чтобы составлять кусочек запроса в зависимости от названия поля.

-~{}~ 04.11.08 13:32:

а про условия (AND или OR) - это ты пошутил?
 

Pavel_Mpscow

Новичок
Вот что мне нужно.

WHERE параметр_из_массива_чекбокс1=x OR параметр_из_массива_чекбокс1=y AND параметр_из_массива_чекбокс2=a AND
параметр_из_массива чекбокс2=b AND параметр_из_радиокнопки=c AND
параметр_из_текстового_поля<d AND....

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

Фанат

oncle terrible
Команда форума
и ты надеешься получить от этого запроса что-то осмысленное?
попробуй, посмеешься.

про функции я так и не понял, зачем они нужны.
 

Pavel_Mpscow

Новичок
это работает, хотя сейчас вручную прописана обработка каждого параметра для создания соответствующей части запроса (хотя, наверное, можно обойти все ключи из _ПОСТ, но некоторые введенные параметры еще дополнительно обрабатываются на предмет ошибок и т.д., поэтому все равно обработку нужно вручную описывать)

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

PuMi

Новичок
$de=array_keys($_POST['checkbox1']);

for ($i = 0; $i < count($de); $i++) {
print $de[$i]
}

-~{}~ 04.11.08 15:14:

не так понял

просто в конец запроса добавь очевидный параметр например
"ok=1"

$t1=" checkbox1[1]=x and ";
$t1=" checkbox1[2]=y and ";

$stro=$t1.$t2;

$query = "SELECT * FROM $table Where $stro ok='1'";
 

Фанат

oncle terrible
Команда форума
"Это" не работает.
Речь сейчас не о составлении запроса, а о самом запросе, уже составленном. Тот, который ты здесь привел, будет искать все, что угодно, но толко не то, что надо.

наверное, можно обойти все ключи из _ПОСТ
нет, нельзя.

или можно каким-то другим способом общий запрос
нет, нельзя.
ну ты же сам понимаешь, что параметры все разные, и обрабатываются по-разному.
если у тебя по определению 20 условий в форме, то какая проблема написать 20 условий в скрипте?
я понимаю, что тебе, как начинающему программисту, не нравится набор правил в столбик, хочется завернуть их в цикл. но чтобы завернуть в цикл, надо формализовать. Чтобы формализорвать надо написать в 10 раз больше кода, чем условия в столбик. Оно тебе надо?

Непонятно только почему для составления параметров используется функция. Почему нельзя просто написать
if (трали-вали) $кусок_запроса="тому-то".
зачем ради одной строчки функцию городить?
 

Pavel_Mpscow

Новичок
Автор оригинала: PuMi

просто в конец запроса добавь очевидный параметр например
"ok=1"

$t1=" checkbox1[1]=x and ";
$t1=" checkbox1[2]=y and ";

$stro=$t1.$t2;

$query = "SELECT * FROM $table Where $stro ok='1'";
Разве можно запрашивать несуществующий параметр ?
Мне выдается ошибка, что столбца ok нет (т.к. его нет).

-~{}~ 04.11.08 21:24:

Автор оригинала: *****
"Это" не работает.
Речь сейчас не о составлении запроса, а о самом запросе, уже составленном. Тот, который ты здесь привел, будет искать все, что угодно, но толко не то, что надо.
У меня ищет то, что нужно. Не понял, что неправильного в нем ?

нет, нельзя.

нет, нельзя.
ну ты же сам понимаешь, что параметры все разные, и обрабатываются по-разному.
если у тебя по определению 20 условий в форме, то какая проблема написать 20 условий в скрипте?
я понимаю, что тебе, как начинающему программисту, не нравится набор правил в столбик, хочется завернуть их в цикл. но чтобы завернуть в цикл, надо формализовать. Чтобы формализорвать надо написать в 10 раз больше кода, чем условия в столбик. Оно тебе надо?
Непонятно только почему для составления параметров используется функция. Почему нельзя просто написать
if (трали-вали) $кусок_запроса="тому-то".
зачем ради одной строчки функцию городить?
if - что проверяется ?
Т.к. названия полей ввода не совпадают с названиями полей, по которым осуществляется поиск (это для тех полей, где выбор значений ENUM (перечисление с AND) или SET (перечисление с OR ), а данные, введенные как текст, должны проверяться и исправляться в случае ошибок.
 

Фанат

oncle terrible
Команда форума
Разве можно запрашивать несуществующий параметр ?
нельзя. товарищ имел в виду ламерский код 1=1, но даже с ним не справился.
У меня ищет то, что нужно. Не понял, что неправильного в нем ?
сложно судить по запросу, который ищет параметр_из_радиокнопки.
Был бы реальный запрос - можно было бы ответить более конеретно - что неправильного.
У тебя либо другой запрос, либо в базе недостаточно данных, и ты просто не видишь ошибок в поиске.
if - что проверяется ?
поле из формы.

Т.к. названия полей ввода не совпадают с названиями полей
это никак не мешает написать просто if. даже наоборот. в каждом ифе писать нужное имя поля. очень удобно
а данные, введенные как текст, должны проверяться и исправляться в случае ошибок.
че там проверять-то? какие могут быть ошибки в текстовом поле? но если даже и исправлять что-то, я все равно не понимаю, зачем здесь функции. у тебя одна функция на все проверки, или для каждой разная?
 

PuMi

Новичок
Автор оригинала: Pavel_Mpscow
Разве можно запрашивать несуществующий параметр ?
Мне выдается ошибка, что столбца ok нет (т.к. его нет).
так сделай его)). я в пример привел
 

Pavel_Mpscow

Новичок
Автор оригинала: *****
нельзя. товарищ имел в виду ламерский код 1=1, но даже с ним не справился.

сложно судить по запросу, который ищет параметр_из_радиокнопки.
Был бы реальный запрос - можно было бы ответить более конеретно - что неправильного.
У тебя либо другой запрос, либо в базе недостаточно данных, и ты просто не видишь ошибок в поиске.
В смысле, нужно отдельные условия обнести скобками (xxx=zzz OR xxx=yyy) AND (xxx2=zzz2 OR xxx2=yyy2) .... ?
Радиокнопка передает в _POST значение массива ..name=_radio[] value="1" (к примеру, [_radio] => Array ( [0] => 1 ) , а этому номеру соответствует значение из ENUM в столбце.



IF поле из формы.
это никак не мешает написать просто if. даже наоборот. в каждом ифе писать нужное имя поля. очень удобно
Не очень понял. IF здесь для того, не пустой ли параметр/массив параметров ?


че там проверять-то? какие могут быть ошибки в текстовом поле? но если даже и исправлять что-то, я все равно не понимаю, зачем здесь функции. у тебя одна функция на все проверки, или для каждой разная?
Не все поля текстовые. Неправильные данные в текстовом поле исправляются (в данный момент) в самом PHP с помощью функции.

-~{}~ 05.11.08 00:59:

Автор оригинала: PuMi
так сделай его)). я в пример привел
Понятно, но имхо лишнее незачем вводить, я пока AND буду расставлять через сведение кусочков в массив и implode.
Хотя на скорость эти варианты не проверял.
 

Фанат

oncle terrible
Команда форума
Какая разница - нужно или не нужно? У тебя до сих пор было как - со скобками, или без?
Не очень понял. IF здесь для того, не пустой ли параметр/массив параметров ?
Ну да. Ты же об этом и спрашивал. Только непонятно, что тебе непонятно - ведь в функции у тебя все равно эта проверка стоит.
Не все поля текстовые. Неправильные данные в текстовом поле исправляются (в данный момент) в самом PHP с помощью функции.
Ты так и не ответил на вопрос, одна у тебя функция, или разные. Ну да и фиг с тобой, мне уже надоело.

на скорость эти варианты не проверял.
Не надо. Ничего. на скорость. проверять.
 
Сверху