如何基于下拉框选择自动生成文本字段

时间:2013-05-28 17:30:53

标签: mysql forms

我有一个小的表单字段,其中dropdown <name="product">此列表是通过从mysql表中提取数据生成的。

mysql DB设置如下:

表产品:

  Column: Product
  Column: Product ID

表联系人:

  Column: Product ID
  Column: Contact Name
  Column: Contact name #2
  Column: Contact Name #3
  Column: Contact name #4

根据用户在下拉列表中选择的内容,我想再次查询数据库以填充4个新文本框:

Name1
Name2
Name3
Name4

有一种快速简便的方法吗?

表单的意图还将捕获一些其他数据并将其提交到一个单独的数据库,这将引导我如何绑定两个数据库。

感谢。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。这是一个:

  1. 准备页面时,查询所有Contact行列并将其放入页面上的JavaScript数组中。输出可能看起来像这样(有很多正确的方法来实现它):

    <script language=JavaScript>
    var contactInfo = new Array(
      {prodID: 1, name1: 'aaaa', name2: 'bbbb', name3: 'cccc', name4: 'dddd'},
      {prodID: 4, name1: 'eeee', name2: 'ffff', name3: 'gggg', name4: 'hhhh'},
      ...
      {prodID: 90, name1: 'wwww', name2: 'xxxx', name3: 'yyyy', name4: 'zzzz'}
    );
    
  2. 在下拉列表的onchange中,调用函数来处理productID选择:

    <select name="ddlProductID" onchange="processProductChange(this);">
    
  3. 确保您已定义文本框。对于此示例,我将通过txtName1

    将其称为txtName4
    <input type=text name="txtName1">
    ...
    <input type=text name="txtName1">
    
  4. 在被调用函数中,获取下拉列表的值并在contactInfo数组中找到它。这将引导您到名称,您可以将它们弹出到文本框中:

    function processProductChange(prodDropdown) {
      for (indx = 0; indx < contactInfo.length; ++indx) {
        if (contactInfo[indx].prodID == prodDropdown.value {
           // The product ID has been located in the array. Put its names
           // in the txtName1 through txtName4 textboxes.
           document.forms[0].txtName1.value = contactInfo[indx].name1;
           document.forms[0].txtName2.value = contactInfo[indx].name2;
           document.forms[0].txtName3.value = contactInfo[indx].name3;
           document.forms[0].txtName4.value = contactInfo[indx].name4;
           // all done, can get out
           break;
        }
      }
    }
    

  5. 附录:OP要求提供有关此方法的更多详细信息。这需要一些PHP代码,我不擅长,但我知道我会首先提出有关使用mysql PHP函数的强制性警告。这就是......

    不推荐使用PHP mysql函数。请改为使用PDOmysqli

    现在回到答案。如上所述,我的PHP并不是那么好,但基本上你想在填充下拉列表的同时格式化步骤1中脚本的{prodID: ... }行;这样你只需要扫描一次结果。它会像这样(散布在评论中提供的OP代码中):

    <?php
    $jsArray = '';
    while ($row = mysql_fetch_array($productlist)) {
       $rowmod = strtr($row['ProductID']," ","_"); // change the spaces to underscore to work in URL line
       if (jsArray) {
         // comma between elements
         jsArray .= ",";
       }
       jsArray .= "\n{prodID: {$row['ProductID']}, ";
       jsArray .= "name1: \"{$row['Name1']}\", ";
       jsArray .= "name2: \"{$row['Name2']}\", ";
       jsArray .= "name3: \"{$row['Name3']}\", ";
       jsArray .= "name4: \"{$row['Name4']}\"}";
       echo "<option value='$rowmod'>$row[ProductElement]</option>";
    }
    ?>
    

    然后,当您可以安全地放置JavaScript时(比如在关闭<form>标记之后,请执行此操作:

    <? php
    echo <<< endJS
     <script language="JavaScript">
      var contactInfo = new Array($jsArray);
    
      NOTE: PASTE THE FUNCTION FROM STEP 4 HERE
    
     </script>
    endJS;
    ?>
    

    这里的代码中可能存在错误或两个错误,因此可能需要进行一些调试。