我使用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>
不知道为什么它不起作用,请帮忙
答案 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。