首页 > 解决方案 > 为 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 吗?可能吗?

提前致谢。

标签: phpjqueryajax

解决方案


正如 B_CooperA 指出的那样,$POST应该是$_POST.

此外,在 $.ajax 脚本data对象中,您的属性名称是status,而在 action.php 中,您正在检查它prodStatus。此外,您应该通过启用错误报告来检查 PHP 在您的脚本中抛出的错误:error_reporting(E_ALL);

最好将 ajax 调用与视图文件分开。您可以创建一个类来处理所有 ajax 调用(您还应该考虑根据您的用例对调用进行身份验证)。


推荐阅读