我正在使用JQuery和Ajax创建一个问题/状态发布系统,但是显示的错误是"Notice: Undefined index: status in C:\xampp\htdocs\deadline\data.php on line 5"
,这是我的代码行"$var = $_POST['status']; "
我的系统正常运行,因为您必须登录才能发布问题(使用会话)但是问题在于我的JQuery / AJAX脚本作为我在 homepage.php上的数据未发送到 data.php (根据我的理解,这就是为什么我的索引'状态'未定义)。
我的代码
<?php
include("connection.php");
session_start();
if(isset($_SESSION['user_id']) && $_SESSION['user_id'] != "") {
}
else {
header("location:login.php");
}
$sid = $_SESSION['user_id'];
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$sql = "SELECT * FROM `users` WHERE id='{$sid}'";
$query = $conn->query($sql);
$result = $query->fetch_assoc();
$fname = $result['fname'];
$lname = $result['lname'];
$time = time();
?>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
//daddy code
$ (document).ready(function() {
//mama code
$("button#postbutton").click(function() {
//children code
var status = $("textarea#status").value();
if(status == "") {
return false;
}
var data = 'status='+status;
$.ajax({
type: "POST",
url: "data.php",
data: data,
success: function(data) {
$("#statustext").html(data);
}
});
});
});
</script>
</head>
<body>
<div id="global">
<form action="" onsubmit="return false">
<textarea id="status"></textarea>
<button id="postbutton">POST</button>
<a href="logout.php">LOGOUT</a>
</form>
<br/>
<br/>
<div id="allstatus">
<!-- SKELETON -->
<div id="status">
<div id="statuspic">
</div>
<div id="statusinfo">
<div id="statusname">JOnathan</div>
<div id="statustext"> this is the question</div>
<div id="statusoption"><button id="likestatus">LIKE</button></div>
<div id="statusoption"><button id="commentstatus">COMMENT</button></div>
<div id="statusoption"><button id="sharestatus">SHARE</button></div>
<div id="statusoption"><button id="statustime">TIME</button></div>
</div>
</div>
<!-- SKELETON -->
</div>
</div>
</body>
</html>
&#13;
<?php
$var = $_POST['status'];
const DB_HOST = 'localhost';
const DB_USER = 'root';
const DB_PASS = '';
const DB_NAME = 'forum';
//connecting
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if($conn->connect_error) {
die("Connection Failed: " . $conn->connect_error);
} else {
echo " success";
}
$sql = "INSERT INTO `question`(id, question) VALUES ('', '{$var}')";
$result = $conn->query($sql);
if($result) {
echo "inserted successfuly";
}
else {
echo "failed: " . $conn->error;
}
echo " the text: " .$var. " has been added to database.";
?>
它应该如何运作
我想在 homepage.php 上使用JQuery / AJAX将数据发送到 data.php ,然后该数据会返回 homepage.php < / strong>即可。成功显示在我的div #statustext中。
当我在textarea输入字段中写一个问题时,数据存储在数据库中并检索并显示在浏览器上的div中。 请帮帮我..
答案 0 :(得分:2)
您应该像下面一样更改脚本。 Ajax以序列化的方式向url发送数据要么你必须使用表单序列化,如果你只需要发送一个字段值就可以将所有文件信息发送到你的php url,那么你可以做这个改变
<script type="text/javascript">
//daddy code
$ (document).ready(function() {
//mama code
$("button#postbutton").click(function() {
//children code
var status = $("textarea#status").value();
if(status == "") {
return false;
}
var data = {'status='+status};
$.ajax({
type: "POST",
url: "data.php",
data: data,
success: function(data) {
$("#statustext").html(data);
}
});
});
});
</script>
答案 1 :(得分:1)
POST使用name
而非id
,因此请更改:
<textarea id="status"></textarea>
对此:
<textarea name="status"></textarea>
对于数据,请确保它是表单的数据,并向其添加method="post"
以便它可以发送POST数据。例如,如果您为表单提供了yourForm
的ID:
<强> HTML 强>
<form action="" method="post" id="yourForm" onsubmit="return false">
<强> JS 强>
$.ajax({
...
data: $("#yourForm").serialize(),
...
});
答案 2 :(得分:1)
首先,当您获得消息的价值时,使用.val()
而非.value()
。第二个错误 - 使用两个id = "sattus"
。元素的ID必须是唯一的,或者使用class = ""
来标识元素类。
答案 3 :(得分:1)
不要为1个以上的html元素提供相同的ID!
在您的代码中:
<textarea id="status"></textarea>
和
<div id="status">
都包含相同的ID!请先纠正它。在您的代码中,Spencer在他的回答中提到添加名称属性值为“status”。毫无疑问,当您使用jQuery选择器时,它应该选择正确的选项,尽管您可以在使用AJAX发送请求之前提醒它。
还将数据变量设置为var data = {status : status};