2015-01-24 3 views
-1

Так что я пытаюсь создать запрос MySQL на основе ввода пользователем. У меня тонна флажков (около 50), поэтому я не хочу делать их индивидуально. Вот лишь некоторые из моих флажков:mysql-запрос на основе флажков и полей ввода

<input type="checkbox" name="check_list[]" value="ki67" /> ki67<br><br> 
<input type="checkbox" name="check_list[]" value="myc" /> myc<br><br> 
<input type="checkbox" name="check_list[]" value="mta1" /> mta1<br><br> 
<input type="checkbox" name="check_list[]" value="mvd/cd34" /> mvd/cd34<br><br> 

Я затем запустить их через PHP, чтобы сообщить пользователю, что было проверено:

if(!empty($_POST['check_list'])) { 
    foreach($_POST['check_list'] as $check) { 
     echo $check . "<br>"; 
    } 
} 

Теперь я хотел бы, чтобы запустить их через процесс MySQL для отображения сколько строк было выбрано. Вот мой код для этой части:

<?php 
//perform database query 
$query = "SELECT COUNT(*) "; 
$query .= "FROM testdata "; 

if(!empty($_POST['check_list'])) { 
    foreach($_POST['check_list'] as $check) { 
     $query .= "WHERE rd_$check = 1"; 
    } 
} 

Тогда позже:

$result = mysqli_query($link, $query); 
if (!$result) { 
    die("Database query failed."); 
} 

Проблема возникает, когда я пытаюсь проверить несколько ящиков. Я не знаю, как конкатенировать больше на $query. Команда должна была бы выглядеть примерно так:

SELECT COUNT(*) FROM testdata WHERE rd_ki67 = 1 AND rd_myc = 1 AND ...; 

Кто-нибудь знает, как это сделать?

+0

Таким образом, вы не можете добавить слово 'and' к запросу? o_O –

+0

нет, потому что вся строка не будет выполнена. Вы получите: SELECT COUNT (*) FROM testdata AND rd_ki67 = 1 AND rd_myc = 1 AND ... –

+0

'SELECT COUNT (*) FROM testdata WHERE [rd_ki67 = 1 AND] [rd_myc = 1 AND] [rd_field3 = 1 ] 'См. Некоторый шаблон в' [] '? –

ответ

1
if(!empty($_POST['check_list'])) { 
    foreach($_POST['check_list'] as $check) { 
    $query .= "WHERE rd_$check = 1"; 
    } 
} 

Это приводит к строке запроса с несколькими WHERE положения (WHERE condition WHERE condition WHERE ...), которая не является правильным.

Одно из решений, чтобы implode() функции РНР клей подвыражения вместе:

if(!empty($_POST['check_list'])) { 
    $wheres = array(); 
    foreach($_POST['check_list'] as $check) { 
    $wheres[] = "rd_$check = 1"; 
    } 
    $query .= 'WHERE ' . implode (' AND ', $wheres); 
} 

Другой способ закончить AND -цепочку является добавление всегда-истинное выражение в конце:

if(!empty($_POST['check_list'])) { 
    $query .= 'WHERE '; 
    foreach($_POST['check_list'] as $check) { 
    $query .= "rd_$check = 1 AND "; 
    } 
    $query .= '1'; 
} 
Смежные вопросы