从select中获取价值并与DB进行比较以获得价格

时间:2014-11-18 15:43:08

标签: javascript php html mysql mysqli

我使用select来从不同的产品中进行选择,然后使用该值执行数据库查询,以获取产品的价格,然后使用它设置输入标记。

<section id="products">
        quantity: <input type="number" id="quantity"><br><br>
        <section id="selectProd">
                <?php
                $query = $conn->query("SELECT name FROM Products ORDER BY name"); 
                ?>
                Product: <select id="comProduct" class="comProduct">
                    <?php while ($option = $query->fetch_object()) { ?>
                        <option><?php echo $option->name; ?></option>
                    <?php } ?>
                </select>
                <script>
                   $(document).on("ready",function(){
                     $("#comProduct").on("click", function(){

                      var value = $("#comProduct option:selected").text();
                      <?php
                      $servername = "localhost";
                      $username = "root";
                      $password = "";
                      $database = "BERAKA";
                      $conn = new mysqli($servername, $username, $password, $database);
                      if ($conn->connect_error) {
                         die("Connection failed: " . $conn->connect_error);
                      }
                     $valuephp = $_GET['value'];
                     $query = $conn->query("SELECT price FROM products where name='$valorphp'");
                     ?>

                     document.getElementById("ppu").value = "<?php $query->fetch_object(); ?>";
                   });
                  });     
               </script>
       </section> <br>
       Price per unit: <input type="text" id="ppu" >
   </section>

不知道为什么它不起作用,请帮忙

1 个答案:

答案 0 :(得分:1)

您容易受到sql injection attacks的攻击。坐下来放松 - 当你的服务器获得pwn3d时,你的问题就会变得毫无意义。

同样,您的代码存在严重缺陷:

document.getElementById("ppu").value = "<?php $query->fetch_object(); ?>";

您的提取通话并非 DO 有用的任何内容。 fetch将返回一个对象,但由于您没有捕获该对象或以任何方式输出该对象,因此数据库行数据将丢失。即使某个奇迹的提取调用DID输出,您也不能将PHP对象转储到Javascsript代码上下文中。

你需要更像这样的东西:

<?php 
    ...
    $row = $query->fetch_object();
    $price = $row->price;
?>
    document.getElementById('ppu').value = <?php echo json_encode($price); ?>;

从不 EVER 直接将文本从PHP转储到JS上下文而不使用json_encode()。您将面临将无效文本转储到JS代码块中的风险,这将触发JS语法错误,并终止此错误代码所在的整个<script>块。始终使用json_encode()以便不无论您将哪些内容转储到JS代码中,该值都将是VALID javascript。