2015-04-15 3 views
-1

Я хочу связать поиск из формы флажка вместе. Например, у меня есть 5 флажков (a, b, c, d, e), если я проверил a и b, я хочу выполнить поиск в зависимости от того, что я искал, и отображать два разных результата.Связывание поисков вместе в php

<form role="form" action="R.php" method="post"> 
    <div class="form-group"> 
    <input type="checkbox" value="a" name="search" />a 

    <input type="checkbox" value="b" name="search" />b 

     <input type="checkbox" value="c" name="search" />c 

     <input type="checkbox" value="d" name="search" />d 

      <input type="checkbox" value="e" name="search" />e 
      </div> 
    <input class="btn btn-default glyphicon-align-right" type="submit" value=">>"/> 
    </form> 

РНР

<?php $output=''; 

if(isset($_POST['search'])){ 
$searchq=$_POST['search']; 
$searchq = preg_replace ("#[^0-9a-z]#i","",$searchq); 

$Squery = mysql_query("SELECT * FROM database WHERE Name LIKE '%$searchq%'"); 


$count = mysql_num_rows ($Squery); 

    echo "<div id=results><ul class=list-group><div id=qwerty>"; 
if($count == 0){ 
$output = 'There was no results!'; 
}else{ 

    while($row = mysql_fetch_array($Squery)){ 
     $name = $row ['Name']; 
     $id = $row['ID']; 
     $category = $row['Category']; 
     $output .='<div class="container">'.$name.$category.'  '.$id.'</div>'; 

     echo "<li>"."<div style=height:95px ><h3 class=text-center style=text-transform:capitalize >".$name.' '."</h3></div>". 
     "<div>"."<a href=n.php><img src=images/$id.jpg alt=Image /></a> 
        </div>". 



     ' '.$category.' RESULT!!!!!'.$id."</li>"; 



    } 
     echo "</div></ul></div>"; 
} 
} 
?> 
+0

Если выбраны a, b и c, вы хотите найти, где name = '% abc%' или где name = a ИЛИ name = b ИЛИ name = c? – xJoshWalker

+0

, когда выбраны значения a, b и c. Например, выбирая букву A, я дам мне некоторые результаты, начиная с буквы A, выбрав B, даст мне результаты, заканчивающиеся буквой B, но если я проверю A и B, мне нужны результаты, начинающиеся с буквы A и буквы B.это просто пример того, как этот вид работ –

+0

нашел причину, по которой может быть, что он может читать только одно слово за один раз ... но все равно не может найти решение. :) –

ответ

1

Если я правильно понял вопрос правильно, вы хотели бы, чтобы быть в состоянии найти все результаты, которые соответствуют флажков, которые вы проверили.

Я не уверен, какие результаты вы бы искали, поэтому вместо этого я дам вам несколько разных вариантов и позволю вам взять их оттуда.

Во-первых, для того, чтобы передать ФУНКЦИЮ БОЛЬШЕ ТОГО, чтобы ваш PHP-скрипт, вам нужно определить ваши флажки по-разному.

<form role="form" action="R.php" method="post"> 
    <div class="form-group"> 
     <input type="checkbox" value="a" name="search[]" />a 

     <input type="checkbox" value="b" name="search[]" />b 

     <input type="checkbox" value="c" name="search[]" />c 

     <input type="checkbox" value="d" name="search[]" />d 
     <input type="checkbox" value="e" name="search[]" />e 
    </div> 
    <input class="btn btn-default glyphicon-align-right" type="submit" value=">>"/> 

Обратите внимание на скобки после "поиск" .. название = "поиск []". Это позволяет вашим флажкам пропускать COLLECTION значений, а не только один.

Во-вторых, на вашей стороне PHP.

После того, как вы отправите свои флажки, вы хотите, чтобы получить их так же, как сейчас это делают:

$searches = $_POST['search']; 

$ поиска теперь будет массив заполняется значениями, которые были проверены в вашей форме.

В зависимости от вашего желаемого результата, то, что вы делаете дальше, будет выглядеть примерно так.

Давайте рассмотрим случай, когда были проверены A и B.

Если вы хотите, чтобы получить все результаты, где слово начинается с буквой А или слово начинается с буквой B:

<?php 

    $searches = $_POST['searches']; 
    $Squery = "SELECT * FROM database"; 
    $Swhere = ""; 

    //add all your individual searches by looping through the checkbox values 
    foreach($searches as $search){ 
     $Swhere .= " OR name LIKE '%$search' "; 
    } 

    //remove the first OR case, because it is not needed for the first search query 
    $Swhere = ltrim($Swhere, ' OR'); 

    //add your dynamic where statement to your query 
    $Squery .= $Swhere 

    $result = mysql_query($Squery); 
    //...... run the query and get the results the same way you are 

С помощью функции Еогеаспа, ваш может добавить все флажки, которые требуются ваш поиск, но запрос на стороне PHP не придется менять вообще.

На аналогичной ноте, если выбрано выбранное A и B, если вы хотите получить все слова, начинающиеся с буквы A, начинайте с B, или начинайте с AB, тогда ваш код будет скорректирован так:

<?php 

    $searches = $_POST['searches']; 

    //this takes your array of values and combines them into one word. 
    //your searches variable remains an array, but your stringSearch is now 
    //a word with the combined values 
    $stringSearch = implode($searches,''); 

    $Squery = "SELECT * FROM database"; 
    $Swhere = " name LIKE '%$stringSearch%' "; 

    //add all your individual searches by looping through the checkbox values 
    foreach($searches as $search){ 
     $Swhere .= " OR name LIKE '%$search' "; 
    } 

    //add your dynamic where statement to your query 
    $Squery .= $Swhere 

    $result = mysql_query($Squery); 
    //...... run the query and get the results the same way you are 

Надеюсь, вы можете принять этот пример и приспособиться к вашим фактическим потребностям.

Следует отметить, что НЕ ДОЛЖНО использовать mysql_query. Он открывает ваш код до основных проблем с SQL-инъекциями. Я использовал его только выше, чтобы показать, как вы это сделаете с помощью вашего текущего кода. Посмотрите на функции mysqli

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