【发布时间】:2015-07-12 04:22:30
【问题描述】:
我有一个名为 user_requests 的数据库表,其中有一个名为“status”的列。我在 userRequests.php 页面上输出状态'。我通过 while 循环输出所有用户请求。我想要完成的是能够点击“批准”或“拒绝”按钮来更改我的 user_requests 表中的“状态”。我正在尝试使用 AJAX 执行此操作,这是我第一次尝试进行 AJAX 调用。当我点击批准时,我希望它获取我在旁边选择接受的用户的 ID,然后将 'Accept' 和 INSERTthat 的值携带到我的 user_requests 数据库表中的 'status' 行中。
正如我现在所拥有的那样,什么都没有发生。有没有人认为我这样做有什么问题?
userRequests.php
<?php
$con = mysqli_connect("localhost", "root", "", "db");
$run = mysqli_query($con,"SELECT * FROM user_requests ORDER BY id DESC");
$numrows = mysqli_num_rows($run);
if( $numrows ) {
while($row = mysqli_fetch_assoc($run)){
if($row['status'] == "Pending"){
$pending_id = $row['id'];
$pending_user_id = $row['user_id'];
$pending_firstname = $row['firstname'];
$pending_lastname = $row['lastname'];
$pending_username = $row['username'];
?>
<form action="" method="POST" id="status">
<input type='hidden' value='<?php echo $pending_id; ?>' id='pending_id'/>
<?php
if ($pending_firstname == true) {
echo "Name - ". $pending_firstname . " " . $pending_lastname . "</br>" .
"Username - ". $pending_username . "</br></br>"
?>
</form>
<button id="approve" type="submit" form="status" name="approve" value="Approved">Approve</button>
<button id="deny" type="submit" form="status" name="deny" value="Denied">Deny</button><br><br><br>
<?php
;} else {
echo "There are no Pending Requests at this time.";
}
}
}
}
?>
AJAX 调用
<script>
$(document).ready(function(){
$('#submit').click(function(){
var id_val=$("#pending_id").val();
var id_val=$("#approve").val();
$.post("userRequest_approve.php", $("#status").serialize(), function(data) { });
$('#success').html('User Status Changed!');
$('#success').hide(2000);
});
});
</script>
userRequest_approve.php 文件
<?php
require_once 'core/init.php';
$term = mysql_escape_string($term); // Attack Prevention
$pending_id = $_POST['id'];
$status = $_POST['approve'];
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("INSERT INTO user_requests (status, date_responded) VALUES (?, NOW())");
if ( false===$stmt ) {
// Check Errors for prepare
die('User Request update prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('s', $status);
if ( false===$stmt ) {
// Check errors for binding parameters
die('User Request update bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->execute();
if ( false===$stmt ) {
die('User Status update execute() failed: ' . htmlspecialchars($stmt->error));
}
?>
【问题讨论】:
-
$('#submit').click(function(){...... 我没有看到任何 ID="submit" 所以你的点击是错误的 ID,除非我错过了一些代码这里
-
@lauw 很好。我解决了这个问题,现在我从我的 AJAX 调用中收到了我的成功消息,但我的数据库中没有任何变化。
-
您的 javascript 代码没有意义。您定义
var id_val两次,其中第二个值覆盖第一个值。然后你永远不会对var id_val做任何事情。然后你的$.post中有$("#status").serialize(),但是由于你的<form action="" method="POST" id="status">是在循环中完成的,所以你将拥有n的#status数量(其中ids 应该是唯一的)所以怎么样javascript 知道你想要哪个#status表单数据? -
另外,
#pending_id和#approve也有同样的问题。每个都有n编号,所以javascript应该选择哪个,因为它总是会找到第一个,而不是与您单击的按钮相关的那个。 -
@Sean 我不确定 Approve 按钮的值“已批准”是否会发送或如何发送。这就是为什么我做了
var id_val=$("#approve").val();我只是尝试将其更改为var val=$("#approve").val();,但这并没有帮助。我更改希望按钮的“已批准”值发送过来并插入该用户的 ID。
标签: php ajax mysqli prepared-statement