【问题标题】:Populate a field from a select option从选择选项填充字段
【发布时间】:2012-09-03 16:02:43
【问题描述】:

我有一个简单的 php/mysql 应用程序,用户可以在其中从一个下拉列表中选择一个产品。我在 db 中有产品,我想要 - 当用户从下拉列表中选择 product1 时,名为 price 的字段将自动填充来自 db 的值 price。

choose product    |  price

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    数据库测试

    CREATE TABLE IF NOT EXISTS `price` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_product` int(11) NOT NULL,
      `price` decimal(10,2) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
    
    --
    -- Dumping data for table `price`
    --
    
    INSERT INTO `price` (`id`, `id_product`, `price`) VALUES
    (1, 1, 10.20),
    (2, 2, 15.50);
    

    查询

    public function getProductList() {
            $stmt=$this->pdo->prepare('SELECT * FROM product');
            $stmt->execute();
            return $stmt->fetchAll(PDO::FETCH_OBJ);
        }
        public function getProductPrice($product_id){
            $stmt=$this->pdo->prepare('SELECT * FROM price WHERE id_product=?');
            $stmt->execute(array($product_id));
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
            return $row['price'];
        }
    

    你的演示文件

    <?php
        include_once('classes/DataLayer.class.php');
        $dl = new DataLayer();
        $product_list = $dl->getProductList();
    
    ?>
    
    
    <html>
    
    <head>
    <title>Untitled 1</title>
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        function getPrice(){
            $.get('script.php?product_id='+$('#product option:selected').val(), function(data){
                $(' #price ').val(data);
            })
        }
    </script>
    </head>
    
    <body>
        <select id="product" name="product" onchange="return getPrice()">
            <option value="">Select Product</option>
            <?php
                if(isset($product_list) && !empty($product_list)){
                    foreach($product_list as $product){
            ?>
                <option value="<?php echo $product->id?>"><?php echo $product->productName?></option>
            <?php
                    }
                }
            ?>
        </select>
    
        <input type="text" name="price" id="price" >
    </body>
    
    </html>
    

    下载演示文件:Downlaod

    【讨论】:

      【解决方案2】:

      您有两种解决方案,但它们都使用 javascript:

      没有 ajax 的 Javascript:

      在检索数据时,您创建了一个将产品 ID 与其价格相关联的 javascript 对象。像这样:

      <script>
      var products = {};
      
      <?php while($row = ...) : ?>
          products[<?php echo $row['product_id']; ?>] = <?php echo $row['product_price']; ?>;
      <?php endwhile; ?>
      </script>
      

      当用户在下拉列表中选择产品时,您将使用类似这样的内容(我使用的是 JQuery):

      $('#my_dropdown').change(function()
      {
          val product_id = $(this).val();
      
          // access to the javascript object created while retrieving data
          val product_price = products[product_id].price;
      
          // set the price textbox
          $('#price').val(product_price + ' $');
      });
      

      使用 ajax 的 JavaScript

      $('#my_dropdown').change(function()
      {
          val product_id = $(this).val();
      
          $.ajax(
          {
              type: 'GET',
              url: 'get_product_price.php?product_id=' + product_id,
              success: function(data)
              {
                  $('#price').val(data + ' $');
              }
          });
      });
      

      【讨论】:

        【解决方案3】:

        请提供一些代码来帮助其他人。这样可以清楚地说明您在做什么以及其中有什么问题。

        没有代码,我可以简单地说:

        用户从下拉列表中选择产品后,您需要填写数据。用户将在他的浏览器上执行此操作,因此您无法在 PHP 中执行任何操作。您需要在服务器上发送 AJAX 请求。

        了解一点 AJAX 就可以轻松搞定。

        【讨论】:

        • 我将搜索有关 ajax...我没有在这里发布的代码,因为我不知道该怎么做。我会尝试 ajax 并在这里放一些代码。谢谢
        【解决方案4】:

        再次您好,非常感谢您的帮助。我设法做到了这一点

        test.php

        <?php
            require $_SERVER['DOCUMENT_ROOT'].'/admin/db/config.php';
            $time = time();
            $query="SELECT id,name FROM products WHERE active='1'";
            $result=mysql_query($query);
            $options=""; 
         while ($row=mysql_fetch_array($result)) {
                $id_product=$row["id"];
                $name=$row["name"];
                $options=$options . "<option value=" ."'$id_product'" . ">" . $name . "</option>";
            }
        ?>
        <html>
           <head>
               <title>Title</title>
           <script language="Javascript">
                function postRequest(strURL){
                         var xmlHttp;
                               if(window.XMLHttpRequest){ // For Mozilla, Safari, ...
                                 var xmlHttp = new XMLHttpRequest();
                                  }
                               else if(window.ActiveXObject){ // For Internet Explorer
                                 var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                                  }
                    xmlHttp.open('POST', strURL, true);
                    xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                    xmlHttp.onreadystatechange = function(){
                       if (xmlHttp.readyState == 4){
                           updatepage(xmlHttp.responseText);
                          }
                    }
              xmlHttp.send(strURL);
               }
        
               function updatepage(str){
              document.getElementById('result').value = str;
               }
        
               function callValue(){
              var a = parseInt(document.form1.a.value);
              var url = "call.php?a=" + a + ";
              postRequest(url);
               }
           </script>
           </head>
        
           <body>
             <form name="form1">
               <input name="result" type="text" id="result">
            <table>
            <tr>
        <?php
           echo "<td><SELECT NAME='a' id='a' onChange='callValue();'><option value='0'>Please select</option>$options</SELECT></td>";
        ?>
            </tr>
        </table>
        </form>
        </body>
        </html>
        

        调用.php

        <?php
        $a=$_GET["a"];
        
        require $_SERVER['DOCUMENT_ROOT'].'/admin/db/config.php';
        $time = time();
        
        $query="SELECT id,price,note FROM produse WHERE id=$a";
        $result=mysql_query($query);
        while ($row=mysql_fetch_array($result)) {
            $price=$row["price"];
        }
           echo $price;
        ?> 
        

        在此示例中,当我从下拉列表中选择产品时,我可以在输入中显示产品的价格。

        我还希望有其他输入以显示其他产品(如笔记)的位置... 有人可以帮助/指点我吗?

        再次感谢

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-28
          • 1970-01-01
          • 1970-01-01
          • 2017-03-15
          • 2011-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多