2011-11-28 76 views
0

所以我想創建一個下拉列表搜索來搜索我的數據庫在PHP和我的SQL。到目前爲止,我已經能夠創建一個簡單的文本搜索,它將我輸入搜索框時需要的結果帶回。但我希望能夠從下拉列表中選擇一個選項,而不是輸入它。我還沒有遇到這方面的解決方案,並會感謝任何幫助。創建下拉列表PHP數據庫搜索?

這裏是我的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> 

謝謝...

+1

你的代碼是分割的,以SQL注入。任何人都可以操縱你的數據庫,很可能甚至刪除你的所有數據。 [閱讀更多關於SQL注入](http://stackoverflow.com/search?q= [php] + sql +注入) – Jacco

+0

它在localside ...不在線!否則會被密碼保護! –

+2

你仍然應該逃避任何用戶輸入數據,然後在任何查詢中使用它們,不要單獨依靠密碼保護 – Bogdan

回答

1
<?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有大量的信息和例子。

編輯:添加自我填充選項列表從disticnt數據庫值。

+0

謝謝湯姆,會給它一個去! –

0

你可以使用表本身填充選擇框:

$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> 
+0

好的,這實際上是一個很好的補充達人,但無論如何,在選擇框填充後,我可以運行搜索?例如,假設有多個產品名稱爲'產品2'和'產品3',並且在選擇框中,我只選擇'產品'。當我點擊搜索時,我希望能夠返回這兩個結果。我可以純粹在輸入框上做,但會更喜歡選擇框。謝謝你的耐心。 –

+0

你的問題,然後是一個字符串是你的產品的有效常見子字符串,然後呢?您可能已經擁有產品類別或產品類型。您可以使用該信息而不是產品名稱。否則,您可以獲取所有產品名稱,按字母順序排列,然後構建第一部分的列表。我會在上面的答案中解釋我的意思。 –

+0

是的,我明白你的意思...會放棄它並回復你!謝謝! –

0
<?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>