Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка из БД по нескольким полям 
:(
    Опции темы
Rangosik
Дата 21.5.2013, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.5.2013

Репутация: нет
Всего: нет



Друзья, в БД 5 полей,на форме 5ть checkbox .На каждое поле по checkbox.Как сделать выборку по нескольким полям?Ведь пользователь может выбрать 1,2,3...5 полей за раз для организации поиска,и каждый раз комбинация полей может быть разная (в зависимости от выбранных чекбоксов).
Для одного поля поиск я организавал:
Код

if(isset($_POST['nam'])&&isset($_POST['searchnam']))
            {
            $stolb=$_POST['nam'];
            $searchbtn=$_POST['searchnam'];
            }
            if(isset($_POST['number'])&&isset($_POST['searchnumber']))
            {
            $stolb=$_POST['number'];
            $searchbtn=$_POST['searchnumber'];
            }
            if(isset($_POST['ct'])&&isset($_POST['searchct']))
            {
            $stolb=$_POST['ct'];
            $searchbtn=$_POST['searchct'];
            }
            if(isset($_POST['res'])&&isset($_POST['searchres']))
            {
            $stolb=$_POST['res'];
            $searchbtn=$_POST['searchres'];
            }




/*Выборка из БД*/
    $result=mysql_query("SELECT * FROM result_table WHERE $stolb='$searchbtn' ",$db);            
    $myrow= mysql_fetch_array($result);

/*Вывод данных на экран*/
        do
        {
        printf("Обучающийся № - %s<br> <strong>Имя</strong> - %s<br> <strong>Школа</strong> - %s<br> <strong> Город</strong>- %s<br><strong> Результат</strong> - %s<br>",$myrow['id'],
        $myrow['name'],$myrow['school_number'],$myrow['city'],$myrow['result']);
        }    
            



PM MAIL   Вверх
Zorak
Дата 21.5.2013, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Доработай
Код

functinon CreateFilter($data_field)
{
// Тут формируеш массив фильтров (т.е. твои выбранные поля)
if (isset($data_field['такоето_поле'])) $arFitler[] = $data_field['такоето_поле'];
if (isset($data_field['такоето_поле2'])) $arFitler[] = $data_field['такоето_поле2'];

// Или же можно через for или foreach. На твое усмотрение.

return $arFilter;


function CreateZapros()
{
   $arFilter = CreateFilter($_POST);

$sql = "SELECT * FROM table_name WHERE column1 = value1";

    foreach ($arFilter as $key => $value)
    {
        $sql .= " AND ".$key." = '".$value."'";
    }
        unset($value);  // <-- тут надо ибо $value привязывается к последнему значению, и чтобы не было потом аксцесов лучше ее удалить.

mysql_query($sql);
}


Шаблон писал з головы набыстро. Если не понял сути говори распишу более детально....


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Rangosik
Дата 25.5.2013, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.5.2013

Репутация: нет
Всего: нет



Честно,не очень понял.я новичок=(((((( smile 
PM MAIL   Вверх
Zorak
Дата 25.5.2013, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Хорошо, попробую написать под твой код. Опять же таки. Пишу без проверки, джолжно работать, Если что пиши какие ошибки выдает)
Код

if(isset($_POST['nam'])&&isset($_POST['searchnam']))
            {
              $key = $_POST['nam'];
              $arFilter[$key] = $_POST['searchnam'];
            }
            if(isset($_POST['number'])&&isset($_POST['searchnumber']))
            {
              $key = $_POST['number'];
              $arFilter[$key] = $_POST['searchnumber'];
            }
            if(isset($_POST['ct'])&&isset($_POST['searchct']))
            {
              $key = $_POST['ct'];
              $arFilter[$key] = $_POST['searchct'];
            }
            if(isset($_POST['res'])&&isset($_POST['searchres']))
            {
              $key = $_POST['res'];
              $arFilter[$key] = $_POST['searchres'];
            }

   $sql = "SELECT * FROM result_table WHERE ";
$i = 0

  foreach ($arFilter as $key => $value)
{
  if ($i > 0) $sql .= ' AND '; // В этом месте главное не загуби точку перед равно и пробелы перед AND и после.
  $sql .= "$key = '$value'"; // тут вот не провтыка точку перед равно ($sql .=) и то что $value заключено в скобки;
  $i++
}

/*Выборка из БД*/
    $result=mysql_query($sql,$db);            
    $myrow= mysql_fetch_array($result);
/*Вывод данных на экран*/
        do
        {
        printf("Обучающийся № - %s<br> <strong>Имя</strong> - %s<br> <strong>Школа</strong> - %s<br> <strong> Город</strong>- %s<br><strong> Результат</strong> - %s<br>",$myrow['id'],
        $myrow['name'],$myrow['school_number'],$myrow['city'],$myrow['result']);
        }    


Отличия от твоего кода:
1. Завместо    $stolb=$_POST['nam']; и $searchbtn[]=$_POST['searchnam']; ставится с квадратніми скобами (чтобы был массив). $stolb[]=$_POST['nam']; $searchbtn[]=$_POST['searchnam'];
2. Запрос формируется немного в другом месте (перед foreach) и в самомо foreach

Ну и в конце если надо то выводи результат в цикле for ().

З.Ы. Если массивы $stolb и $searchbtn пустые (т.е. нинкаких чеков не было выбрано), то наверное появится ошибка. Я просто не делал проверки существуют ли они и не пустые ли они.. Можешь добавить проверку типа if (!empty($stolb)) { foreach ...... }


Ну как то так ).

Это сообщение отредактировал(а) Zorak - 25.5.2013, 17:45


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Rangosik
  Дата 27.5.2013, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.5.2013

Репутация: нет
Всего: нет



 smile Выдал ошибку 
parse error:syntax error,unexpected T_FOREACH in result.php on line 81.

т.е. вот тут:
Код

foreach ($arFilter as $key => $value)

PM MAIL   Вверх
Zorak
Дата 27.5.2013, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



На две строки выше есть строчка
Код

$i = 0


Так вот, я там забыл точку с запятой поставить вконце, поставь и все пройдет)
Вот:
Код

$i = 0;


Это сообщение отредактировал(а) Zorak - 27.5.2013, 20:00


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Rangosik
Дата 28.5.2013, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.5.2013

Репутация: нет
Всего: нет



Вот такие ерорсы:
1)invalid argument supplied for foreach() in ....on line 
Код
  foreach ($arFilter as $key => $value)

2)mysql_fetch_array expects parametr 1 to be source,boolean given in..... on line
Код
 $myrow= mysql_fetch_array($result);

3)mysql_fetch_array expects parametr 1 to be source,boolean given in..... on line
Код
 while($myrow= mysql_fetch_array($result));


 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 
PM MAIL   Вверх
Zorak
Дата 29.5.2013, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Цитата(Rangosik @ 28.5.2013,  18:49)
Вот такие ерорсы:
1)invalid argument supplied for foreach() in ....on line 
Код
  foreach ($arFilter as $key => $value)

2)mysql_fetch_array expects parametr 1 to be source,boolean given in..... on line
Код
 $myrow= mysql_fetch_array($result);

3)mysql_fetch_array expects parametr 1 to be source,boolean given in..... on line
Код
 while($myrow= mysql_fetch_array($result));


 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile

1. Посмотри вывод var_dump($arFilter) в разных вариациях, т.е. есть выбранные поля, нету выбранных полей... все поля выбранны и т п...
2. Наверное тебе надо не fetch_array a fetch_object или еще чтото на этом подобии....

А вообще Скажи когда ты будеш онлайн дома сидеть, подключусь посмотрю.. решим проблему)


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Rangosik
Дата 29.5.2013, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.5.2013

Репутация: нет
Всего: нет



419155046 аська
http://vk.com/mihailov91 контакт. Стучись ,буду ждать smile  smile  smile 
PM MAIL   Вверх
Zorak
Дата 29.5.2013, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Аськи нету, да и ставить не буду.. Написал в контакт. Жду ответа от тебя)


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1008 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.