2013-04-25 2 views
0

У меня есть база данных, содержащая элементы запаса и веб-страницу, которая позволяет вам искать в базе данных тип элемента или определенный номер позиции. Результаты возвращаются и отображаются в таблице в форме поиска.Сделать результаты поиска базы данных mysql по выбору

В настоящее время я делаю это, сохраняя результаты запроса mysql в массиве, а затем печатаю результаты массива в таблицу.

Как сделать результат, который можно выбрать, а затем нажать кнопку «добавить», чтобы я мог получать информацию из базы данных только на выбранном элементе.

Edit -

<?php 
require("header.php"); 
if(isset($_REQUEST['searching'])){ //check if form has been submitted 
connect('final');//connect to DB 
//set the values from search form 
$field = $_POST['field']; 
$query = $_POST['query']; 

    $query = htmlspecialchars($query); // stop HTML characters 
    $query = mysql_real_escape_string($query); //stop SQL injection 

    $data = mysql_query("SELECT * 
    FROM stock 
    WHERE stock.Part_Number IN (SELECT stock.Part_Number 
    FROM stock 
    WHERE upper(stock.$field) LIKE'%$query%')") ;//query the DB with search field in colleumn selected// 

    //$data = mysql_query("SELECT * FROM customer INNER JOIN address ON customer.ID = address.Customer_ID LEFT OUTER JOIN sites ON address.ID = sites.address_ID WHERE upper(customer.$field) LIKE'%$query%'") ; 

    if($data === FALSE) { 
    $error = 'Query error:'.mysql_error(); 
    echo $error; 
    } 
    else 
    { 

    $test = array(); 
    $colNames = array(); 
    while($results = mysql_fetch_assoc($data)){// puts data from database into array, loops until no more 

    $test[] = $results; 

     } 
    $colNames = array_keys(reset($test)); 


     $anymatches=mysql_num_rows($data); //checks if the querys returned any results 
      if ($anymatches == 0) 
        { 
         echo "Sorry, but we can not find an entry to match your query<br><br>"; 
        } 

    } 

затем ниже в моем HTML форме я создаю таблицу и имеют

<?php 
    //print the header 
    foreach($colNames as $colName) 
    { 
     echo "<th>$colName</th>"; 
    } 
?> 

и

<?php 
    //print the rows 
    foreach($test as $results) 
    { 
     echo "<tr>"; 
     foreach($colNames as $colName) 
     { 
     echo "<td>".$results[$colName]."</td>"; 
     } 
     echo "</tr>"; 
    } 
?>  

Я не был уверен, с чего начать, но Я попробую метод checkbox.

+4

Не могли бы вы добавить свой код на вопрос, пожалуйста? Что вы пробовали, и почему это не сработало? – andrewsi

+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. – Kermit

ответ

0

Ну, есть много способов настроить поиск по вкусу пользователя.

Самое основное решение, которое требует только php и html, - это иметь флажки в ячейках, которые вы хотите использовать в качестве фильтра.

Затем вы можете добавить новые части к старой mysql-команде с помощью and-connection. , например. флажок для «name» -column, где следующий поиск будет показывать только записи с проверенными именами.

<input type="checkbox" name="names[]" id="chWalter" value="Walter" /> <label for="chWalter">chWalter</label>

Когда отправил можно запустить через CheckBox-массив с петлей и добавить что-то вроде

" and name like '".$_GET['names'][$i]."'".

Обратите внимание, что использование групп с флажками даст вам массив всех значений активированного элемента.

Конечно, вы можете изменить, как установленный флажок изменяет предыдущий запрос ... для удаления фильтров вы можете использовать регулярные выражения в строке запроса.

Лучшим решением будет использование javascript. например вы можете использовать скрытые флажки, которые проверяются щелчком по ячейкам таблицы.

Или вы можете просто использовать javascript для фильтрации элементов! Использование классов и

document.getElementsByClassName['class']

облегчит ваш сервер-трафик и ускорить запрос. для этого я рекомендую использовать класс для каждой строки (row1, row2 и т. д.) и по одному для каждого столбца (имя, идентификатор и т. д.). Затем, когда вы нажимаете на поле, получите все элементы одного и того же класса столбцов и пропустите их.

Если их содержимое не соответствует, пройдите через их класс-класс и установите css-атрибут типа «display: none» ...если вы используете настольный макет, который вы можете заменить использование строчных-классов с чем-то вроде

this.parentNode.style.display="none" 

Чтобы отключить строку (<tr> -tag).

В противном случае вы удалите css еще раз, чтобы показать их.

Недостаток этого заключается в том, что приведенный результат отображается только пользователю, но для повторной работы с уменьшенной версией на сайте сервера вам необходимо снова отобразить результат для флажков или, возможно, скрытых полей и отправить его снова ,

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