Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Выборка из БД по нескольким полям


Автор: Rangosik 21.5.2013, 14:10
Друзья, в БД 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']);
        }    
            



Автор: Zorak 21.5.2013, 15:35
Доработай
Код

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);
}


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

Автор: Rangosik 25.5.2013, 16:09
Честно,не очень понял.я новичок=(((((( smile 

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

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 ...... }


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

Автор: Rangosik 27.5.2013, 11:23
 smile Выдал ошибку 
parse error:syntax error,unexpected T_FOREACH in result.php on line 81.

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

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

Автор: Zorak 27.5.2013, 19:55
На две строки выше есть строчка
Код

$i = 0


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

$i = 0;

Автор: 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 

Автор: Zorak 29.5.2013, 10:46
Цитата(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 или еще чтото на этом подобии....

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

Автор: Rangosik 29.5.2013, 19:54
419155046 аська
http://vk.com/mihailov91 контакт. Стучись ,буду ждать smile  smile  smile 

Автор: Zorak 29.5.2013, 20:48
Аськи нету, да и ставить не буду.. Написал в контакт. Жду ответа от тебя)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)