我有一个简单的php网站,显示存储在我的数据库中的文章的showreel。我希望能够点击文章标题<h1 class="article-title">
并仅显示该文章。
我认为最简单的方法是在网站加载时检查发布请求。如果它有一个带有文章标题的请求,它将只显示该文章,如果没有,它将显示整个Feed。
单击标题后,我可以在控制台中看到POST请求,但没有任何反应,我无法弄清楚原因。我甚至不知道我的数据是否正确发布。
我第一次做这样的事情,所以感谢你的帮助。
我还在我粘贴的代码中将数据库设置更改为空白。谢谢你的帮助
<?php
$page_title = "Articles";
include('inc/header.php');
$servername = "";
$username = "";
$password = "";
$dbname = "";
?>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM Articles WHERE title = " . $_POST;
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo
"<h1 class='article-title'>" . $row["title"] . "</h1>"
. "<h2>" . date("j. F, Y", strtotime($row['post_date'])) . "</h2>"
. "<p>" . nl2br($row["extract"]) . "</p><hr>";
}
} else {
echo "0 results";
}
$conn->close();
}
else {
//make article newsfeed
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM Articles";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo
"<h1 class='article-title'>" . $row["title"] . "</h1>"
. "<h2>" . date("j. F, Y", strtotime($row['post_date'])) . "</h2>"
. "<p>" . nl2br($row["extract"]) . "</p><hr>";
}
} else {
echo "0 results";
}
$conn->close();
}
?>
<?php
include('inc/footer.php');
?>
<script>
$( ".article-title" ).click(
function() {
var title = $(this).text();
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
else {
throw new Error("Ajax is not supported by this browser");
}
xhr.open('POST', 'articles.php');
xhr.send(title);
}
);
</script>
答案 0 :(得分:0)
$_POST
是一个数组,所以这一行不正确:
$sql = "SELECT * FROM Articles WHERE title = " . $_POST;
一些建议:
在调试过程中总是很好看看$ _POST数组中的实际内容,尝试使用print_r($_POST);
将整个数组转储到屏幕上。
查看在执行mysqli查询时如何执行绑定参数,并将标题绑定到查询而不是使用.
进行字符串连接。因为它很容易受到sql注入。
在JS中设置title
参数时,请尝试将其设为名称值对:var title = 'title=' + $(this).text();
。然后在php中标题将在$_POST['title']
答案 1 :(得分:0)
这是对外部页面的简单jquery调用。
<script type="text/javascript">
$( ".article-title" ).click(function(){
var title = $(this).text();
$.ajax({
type: "POST",
url : "articles.php",
data: {
'title': title,
},
success : function(data)
{
console.log(data);
$("#content").html(data);
}
},"json");
});
</script>
这里为了测试目的,你回应你得到的价值
即,echo $_POST['title'];
在您的控制台中,您应该获得title
如果可以,您可以使用ID为result
的div来获取这些值,