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

  • Автор темы Автор темы NiC
  • Дата начала Дата начала

NiC

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

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

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

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

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



Извиняюсь за свою тупость.
 
Значит, сначала тебе надо, все-таки, узнать, как запрос должен выглядеть?
Ибо, согласись, довольно глупо писать некую строку, не зная, как она должна выглядеть? :-)
 
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' ";
 
Ок, сейчас попробую изобразить:
запрос типа 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 ключами?
 
Так более удобоваримо?
Нет.
что это такое - LIKE $array ???
где растет такой синтаксис?

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

-~{}~ 19.10.04 18:30:

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

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

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

Запрос должен вытащить из базы все записи, имеющие любое значение, которое получается в массиве после сабмита на форме.
 
Какой инфы не хватает?
вообще всей.
что должен запрос искать и где.
какова структура таблицы.
По поводу идиота, пишущего прогу
Повторяю, для тех, кто не понял.
Тдтотом является не тот человек, который пишет прогу.
А тот, который пишет ее, не зная, что она должна делать.
Доступно? или все еще нет?
Я не могу даже придумать, как это должно выглядеть.
Думать не надо.
Надо учить синтаксис SQL
А если ты хочешь чтобы за тебя это сделали другие, то хотя бы дай им исходные данные.
Запрос должен вытащить из базы все записи, имеющие любое значение
Записи значений не имеют.
Значения имеют поля.
 
Не хочу я готового решения.
Мне бы понять, куда копать.
 
копать в сторону элементарного синтаксиса SQL
если тебе нужно найти все строки, поле pole которых равно 1, то ты пишешь
where pole=1
если нужно , чтобы находило и поля, равные 1, и поля, равные 2, то можно написать
where pole=1 OR where pole=2
если таких вариантов много, то можно написать
where pole IN (1,2,3,4,5)
 
а если у тебя в массиве все хранится тогда
"... where pole IN (".implode(",",$array).") ...."
 
"... where pole IN (".implode(",",$array).") ...."
Ага... так их и запихать туда) А как же перепроверить и вылизать каждую переменную перед подстановкой в запрос?
А NiC-у сначала надо было сказать про структуру базы и передаваемых формой данных.
 
Dikobrazz
переменные можно проверить между тем, как читать их из массива $_REQUEST и писать в $array

Фанат, c0r0ner,
Посмотрел документацию - полезная вещь этот IN, может и мне когда-то пригодится, спасибо!
 
Лучше уж использовать в форме 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).')');
 
2 Фанат
Никакое.
Я имел ввиду разницу между POST и GET...
 
Больше такого никогда не пиши.
Пожалей других посетителей - они же со смеху умрут :-)
 
2 Фанат

Ну если тебе смешно то ради бога...
Просто если учесть совокупные усилисия по именению запроса GET и POST то пост будет посложнее(тут же страницу надо сохранять на диск)...
а GET можно прямо в строке.....
так что не надо принимать все слова слишком буквально а отновситься чуток с юмором ;)
 
То, что ты сейчас написал - это детский лепет.
И если с начала я действительно отнесся с юмором, то сейчас я этого сделать не могу.
Мне очень печально, что вместо того, чтобы принять к сведению и мотать на ус, ты начал лепетать про совокупные усилия.
которые вообще не имеют никакого отношения к защите, поскольку метод отправки во-первых, НИКАКОЙ защиты не обеспечивает и защита делается совсем другими средствами, а во-вторых, выбор метода отправки данных определяется совершенно другими и совершенно определенными критериями.

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