2011-11-28 44 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>