如何显示和保存数据库中的动态下拉列表?

时间:2015-11-10 08:57:55

标签: javascript php mysql dynamic dropdown

我有两个下拉菜单,例如Item和Product。 当我选择项目时,相应的产品将显示在数据库的其他内容中。 我想在其他表中保存这样的项目ID和产品ID。 请帮我。 (原始php,mysql,javascript)

if(isset($_POST['submit'])){                     

$sales = htmlspecialchars(stripslashes(trim($_POST['sales'])));
$regionID = htmlspecialchars(addslashes(trim($_POST['cat'])));
$branchID = htmlspecialchars(addslashes(trim($_POST['subcat'])));

if($sales){
        $insert = mysql_query("INSERT INTO dailycollection VALUES('', '$regionID', '$branchID', '$sales')");
    }
else{
        $msg = "Please fillup all required fields!";
}}

2 个答案:

答案 0 :(得分:1)

这是一个简单的例子....它描述了如何使用ajax在项目ID的下拉列表中动态地检索产品列表....

<select id="item_id" name="item_id">
    <option value="1">Item_1</option>
    <option value="2">Item_2</option>
    <option value="3">Item_3</option>
    <option value="4">Item_4</option>
</select>

<select name="product_id" id="product_id">
</select>

<script type="text/javascript">
    $(document).ready(function(){
         $('#item_id').change(function(e){
                e.preventDefault();
                var item_id= $(this).val();
                $.post('product.php',{item_id:item_id},function(res){
                        $('#product_id').html(res);
                });
         }) 
    });
</script>

/ ** product.php ** /

$item_id = $_POST['item_id'];
$sql="SELECT product_id, product_name FROM product where item_id='".$item_id."'";
$result=mysql_query($sql);
if(mysql_num_rows($result)>0){
    while($line=mysql_fetch_array($result)){
        $str .='<option value="'.$line['product_id'].'">'.$line['product_id'].'</option>';
    }
}else{
    $str='no record';
}
 echo $str; exit; 

答案 1 :(得分:0)

让我以我对你的问题的理解为这个答案开头:你有两个并排的下拉菜单。在一个中选择一个选项将导致另一个中的相关选项成为当前选项。根据您的代码,您似乎正在构建完整的堆栈。这很好 - 这对你来说是一次很棒的学习经历。

让我们看看我认为可能的解决方案,回到前面,在我们熟悉系统时迭代一次或两次。

底层这里是你的MySQL数据库(我暂时认为这已经建成了,所以如果它不是,请告诉我,我&# 39; ll为这个答案添加一些相关信息)。您的站点通过PHP与此数据库进行交互,或者更具体地说,通过PHP MySQL改进的扩展(http://php.net/manual/en/book.mysqli.php)进行交互。

您需要的第一个PHP脚本是从数据库中获取数据的脚本。我将逐行抛出一些示例代码,并解释一切都做了什么。

$itemID = $_POST["itemID"];

我们将在一分钟内了解到这是与我们脚本的POST请求相关联的数据。我们将使用它来告诉我们的数据库我们正在寻找哪一行。

$mydatabase = new mysqli("databaseserver.com", "mysqlusername",
    "mysqlpassowrd", "databasename");

此行在您的站点(服务器端,而非客户端)和数据库服务器之间建立连接。如果它们托管在同一台机器上,并且MySQL在localhost上运行,则可以将localhost作为数据库服务器位置。

接下来,我建议您查看PHP文档以了解错误处理函数。我不想在这里过于细化。

之后,执行查询。

$result = $mydatabase->query("SELECT * FROM mytable WHERE itemID = " . strval($itemID));

此处,$result属于数据类型&#34; MySQLi结果。&#34;您可以使用此方法执行更多错误处理,但下一个基本步骤是将结果转换为更友好的数据。行的数据可以转换为PHP关联数组,如下所示:

$row = $result->fetch_assoc();

此处还有很多其他选项,因此请查看文档,了解此方法是否适合您。在你&#34;返回&#34;之前这个数据带有echo,您需要将其解析为更有用的形式。例如,如果您查询的MySQL表只有一列类型为INTEGER且包含产品ID,那么您可能会使用$data = $row["productID"]

非常重要注意:配置不当PHP是网络上最常见的漏洞之一,特别是在涉及POST的情况下(详见下文)。请阅读文档,并确保您在此处采取所有相关的预防措施。如果您从上面复制并粘贴我的示例,您将很容易受到SQL注入。

向上移动图层,您需要将此数据提供给客户端脚本(阅读javascript)。要了解如何完成此操作,我们需要备份一个步骤,以查看原始请求的执行方式。我建议使用jQuery;它很容易,很受欢迎,并且记录良好。

要运行我们刚刚谈到的PHP脚本,您需要执行某种请求。根据此设置的性质,它看起来像POST。一个POST在jQuery中看起来像这样:

$.post("grabdata.php", {"item":$('#itemID').val()}, function(response){
    console.log(response);
    document.mydata = response;
}

此函数会将最后echo的grabdata.php打印到控制台,然后将响应保存为document对象的属性(基本上可以使其全局访问)。有更好的方法来保持你的全球空间更清洁,但这对我的简单例子起了作用。其间的中间部分是您发布的数据&#34; to grabdata.php。在您的情况下,您希望获得给定某个项目ID(?)的产品ID,反之亦然。这是单向版本的一个例子。请查看http://api.jquery.com/jQuery.post/以获取更多详细信息。

顶层:显示。最后一部分非常简单。既然您已将产品ID存储在document.mydata中,那么您只需使用jQuery进行快速更新:

$('#productID').val(document.mydata);

请记住,我已经在这里浏览了很多细节。我只想概述一下像这样的系统是如何工作的。请阅读我链接的文档,并尽快回来并提出更具体的问题。

祝你好运!