javascript - Ajax 数据库选择值返回“0”而不是字符串
问题描述
我有一个二手车网站,使用以下 sql 在页面上列出所有当前库存:“SELECT * FROM inventory ORDER BY timestamp ASC”。
当下拉菜单的选项已更改时,我正在尝试使用 Ajax 数据库操作的 W3Schools ( https://www.w3schools.com/php/php_ajax_database.asp ) 方法来过滤我的结果。
javascript 和 php 都运行正确,但新 sql 语句中发送和使用的值显示为“0”,而不是应该发送的值。
此下拉列表的值是从同一个表中提取的,以动态生成菜单,每个值应该是“福特”、“奥迪”、“道奇”等。在 javascript 发送之前,它工作正常。
<select name="filtermake" class="css-dropdowns" tabindex="1" onchange="showMake(this.value)">
<option value="">All Makes</option>
<?php
$sql = "SELECT DISTINCT make FROM inventory ORDER BY make ASC";
$result = mysqli_query($conn, $sql);
while ($row = $result->fetch_assoc()) {
echo '<option value="'.$row['make'].'">'.$row['make'].'</option>';
}
?>
</select>
动态替换的JS是:
<script>
function showMake(str) {
if (str == "") {
document.getElementById("inventory").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("inventory").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","includes/inc.inventorymake.php?q="+str,true);
xmlhttp.send();
}
}
</script>
脚本运行的 PHP 代码是:
<?php
include_once ('inc.dbh.php');
$q = intval($_GET['q']);
$inventorysql = "SELECT * FROM inventory WHERE make = '".$q."'";
$result = mysqli_query($conn, $inventorysql);
while ($row = $result->fetch_assoc()) {
echo '<div id="inventory" class="inventory margin-bottom-20 clearfix scroll_effect fadeIn"><a class="inventory" href="inventory-listing.php?vin=' . $row['vin'] . '"><div class="title">'.$row['year'].' '.$row['make'].' '.$row['model'].'</div><img src="images/inventory/'.$row['vin'].'-main.jpg" class="preview" alt="preview"><table class="options-primary"><tr><td class="option primary">Body Style:</td><td class="spec">'.$row['body'].'</td></tr><tr><td class="option primary">Drivetrain:</td><td class="spec">'.$row['drivetrain'].'</td></tr><tr><td class="option primary">Transmission:</td><td class="spec">'.$row['transmission'].'</td></tr><tr><td class="option primary">Mileage:</td><td class="spec">'.ltrim ($row['mileage'], '0').'</td></tr></table><table class="options-secondary"><tr><td class="option secondary">Exterior Color:</td><td class="spec">'.$row['exteriorcolor'].'</td></tr><tr><td class="option secondary">Interior Color:</td><td class="spec">'.$row['interiorcolor'].'</td></tr><tr><td class="option secondary">VIN Number:</td><td class="spec">'.$row['vin'].'</td></tr></table><div class="price"><b>Price:</b><br><div class="figure">$'.ltrim ($row['price'], '0').'<br></div><div class="tax">Plus Tax, Tag, and Title</div></div><div class="view-details gradient_button"><i class="fa fa-plus-circle"></i> View Details </div><div class="clearfix"></div></a></div>';
}
?>
最后被javascript替换的div是:
<div id="inventory">
<?php
$inventorysql = "SELECT * FROM inventory ORDER BY timestamp ASC";
$result = mysqli_query($conn, $inventorysql);
while ($row = $result->fetch_assoc()) {
echo '<div id="inventory" class="inventory margin-bottom-20 clearfix scroll_effect fadeIn"><a class="inventory" href="inventory-listing.php?vin=' . $row['vin'] . '"><div class="title">'.$row['year'].' '.$row['make'].' '.$row['model'].'</div><img src="images/inventory/'.$row['vin'].'-main.jpg" class="preview" alt="preview"><table class="options-primary"><tr><td class="option primary">Body Style:</td><td class="spec">'.$row['body'].'</td></tr><tr><td class="option primary">Drivetrain:</td><td class="spec">'.$row['drivetrain'].'</td></tr><tr><td class="option primary">Transmission:</td><td class="spec">'.$row['transmission'].'</td></tr><tr><td class="option primary">Mileage:</td><td class="spec">'.ltrim ($row['mileage'], '0').'</td></tr></table><table class="options-secondary"><tr><td class="option secondary">Exterior Color:</td><td class="spec">'.$row['exteriorcolor'].'</td></tr><tr><td class="option secondary">Interior Color:</td><td class="spec">'.$row['interiorcolor'].'</td></tr><tr><td class="option secondary">VIN Number:</td><td class="spec">'.$row['vin'].'</td></tr></table><div class="price"><b>Price:</b><br><div class="figure">$'.ltrim ($row['price'], '0').'<br></div><div class="tax">Plus Tax, Tag, and Title</div></div><div class="view-details gradient_button"><i class="fa fa-plus-circle"></i> View Details </div><div class="clearfix"></div></a></div>';
}
?>
</div>
通过测试发送到变量 $q 的输出,我得到 '0' 而不是 'Audi' 或 'Ford' 等。所以 sql 语句最终是 SELECT * FROM inventory WHERE make = '0' 我需要它成为 SELECT * FROM inventory WHERE make = 'Audi'
我希望这已经足够清楚了,我知道对于这样一个看似很小的问题需要消化很多信息,但我从过去的经验中知道,提供的信息太少不仅令人沮丧,而且需要更多时间才能获得适当的帮助。
谢谢你。
解决方案
我修好了它。因此,当 php 设置 $q 时,它使用的是 intval() 函数,该函数用 0 覆盖了字符串。删除该函数允许字符串通过并正确加载页面!
我更正的 php 代码是:
<?php
include_once ('inc.dbh.php');
$q = $_GET['q'];
$inventorysql = "SELECT * FROM inventory WHERE make = '".$q."'";
$result = mysqli_query($conn, $inventorysql);
while ($row = $result->fetch_assoc()) {
echo '<div id="inventory" class="inventory margin-bottom-20 clearfix scroll_effect fadeIn"><a class="inventory" href="inventory-listing.php?vin=' . $row['vin'] . '"><div class="title">'.$row['year'].' '.$row['make'].' '.$row['model'].'</div><img src="images/inventory/'.$row['vin'].'-main.jpg" class="preview" alt="preview"><table class="options-primary"><tr><td class="option primary">Body Style:</td><td class="spec">'.$row['body'].'</td></tr><tr><td class="option primary">Drivetrain:</td><td class="spec">'.$row['drivetrain'].'</td></tr><tr><td class="option primary">Transmission:</td><td class="spec">'.$row['transmission'].'</td></tr><tr><td class="option primary">Mileage:</td><td class="spec">'.ltrim ($row['mileage'], '0').'</td></tr></table><table class="options-secondary"><tr><td class="option secondary">Exterior Color:</td><td class="spec">'.$row['exteriorcolor'].'</td></tr><tr><td class="option secondary">Interior Color:</td><td class="spec">'.$row['interiorcolor'].'</td></tr><tr><td class="option secondary">VIN Number:</td><td class="spec">'.$row['vin'].'</td></tr></table><div class="price"><b>Price:</b><br><div class="figure">$'.ltrim ($row['price'], '0').'<br></div><div class="tax">Plus Tax, Tag, and Title</div></div><div class="view-details gradient_button"><i class="fa fa-plus-circle"></i> View Details </div><div class="clearfix"></div></a></div>';
}
echo $q;
?>
推荐阅读
- apache-spark - 为什么在所有任务完成之前完成 spark 作业?
- kubernetes - 在 Kubernetes 节点上实现 iptables 规则
- angular - angular 2 完整的用户资料
- async-await - 设置异步调度的执行顺序(redux\redux-saga)
- c# - 在 GeckoFX 中添加功能
- php - 用 laravel 表单上的图标替换提交按钮
- data-structures - 如何将两个 B 树((d,2d)树)与另一个节点 x 连接起来
- javascript - 如何在 sonarqube 上获得超过 10,000 个问题
- vba - 在目录中搜索文件并列出它们的名称和路径 - 两个级别的子文件夹
- vue.js - Vue.js 删除没有功能的事件监听器