使用Ajax从数据库中提取数据

时间:2016-01-24 10:37:22

标签: javascript php html ajax

我正在寻找的是一种使用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);
?>

2 个答案:

答案 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

在实际应用中还有其他一些我会做的事情:

  • 在客户端 - 使用jquery或其他库来执行ajax请求,而XMLHttpRequest是一种执行请求的虚拟方式,您可能会发现在实际应用程序中,您将需要编写更多代码来处理不同的浏览器和不同的用例。
  • 服务器上的
  • - 读取数据并将数据转换为json,将json发送到客户端并在那里格式化/插入。还有一些库可以帮助您。目前不好的是你在php代码中有部分html
  • 也是一个真正的应用程序我会在php端使用一些框架(Yii,Laravel等)

答案 1 :(得分:0)

我假设“txtHint”是您希望通过AJAX请求显示类别详细信息的div。

确保您的select语句检索该类别的值。如果没有记录,while循环什么都不做。

一个。查询区分大小写。可能$ q提供的类别为“三星”,但在您的数据库中,它存储为“三星”,反之亦然。通过将sql中的比较转换为大写或小写来解决问题。 湾检查数据库中是否已存在$ q值。通过在网页或数据库中添加或删除类别列表中的项目来解决此问题。

这与问题无关 - 表头与数据库中的列不匹配。