2015-04-15 3 views
1

Я пытаюсь написать запрос выбора в MySQL, который отображает все имена столбцов с флажками в форме frontend и позволяет пользователю выбирать, какой из них использовать в запросе select. Я согласен с использованием $ _POST для публикации значений, но я не уверен, как правильно их поместить в строку запроса, поскольку некоторые пользователи могут выбрать 1, в то время как другие могут выбрать 3.Обобщенный запрос выбора с несколькими значениями

Это то, что у меня есть до сих пор:

передняя форма:

<form action="back.php" method="post"> 
<input type="checkbox" name="person" value="forename">Forename<br> 
<input type="checkbox" name="person" value="surname">Surname<br> 
<input type="checkbox" name="person" value="nationality">Nationality<br> 
</form> 

Назад конец:

$person=$_POST["person"]; 

$query = "select" . $person . " from Actor WHERE nationality = British"; 

Большое спасибо за вашу помощь

+0

mysql использует ключевое слово 'limit' для управления размером вывода, например,' select * from Employee limit 10' вернет 10 записей. Я предполагаю, что это был ваш вопрос. –

ответ

1

Вы должны использовать массив так, что $_POST["person"] будет массив:

<form action="back.php" method="post"> 
<input type="checkbox" name="person[]" value="forename">Forename<br> 
<input type="checkbox" name="person[]" value="surname">Surname<br> 
<input type="checkbox" name="person[]" value="nationality">Nationality<br> 
</form> 

Затем на PHP стороне вы должны подтвердить ввод. Вы не можете автоматически избежать или подготовить имена столбцов, поэтому вам нужно будет проверить каждый элемент на «белый список».

Что-то вроде:

// your valid column names 
$valid_column_names = array('forename', ...); 

$validated_array = array(); 
foreach ($_POST["person"] as $value) 
{ 
    if (in_array($value, $valid_column_names)) 
    { 
     $validated_array[] = $value; 
    } 
} 

Тогда вы можете просто развалятся удостоверенный, непустой массив и использовать его в запросе:

$query = "select `" . implode('`,`', $validated_array) . "` from Actor WHERE nationality = British"; 

Обратите внимание, что я добавил пробел после select (вас необходимо) и обратные ссылки, чтобы указать имена полей (не обязательно в вашем примере, но необходимые в случае зарезервированных слов и т. д.).

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