2015-12-13 6 views
1

Я хочу искать данные с помощью метода ajax с несколькими вариантами поиска полей (например, имя, колледж, отдел, год, гражданство e.t.c). У меня есть имя вставки для поиска, и остальные поля пусты, чем в цикле foreach, но это if (isset ($ _ GET [$ field]) & &! Empty ($ _ GET ['$ field'])) условие не выполнено успешно и пошел в другую петлюПоиск PHP с несколькими полями

$fields = array(
    'name' => TRUE, 
    'gender' => TRUE, 
    'colf' => TRUE, 
    'deptf' => TRUE, 
    'natf' => TRUE, 
    'fstatusf' => TRUE, 
    'fyearf' => TRUE 
); 
foreach ($fields as $field => $like) { 
    if (isset($_GET[$field]) && !empty($_GET['$field'])) { 
    $value = $_GET[$field]; 
    $search[] = $field . ($like ? ('LIKE "%' . $value . '%"') : ('="' . $value . '"')); 
     } 
} 
    if ($search) { 
    $sql = 'SELECT * FROM fmaf WHERE ' . implode(' or ' . $search); 
    } 

else{ 
$sql="SELECT * FROM fmaf"; 

    } 
+0

проходят только те поля ввода, которые были предоставлены пользователем – Rahul

+1

Пожалуйста, пожалуйста, пожалуйста, ** не забудьте проверить/дезинформировать ввод пользователя ** (например, '$ _GET') –

ответ

0

Наконец я нашел решение, и благодаря cFreed и другие, которые помогают мне. Моя главная задача в том, что если пользователь хочет искать с одним полем только или более чем на 1 поле в этом случае ниже ответ полезно для меня и может быть также для кого-то:

if (empty($_GET['name']) && empty($_GET['gender']) && empty($_GET['colf']) && empty($_GET['deptf']) && empty($_GET['natf']) && empty($_GET['fstatusf']) && empty($_GET['fyearf'])) 
{ 
    $sql="select * from fmaf "; 
} 
else 
{ 
$wheres = array(); 

$sql = "select * from fmaf where "; 

if (isset($_GET['name']) and !empty($_GET['name'])) 
{ 
    $wheres[] = "name like '%{$_GET['name']}%' "; 
} 

if (isset($_GET['gender']) and !empty($_GET['gender'])) 
{ 
    $wheres[] = "gender = '{$_GET['gender']}'"; 
} 

if (isset($_GET['colf']) and !empty($_GET['colf'])) 
{ 
    $wheres[] = "college = '{$_GET['colf']}' "; 
} 

if (isset($_GET['deptf']) and !empty($_GET['deptf'])) 
{ 
    $wheres[] = "department = '{$_GET['deptf']}' "; 
} 

if (isset($_GET['natf']) and !empty($_GET['natf'])) 
{ 
    $wheres[] = "nationality = '{$_GET['natf']}' "; 
} 

if (isset($_GET['fstatusf']) and !empty($_GET['fstatusf'])) 
{ 
    $wheres[] = "finalstatus = '{$_GET['fstatusf']}' "; 
} 

if (isset($_GET['fyearf']) and !empty($_GET['fyearf'])) 
{ 
    $wheres[] = "fyear = '{$_GET['fyearf']}' "; 
} 

foreach ($wheres as $where) 
{ 
$sql .= $where . ' AND '; // you may want to make this an OR 
    } 
$sql=rtrim($sql, "AND "); 

    } 
0

Вам нужно построить запрос в зависимости от запроса. Пример из игрушки это:

$sql = "select * from student where 1 = 1".(isset($name)?" AND name like '%$name%":"").(isset($country)?" AND country = '$country'":"").";"; 
0

Вы можете использовать простой способ, будучи в состоянии противостоять любому случаю, например:

// define searchable fields, with option for LIKE|EQUAL (TRUE|FALSE) 
$fields = [ 
    'name' => TRUE, 
    'country' => TRUE, 
    'address' => TRUE, 
    'gender' => FALSE, 
    'state' => FALSE 
]; 
foreach ($fields as $field => $like) { 
    if (isset($_GET[$field]) AND !empty($_GET['$field'])) { 
    $value = $_GET[$field]; 
    // prepare WHERE condition item, depending on LIKE option 
    $search[] = $field . (
     $like ? ('LIKE "%' . $value . '%"') : ('="' . $value . '"') 
    ); 
    } 
} 
if ($search) { 
    $sql = 'SELECT * FROM student WHERE ' . implode(' AND ' . $search); 
} 
+0

Я пробовал, но получаю ошибку, и, пожалуйста, см. выше, я обновил свой вопрос –

+0

@SalmanKarim. У меня может быть ошибка в коде, который я предложил (не тестировал), поэтому, пожалуйста, сообщите ** точно ** об ошибке, которую вы получите. – cFreed

+0

Вы видите выше обновленную версию вопроса? –

Смежные вопросы