php - 为 PHP 函数实现 Ajax
问题描述
由于 PHP 导致的最大站点负载,我正在尝试实现 ajax。但我不知道我在哪里犯了错误。它是一个锚标记,当单击它时,特定行的状态应更改为硬编码的字符串。
PHP方式
用户详细信息.PHP
<a href="USERDETAIL.php?changeStatus=<?php echo $row['id'] ?>" class=" btn-custom btn btn-success" onclick="return confirm('Are you sure changing status?')">Next</a>
然后它触发这个(IGNORE SQL INJECTION)
if(isset($_GET['changeStatus'])){
$id = $_GET['changeStatus'];
$user=$_SESSION['user'];
$sql = "select * from productOrder where id = ".$id;
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0){
$row = mysqli_fetch_assoc($result);
$sql = "update productOrder set prodStatus = 'Ready', By='".$user."' where id=".$id;
if(mysqli_query($conn, $sql)){
header("Location:USERDETAIL.php");
}
}
}
按照这种方式,它工作得很好,但是 userdetail.php 无论如何都会刷新,这很耗时。然后尝试了AJAX方式如下。
<a href="#" data-id="<?php echo $row['id'] ?>" data-role="changeStatus" class="changeStatus btn-custom btn btn-success" onclick="return confirm('Are you sure changing status?')">Next</a>
这就是
$(document).ready(function() {
$(".changeStatus").click(function(event){
event.preventDefault();
var status = "Ready";
var id = $(this).attr('data-id');
$.ajax({
url : 'action.php',
method : 'POST',
data : {status : status , id : id},
dataType: 'html',
success : function(response){
console.log(response);
}
});
});
});
在 action.php 中它是(再次忽略 SQL 注入)
if(isset($POST['prodStatus'])){
$status = $_POST['prodStatus'];
$id = $_POST['id'];
$sql = "update productOrder set prodStatus= '$status' where id=".$id;
$result = mysqli_query($conn, $sql);
if($result){
return 'Updated';
}
}
输出是什么都没有发生。在控制台中,它只是添加 int 值。我知道我犯了一个错误,或者以错误的方式理解了 AJAX。只需单击一个按钮,SQL 中的字符串就应该在没有输入文本/模式的情况下更新。请建议应该改进什么?
另外,我可以使用 Ajax 在 userdetail.php 本身中完成所有这些操作,而不是为这些操作使用单独的操作 php 吗?可能吗?
提前致谢。
解决方案
正如 B_CooperA 指出的那样,$POST
应该是$_POST
.
此外,在 $.ajax 脚本data
对象中,您的属性名称是status
,而在 action.php 中,您正在检查它prodStatus
。此外,您应该通过启用错误报告来检查 PHP 在您的脚本中抛出的错误:error_reporting(E_ALL);
最好将 ajax 调用与视图文件分开。您可以创建一个类来处理所有 ajax 调用(您还应该考虑根据您的用例对调用进行身份验证)。
推荐阅读
- wpf - 更改文本框 IsReadOnly 属性后,无法输入中文
- mysql - SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(Laravel)
- css - 具有多列和多行的 Flexbox 响应式布局:实现“列间隙”的最佳实践?
- reactjs - Div 不会从 css-grid 父级推断最大宽度,省略号永远不会发生
- reactjs - reactjs中如何对数组进行排序
- mongodb - MognoDB - 基于日期的数组聚合计数
- javascript - 在 v-for 中 Vuetify v-autocomplete onchange 事件
- ruby - post_connection_check':主机名“ip”与服务器证书不匹配(OpenSSL::SSL::SSLError)
- drools - 无法将项目从远程 git/stash 存储库导入到 Business-Central
- php - Codeigniter 将 word 文件下载到特定文件夹