尝试使用ajax jquery将2个变量传递给php

时间:2019-07-03 16:38:53

标签: php jquery

我一直在寻找一种在执行onclick函数时将一些数据更新到数据库中的方法。 想法是更新包含单词“ Active”的按钮的值,并且在执行onclick时喜欢将mysql更新为“ Inactive” 这是按钮:

$register_status = '<button class="btn btn-success btn_status btn-block" data-status="Active">Active</button>';

如何赋予数据变量,以便我们可以使用$ _POST在PHP中获取它?上面的数据变量表示形式显示错误。

scripts.js

$(document).ready(function(){
  $('body').click('.btn_status', function(e){
  var button = jQuery(e.target);
        if(button.data('status') == 'Active'){ 

        var data = {id:id, register_status:Inactive};
        $.ajax({
           type: "POST",
           dataType: "json",
           url: "ajax/updateStatus.php",
           data: data,
           success: function(data) {
                alert("update!");
           }
        });

        }else if(button.data('status') == 'Inactive'){
          alert("nothing");
        }
  });
})

ajax / updateStatus.php

include("db_connection.php");

if(isset($_POST))
{
    $id = $_POST['id'];
    $register_status = $_POST['register_status'];
    $query = "UPDATE `users` SET `register_status` = '$register_status'  WHERE `id` = '$id'";
    if (!$result = mysqli_query($db,$query)) {
        exit(mysqli_error());
    }
}

更新:

这是另一个要删除的功能。该功能正常运行。

function DeleteUser(id) {
        $.post("ajax/deleteUser.php", {
                id: id
            },
            function (data, status) {
                readRecords();
            }
        );
}

deleteUser.php

<?php
if(isset($_POST['id']) && isset($_POST['id']) != "")
{
    include("db_connection.php");
    $user_id = $_POST['id'];
    $query = "DELETE FROM users WHERE id = '$user_id'";
    if (!$result = mysqli_query($db,$query)) {
        exit(mysqli_error());
    }
}
?>

点击一次即可将其删除:

<li onclick="DeleteUser('.$row['id'].')"><a href="#">Delete</a></li>

但是,这似乎不起作用。如果有更好的方法来做我上面提到的事情。谢谢

1 个答案:

答案 0 :(得分:2)

根据示例,您将需要进行一些更改:

JavaScript

$(function(){
  function updateStatus(id, st){
    $.post("ajax/updateStatus.php", {"id": id, "register_status": st}, function(data, status){
       console.log("Update Success", data, status);
       readRecords();
    });
  }

  $('body').on('click', '.btn_status', function(e){
    var button = $(this);
    updateStatus(1001, (button.data("status") === "Active" ? "Inactive" : "Active"));
  });
});

首先,像平常一样使用click()并不是最佳方法。使用.on()会更好,因为它可以处理任何新的或动态创建的项目。

此脚本将要求在某处定义id。 AJAX需要将id信息发送到PHP。您发布的代码没有显示此内容,因此我不确定它的值应该是什么。

PHP(updateStatus.php)

include("db_connection.php");

if(isset($_POST['id'])){
    $id = (int)$_POST['id'];
    $register_status = ($_POST['register_status'] == "Inactive" ? "Inactive" : "Active");
    $query = "UPDATE `users` SET `register_status` = '$register_status'  WHERE `id` = '$id'";
    if (!$result = mysqli_query($db,$query)) {
        exit(mysqli_error());
    }
}

这些更新可以帮助防止SQL注入。我建议您使用Prepared Statements来进一步预防。

更新

如果您选择的按钮将是这样的:

<button onclick="ChangeStatus('.$row['id'].') class="btn btn-success btn_status btn-block" data-status="Active">Active</button>

请注意,这只是从PHP传入ID。如果这些项目始终为“有效”,那么可以的,您可以使用类似的方法进行

function ChangeStatus(id){
  $.post("ajax/updateStatus.php", {id: id}, function(data, status){ console.log(status, data)});
}

使用 PHP 之类的

<?php
if(isset($_POST['id']) && $_POST['id'] != ""){
  include("db_connection.php");
  $user_id = (INT)$_POST['id'];
  $query = "UPDATE `users` SET `register_status` = 'Inactive'  WHERE `id` = '$user_id'";
  if (!$result = mysqli_query($db,$query)) {
    exit(mysqli_error());
  }
}
?>

希望这会有所帮助。