Создать выпадающий список Поиск в базе данных PHP? - PullRequest
0 голосов
/ 28 ноября 2011

Итак, я пытаюсь создать выпадающий список для поиска в моей базе данных на PHP и в моем sql.До сих пор я был в состоянии создать простой текстовый поиск, который возвращает результаты, необходимые, когда я набираю их в поле поиска.Но я хочу иметь возможность выбрать вариант из выпадающего списка вместо того, чтобы вводить его. Я пока не нашел решения для этого и был бы признателен за любую помощь.

Вот мой код search.php ...

<?php

mysql_connect ("localhost", "root","")  or die (mysql_error());
mysql_select_db ("schoolsni");


$term = $_POST['term'];

$sql = mysql_query("SELECT * FROM  product WHERE  model LIKE '%$term%'");

while ($row = mysql_fetch_array($sql)){
    echo 'Product ID '.$row['product_id'];
    echo '<br/> Model: '.$row['model'];
    echo '<br/> quantity: '.$row['quantity'];
    echo '<br/><br/>';
    }

?>

и вот мой HTML-код ...

<div class="UFcol1">
    <form action="search.php" method="post">
        <select name="term">
    <option value="product">product</option>
    <option value="product1">product 1</option>
    <option value="product3">product 3</option>
    <option value="product4">product 4</option>
    </select>
        <input type="submit" name="submit" value="Submit" />
    </form>
</div>

Спасибо ...

Ответы [ 3 ]

1 голос
/ 28 ноября 2011
<?php 
$mysqli = new mysqli( 'host', 'user', 'pass', 'table' ); 
if( $_POST['submit'] ){
   $value = $mysqli->real_escape_string( $_POST['term'] );
  $result = $mysqli->query("SELECT * FROM product WHERE model LIKE %$value%");
while( $row = $result->fetch_assoc() ){
   echo $row['field'];
}
 }else{
   $results = $mysqli->query( "SELECT DISTINCT procucts.name from products WHERE products.stock = 1" );
   $options = '<select>';
   while( $row = $results->fetch_assoc( ) ){
    $options .= "<option value='{$row['name']}'>$row['name']</option>";
   }
   $options .= '</select>';
?>

   <div class="UFcol1">
  <form action="search.php" method="post">
    <?=$options?>
      <input type="submit" name="submit" value="Submit" />
   </form>
</div>
<?php } ?>

Это быстрый код, и он может быть неверным на 100%. Я также пропустил такие вещи, как проверка того, что ваше соединение выполнено успешно.В php.net есть много информации и примеров по этому поводу.

Редактировать: добавлен список опций самозаполнения из разных значений базы данных.

0 голосов
/ 28 ноября 2011
<?php

mysql_connect ("localhost", "root","")  or die (mysql_error());
mysql_select_db ("schoolsni");


$term = $_POST['term'];

$sql = mysql_query("SELECT * FROM  product WHERE  model LIKE '%$term%'");
?>
<select name='term'>
<?php
while ($row = mysql_fetch_array($sql)){
?>
  <option value='<?php echo $row['product_id']?>'><?php echo $row['model'];?></option>
<?php

}
?>
</select>
0 голосов
/ 28 ноября 2011

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

$sql = mysql_query('SELECT model FROM  product ORDER BY model');
$models = array();
while ($row = mysql_fetch_array($sql)){
    $models[] = $row;
}
?>
<form action="search.php" method="post">
  <select name="term">
  <?php
  foreach ($models as $model) {
  ?>
    <option value="<?php echo $model['model']?>"><?php echo $model['model']?></option>
  <?php
  }
  ?>
  </select>
  <input type="submit" name="submit" value="Submit" />
</form>

Чтобы получить список общих корней модели, вы можете сделать что-то вроде этого:

$sql = mysql_query('SELECT model FROM  product ORDER BY model');
$models = array();
while ($row = mysql_fetch_array($sql)){
    /*
     * Break the model name up into parts, assuming each part
     * is separated by a space. Then just use the first part
     * to build up an array of common model starts.
     * 
     * Because we're using the sub-part as a key, we'll only 
     * get a single instance of each one.
     */

    $modelParts = explode(' ', $row['model']);

    // e.g. $models['product'] = 'product'

    $models[$modelParts[0]] = $modelParts[0];
}

Фактически, вы, вероятно, могли бы использовать это для создания поля выбора, которое содержит как полные, так и частичные названия моделей:

$sql = mysql_query('SELECT model FROM  product ORDER BY model');
$models = array();
while ($row = mysql_fetch_array($sql)){
    $modelParts = explode(' ', $row['model']);
    $models[$modelParts[0]][] = $row['model'];
}

// Equivalent to ending up with something like:
// $models['product'] = array('product 1', 'product 2');

Затем вы можете просмотреть их и вывести список, подобный этому:

  <select name="term">
  <?php foreach ($models as $modelRoot => $modelEntries) { ?>
    <option value="<?php echo $modelRoot?>"><?php echo $modelRoot?></option>
    <?php foreach ($modelEntries as $model) { ?>
      <option value="<?php echo $model['model']?>"><?php echo $model['model']?></option>
    <?php } ?>
  <?php } ?>
  </select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...