我正在寻找的是一种使用ajax
从数据库中提取数据的方法。
每当有人将mouseover
类别名称放入时,我希望此类别的数据在div中弹出。
由于某种原因,while循环无效。
这是我第一次使用ajax,而且php
我不是那个专业人士。
function showCat(str) {
if (str == "") {
document.getElementById("txtHint").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 (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("GET","getcat.php?q="+str,true);
xmlhttp.send();
}
}
<?php
$q = intval($_GET['q']);
$con = mysqli_connect('localhost','ipattcoi','6#uP!AR3G_','patt_db');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"patt_db");
$sql="SELECT * FROM products WHERE category = '".$q."'";
$result = mysqli_query($con,$sql);
echo "<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['product_id'] . "</td>";
echo "<td>" . $row['product_name'] . "</td>";
echo "<td>" . $row['product_pic'] . "</td>";
echo "<td>" . $row['category'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
答案 0 :(得分:0)
您的代码有效,我能够通过最少的修改来复制和运行它(只是为了重新使用我现有的表),所以请检查以下内容:
1)检查表中是否有数据,使用任何mysql客户端(命令行工具,phpmyamdin等)
2)直接调用getcat.php
脚本并查看它是否实际返回表格(如http://my.server.name/getcat.php?q=something'),只需在浏览器中打开这样的URL
3)如果以上工作 - 打开执行ajax请求的HTML页面,打开开发人员工具(Chrome和firefox中的F12),找到“控制台”,在那里可以看到js错误。触发请求并检查错误。
除此之外,我希望您的代码仅用于某些学习目的,而不是用于实时应用程序/网站。因为撰写$sql
字符串的方式非常危险,所以请参阅this。
在实际应用中还有其他一些我会做的事情:
XMLHttpRequest
是一种执行请求的虚拟方式,您可能会发现在实际应用程序中,您将需要编写更多代码来处理不同的浏览器和不同的用例。答案 1 :(得分:0)
我假设“txtHint”是您希望通过AJAX请求显示类别详细信息的div。
确保您的select语句检索该类别的值。如果没有记录,while循环什么都不做。
一个。查询区分大小写。可能$ q提供的类别为“三星”,但在您的数据库中,它存储为“三星”,反之亦然。通过将sql中的比较转换为大写或小写来解决问题。 湾检查数据库中是否已存在$ q值。通过在网页或数据库中添加或删除类别列表中的项目来解决此问题。
这与问题无关 - 表头与数据库中的列不匹配。