【发布时间】:2021-10-18 21:46:52
【问题描述】:
大家好,我目前正在与我的 PHP 一起研究 jQuery,并希望有一个加载功能,允许我在按下按钮时加载 2 个新的 cmets。我在网上找到了一个很好的教程,很好地解释了它,我按照它进行操作,但是当按下按钮时,它似乎没有返回任何 cmets。视频已经三年了,所以我怀疑我会从教程的创建者那里得到任何帮助,所以我来到这里:)
文件 test.php 上的 jQuery
<script>
$(document).ready(function(){
var answerCount = 2;
$("#btn").click(function(){
answerCount = answerCount + 2;
$("#answers").load("load_answers.php", {
answerNewCount: answerCount
});
});
});
</script>
文件 test.php 上的 PHP
<div class="container">
<div id="answers">
<?php
$sql = "SELECT * FROM tbl_answer LIMIT 2";
$result = mysqli_query($conn,$sql);
if (mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
echo "<p>";
echo $row['answer_text'];
echo "<br>";
echo $row['user_name'];
echo "</p>";
if($_SESSION["user"]==$row["user_name"]):?>
<form method="post" action="delete_answer.php">
<input type="hidden" name="answerid" value="<?= $row['answer_ID'] ?>"/>
<input type="submit" name = "submit" value = "Remove"/>
</form>
<?php endif;?><?php
}
} else {
echo " There are no comments!";
}
?>
</div>
<button id="btn"> Show more comments</button>
</div>
文件 load_answers.php 上的 PHP
<?php
include 'db_login.php';
$answerNewCount = $_POST['answerNewCount'];
$sql = "SELECT * FROM tbl_answer LIMIT $answerNewCount";
$result = mysqli_query($conn,$sql);
if (mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
echo "<p>";
echo $row['answer_text'];
echo "<br>";
echo $row['user_name'];
echo "</p>";
if($_SESSION["user"]==$row["user_name"]):?>
<form method="post" action="delete_answer.php">
<input type="hidden" name="answerid" value="<?= $row['answer_ID'] ?>"/>
<input type="submit" name = "submit" value = "Remove"/>
</form>
<?php endif;?><?php
}
} else {
echo " There are no comments!";
}
?>
此代码当前有效,直到我按下按钮。按下按钮后,它会删除所有 cmets 并显示 else "There are no cmets!"。发生这种情况的任何原因?
此图像的限制已更改:
【问题讨论】:
-
您的
tbl_answer表中有数据吗? -
警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL 中。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
-
phpdelusions.net/mysqli 还包含使用 mysqli 编写安全 SQL 的好例子。另见mysqli documentation 和这个:How can I prevent SQL injection in PHP?。对查询进行参数化还将大大降低由于未转义或错误引用的输入值而导致意外语法错误的风险。
-
I don't see why this would be occurring...我们也不知道。根据您所展示的内容,唯一的结论就是我之前所说的——也许 load_answers 脚本连接到数据库的不同副本。我们看不到您在任何一个脚本中的连接方式。在运行的脚本之间以某种方式删除了那个或行。但这似乎不太可能,除非您还有其他东西可以在之后恢复数据 -
基本上我觉得你所展示的不是问题的minimal reproducible example。