【问题标题】:Ajax request not working on button click using PHP and MySQLAjax 请求在使用 PHP 和 MySQL 的按钮单击时不起作用
【发布时间】:2019-10-13 10:18:54
【问题描述】:

我在单击按钮时通过 JavaScript 发送 ajax 请求。单击按钮时,会从执行 ajax 请求的位置调用函数。

这是调用函数的html代码:

echo "
<form > ";
if ($status == 'regular') {
    echo "<input type='hidden' value='".$id."' name='id'>";
     echo "<input type='hidden' value='official' name='status'>";
    echo "<td><button class='btn btn-info' onclick='UpdateStatus(".$id.",'official')'>UPDATE TO OFFICIAL</button><br><br>";
}
if ($status == 'official') {
     echo "<input type='hidden' value='".$id."' name='id'>";
     echo "<input type='hidden' value='regular' name='status'>";
echo "<td><button class='btn btn-success' onclick='UpdateStatus(".$id.",'regular')'>UPDATE TO REGULAR</button><br><br>";
    }
echo "</form>";

UpdateStatus()是有ajax请求的函数。我从这里发送$id,这是用户 ID 和要更新的状态。

这里是 UpdateStatus() 函数:

<script>
function UpdateStatus(str,str1) {
if (str.length == 0) {
    document.getElementById("txtHint").innerHTML = "";
    return;
} else {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
      //ready
    };
    xmlhttp.open("GET", "update_status.php?id=" + str + "&status=" + str1, true);
    xmlhttp.send();
}
}
</script>

str 和 str1 分别是 ID 和状态。这是update_status.php:

<?php
$id = $_REQUEST["id"];
$status = $_REQUEST["status"];
$server_name = "localhost";
$user_name = "root";
$password = "";
$db = "diwan";
$conect = new mysqli($server_name, $user_name, $password, $db);
if($conect->connect_error)
{ die("Connection failed ".$conect->connect_error); }
$sql = "UPDATE user SET status = '$status' WHERE UserID = $id";
if(!$conect->query($sql))
      {echo "error in adding record ".$conect->error;}
$result = $conect->query($sql);
?>

当我点击按钮时,我会得到这种格式的网址:

http://localhost/diwan_web/manageusers.php?id=2&status=official

但它不会更新数据库中的数据。请指导我哪里错了或者有什么遗漏。任何建议都将受到高度赞赏。

【问题讨论】:

  • “txtHint”的目的是什么?当您单击更新按钮时,您是否获得函数 UpdateStatus(str,str1) 中的值?您可以使用 console.log(str,str1);内部函数。
  • 是的,这些值正在进入函数并进入下一页,我也发布了网址,您可以查看
  • 在代码中使用die(mysqli_error($conn)); 是一个非常糟糕的主意,因为它可能会泄露敏感信息。更多解释见这篇文章:mysqli or die, does it have to die?
  • 这只是一个测试一些东西的示例代码,我会在项目中避免这些东西
  • 您正在运行更新查询两次。一次在if 中,然后再次将返回值分配给$result。

标签: javascript php html mysql ajax


【解决方案1】:

看起来你的语法是错误的。尝试 $sql = "UPDATE user SET status = ".$status." WHERE UserID = ".$id";

【讨论】:

    【解决方案2】:

    代码看起来不错。可能有一个您没有看到的错误。

    将此添加到顶部:

    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', true);
    

    【讨论】:

      【解决方案3】:

      有一些问题:

      1. 您需要确保按钮不会重新加载页面(使用type='button',如another post 中所述)。
      2. 我们应该始终对 HTML 属性使用双引号来防止此类错误(使用 onclick=\"UpdateStatus('param-here')\" 而不是 onclick='...')
      3. 如果您使用 PHP 的双引号功能,则无需手动连接(如果 PHP 在像 echo "Variable is: $x" 这样的双引号中找到 $,它会尝试自动查找并连接 $x 变量)。

      如果您应用上述更改,您的代码应如下所示:

      echo "<form >";
      if ($status == 'regular') {
        echo "<input type='hidden' value='$id' name='id'>";
        echo "<input type='hidden' value='official' name='status'>";
        echo "<td><button type='button' class='btn btn-info' onclick=\"UpdateStatus('$id','official')\">UPDATE TO OFFICIAL</button><br><br>";
      }
      if ($status == 'official') {
        echo "<input type='hidden' value='$id' name='id'>";
        echo "<input type='hidden' value='regular' name='status'>";
        echo "<td><button type='button' class='btn btn-success' onclick=\"UpdateStatus('$id','regular')\">UPDATE TO REGULAR</button><br><br>";
      }
      echo "</form>";
      

      【讨论】:

        猜你喜欢
        • 2017-10-13
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2014-03-24
        • 1970-01-01
        相关资源
        最近更新 更多