Как использовать массив в качестве переменной для SQL-запроса?

NiC

Буратино был тупой
Как использовать массив в качестве переменной для SQL-запроса?

Профессионалы, выручайте!

Исходные - есть форма с массой чекбоксов.
Допустим их 20 штук, стоят они в 2 ряда. Правый ряд это "from", а левый это "to". При сабмите получается два массива, в каждом разное количество значений. Как правильно написать SQL запрос, что бы в базе искалось по каждому из значений массива?

Заранее спасибо.
 

Фанат

oncle terrible
Команда форума
Вопрос в чем?
как правильно написать запрос, чтобы искалось, или как СОСТАВИТЬ запрос из данных формы?
Как сам запрос должен выглядеть, ты себе представляешь?
 

NiC

Буратино был тупой
как СОСТАВИТЬ

а как он должен выглядеть, я и сам не пойму, поэтому и спрашиваю



Извиняюсь за свою тупость.
 

Фанат

oncle terrible
Команда форума
Значит, сначала тебе надо, все-таки, узнать, как запрос должен выглядеть?
Ибо, согласись, довольно глупо писать некую строку, не зная, как она должна выглядеть? :)
 

Tarakan

Новичок
if (count($from))
foreach ($from as $key=>$value)
$where .= " and $key='$value' ";

$sql = "select * from table_name where 1 $where";

предполагается, что
<input type=checkbox name="from[field1]">
<input type=checkbox name="from[field2]">
....

запрос будет типа:
$sql = "select * from table_name where 1 and field1='on' and field2='on' ";
 

NiC

Буратино был тупой
Ок, сейчас попробую изобразить:
запрос типа SELECT * FROM table WHERE from LIKE(или всё же знак равно ставить?) $array(вот этот злополучный массив с несколькими переменными внутри)

Так более удобоваримо?

-~{}~ 19.10.04 17:26:

Автор оригинала: Tarakan
if (count($from))
foreach ($from as $key=>$value)
$where .= " and $key='$value' ";

$sql = "select * from table_name where 1 $where";

предполагается, что
<input type=checkbox name="from[field1]">
<input type=checkbox name="from[field2]">
....

запрос будет типа:
$sql = "select * from table_name where 1 and field1='on' and field2='on' ";
Не совсем.
Ведь чекбоксов 10, а отмечено может быть кол-во от 0 до 10.
Или ты предлагаешь писать запрос с 10 ключами?
 

Фанат

oncle terrible
Команда форума
Так более удобоваримо?
Нет.
что это такое - LIKE $array ???
где растет такой синтаксис?

По поводу кода от Tarakan, я повторюсь.
Только идиот будет писать программу для составления строки, НЕ ЗНАЯ, как она должна выглядеть.

-~{}~ 19.10.04 18:30:

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

NiC

Буратино был тупой
2 Фанат:
Какой инфы не хватает?

По поводу идиота, пишущего прогу, могу лишь сказать, что требование от начальства, которое не обсуждается. :(

>что это такое - LIKE $array ???
вот и я о чём!
Я не могу даже придумать, как это должно выглядеть.

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

Фанат

oncle terrible
Команда форума
Какой инфы не хватает?
вообще всей.
что должен запрос искать и где.
какова структура таблицы.
По поводу идиота, пишущего прогу
Повторяю, для тех, кто не понял.
Тдтотом является не тот человек, который пишет прогу.
А тот, который пишет ее, не зная, что она должна делать.
Доступно? или все еще нет?
Я не могу даже придумать, как это должно выглядеть.
Думать не надо.
Надо учить синтаксис SQL
А если ты хочешь чтобы за тебя это сделали другие, то хотя бы дай им исходные данные.
Запрос должен вытащить из базы все записи, имеющие любое значение
Записи значений не имеют.
Значения имеют поля.
 

NiC

Буратино был тупой
Не хочу я готового решения.
Мне бы понять, куда копать.
 

Фанат

oncle terrible
Команда форума
копать в сторону элементарного синтаксиса SQL
если тебе нужно найти все строки, поле pole которых равно 1, то ты пишешь
where pole=1
если нужно , чтобы находило и поля, равные 1, и поля, равные 2, то можно написать
where pole=1 OR where pole=2
если таких вариантов много, то можно написать
where pole IN (1,2,3,4,5)
 

c0r0ner

Новичок
а если у тебя в массиве все хранится тогда
"... where pole IN (".implode(",",$array).") ...."
 

Dikobrazz

Guest
"... where pole IN (".implode(",",$array).") ...."
Ага... так их и запихать туда) А как же перепроверить и вылизать каждую переменную перед подстановкой в запрос?
А NiC-у сначала надо было сказать про структуру базы и передаваемых формой данных.
 

Oscar

Новичок
Dikobrazz
переменные можно проверить между тем, как читать их из массива $_REQUEST и писать в $array

Фанат, c0r0ner,
Посмотрел документацию - полезная вещь этот IN, может и мне когда-то пригодится, спасибо!
 

Jok

Guest
Лучше уж использовать в форме method="post" и потом брать переменные из $_POST
просто POST сложнее подделать...

А что значит проверить переменную ? не выбранный чекбокс не передаеться при сабмите...
насколько я понял тебе надо что-то типа этого...
$sql_array = array();
if(count($from))
{
foreach($from as $key => $value)
{
тут можно проверить как надо переменную
$sql_array[] = $value;
}
}
$DB->query('SELECT * FROM table WHERE from IN('.implode(',',$sql_array).')');
 

Jok

Guest
2 Фанат
Никакое.
Я имел ввиду разницу между POST и GET...
 

Фанат

oncle terrible
Команда форума
Больше такого никогда не пиши.
Пожалей других посетителей - они же со смеху умрут :)
 

Jok

Guest
2 Фанат

Ну если тебе смешно то ради бога...
Просто если учесть совокупные усилисия по именению запроса GET и POST то пост будет посложнее(тут же страницу надо сохранять на диск)...
а GET можно прямо в строке.....
так что не надо принимать все слова слишком буквально а отновситься чуток с юмором ;)
 

Фанат

oncle terrible
Команда форума
То, что ты сейчас написал - это детский лепет.
И если с начала я действительно отнесся с юмором, то сейчас я этого сделать не могу.
Мне очень печально, что вместо того, чтобы принять к сведению и мотать на ус, ты начал лепетать про совокупные усилия.
которые вообще не имеют никакого отношения к защите, поскольку метод отправки во-первых, НИКАКОЙ защиты не обеспечивает и защита делается совсем другими средствами, а во-вторых, выбор метода отправки данных определяется совершенно другими и совершенно определенными критериями.

А теперь посмотрим, что ты ответишь.
И я очень надеюсь, что это будет правильный ответ.
 
Сверху