【问题标题】:PHP - SQL - Update Data on Button ClickPHP - SQL - 点击按钮更新数据
【发布时间】:2017-12-18 04:08:40
【问题描述】:

创建此问题是因为我之前的问题包含 2 个问题,而不是缩小到 1 个

瞄准

当用户选择三个变量来访问数据时,用户将能够单击一个按钮来更改该数据的其中一个细节。

SQL - 数据库表 (SchoolData)

+-----+--------+------------+------------+----------------+-----------+
|  ID |  Class |   Teacher  |  YearMonth |   Description  |   Status  |
+-----+--------+------------+------------+----------------+-----------+
|  1  |  Alpha |    Sara    |  2017/01   |  Good & Clean  |  Pending  |
+-----+--------+------------+------------+----------------+-----------+
|  2  |  Alpha |    Sara    |  2017/01   |  Has 30 Chairs |  Pending  |
+-----+--------+------------+------------+----------------+-----------+
|  3  |  Alpha |    Sara    |  2017/01   |  Has 30 Tables |  Pending  |
+-----+--------+------------+------------+----------------+-----------+
|  4  |  Alpha |    Sara    |  2017/01   |   5 Subjects   |  Pending  |
+-----+--------+------------+------------+----------------+-----------+
|  5  |  Beta  |    John    |  2016/11   |   Big & Clean  |  Official |
+-----+--------+------------+------------+----------------+-----------+
|  6  |  Beta  |    John    |  2016/11   |   New Student  |  Official |
+-----+--------+------------+------------+----------------+-----------+
|  7  |  Beta  |    John    |  2016/11   | Injured Student|  Official |
+-----+--------+------------+------------+----------------+-----------+
|  8  |  Beta  |    John    |  2016/11   |   6 Subjects   |  Official |
+-----+--------+------------+------------+----------------+-----------+

网页

+---------------------------------------------------------------+
|                                                               |
| |>Select Class<|   |>Select Teacher<|   |>Select Year/Month<| |
|                                                               |
|                         (Search)                              |
|                                                               |
|                                                               |
|>>>>>>>>>>>>>>>>>>>>>>>>>>INPUT<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<|
|                                                               |
|      {Class}           {Teacher}           {Description}      |
|                                                               |
|                                                               |
|                        (Update)                               |
|                                                               |
+---------------------------------------------------------------+
  • 传说

    下拉列表 - |>

    按钮 - ()

    文本输入 - {}


网页说明

更新按钮会将所选数据的“状态”更改为“待处理”。因此,如果假设用户搜索 |测试版 |约翰 | 2016/11 |并单击更新按钮,该数据的“状态”将从“官方”更改为“待定”

但如果员工搜索“状态”已经“待定”的数据,例如 | Alpha | Sara | 2017/01 |,更新按钮将被禁用。


HTML 表格

<!--Those data are setting for checking data existance in the database -->
<input type="hidden" name="class" value=" <?php echo $class;  ?>" >
<input type="hidden" name="date" value=" <?php echo  $getDate;  ?>">
<input type="hidden" name="teacher" value=" <?php echo  $teacher;  ?>" >
<input type="hidden" id="inputStatus" name="status" value="">

更新按钮 (HTML)

<td colspan="1" valign="bottom" align="left">
    <button type="button" class="btn btn-lg update" id="btnUpdate" name="update"> Enable Re-Submit </button>
</td>

更新按钮功能(JavaScript)

$(function (){
    $("button#btnUpdate").on('click', function (e){
        e.preventDefault();
        $("#inputStatus").val("update");
        $.ajax({
            type: 'post',
            url: 'changeClassStatus.php'
        });
    }
}

changeClassStatus.php (PHP)

<?php
  $class  = trim($_POST['calss']);
  $teacher = trim($_POST['teacher']);
  $date   = $_POST['date'];
  $date   = $date."/01";
  $status = $_POST['status'];
  $empId = $_POST['empId'];

    if($status == 'update'])){
        $sqlUpdate = mysqli_query($conn,"UPDATE SchoolData SET Status='Pending' WHERE (Class=$class AND Teacher=$teacher AND ID='".$id[$i]."' AND YEAR(MonthYear)= YEAR('$date') AND MONTH(MonthYear)= MONTH('$date'));";
        $sqlExecute=$conn->query($sqlUpdate)or exit("Error code ({$conn->errno}): {$conn->error}");

        echo "Data Status Changed";
    }
?>

问题描述

我已经实现了代码,但它们没有更新搜索数据的状态。当我点击 Update 按钮时,数据没有更新,也没有任何反应(没有变化和没有回声消息)

附加说明

此问题与PHP - SQL - Disable, Hide or Enable Button based on Data 相关联。如果我的问题有任何缺失或不准确的信息或问题,请告诉我。谢谢你

【问题讨论】:

  • 什么是错误?
  • 在提供的代码中,您不向服务器发送任何数据。没有什么可更新的/
  • 实际上你需要通过ajax post方法发送所有数据,这样php代码才能工作。您没有发送任何数据
  • 请添加表格HTML(2-3条记录html),以便我们告诉您如何获取所有数据并发送到您的PHP
  • $conn-&gt;query($sqlUpdate) 会给你一个错误,因为你已经在之前的行中执行了查询,并且你正在执行更新,所以mysqli_query 返回一个布尔值。

标签: javascript php jquery html mysql


【解决方案1】:

在您的 If 语句中让我们开始,但尝试查看是否所有变量都正确传递到您的查询中,您可以通过编写来做到这一点。

echo $class;
echo $teacher;
etc .... 

在查询之前的 if 语句内部。

我注意到$class = trim($_POST['calss']); 应该是“类”吗?还是上课?

【讨论】:

  • 是的,它是一个错字,它应该是类。我会让你知道回声消息。我将很快编辑我的问题。谢谢=D
  • 没有回显消息。这意味着没有发送任何内容:(
  • 另一行看起来不正确的代码是: if($status == 'update'])) 确保修复语法错误。
【解决方案2】:

让我用你的代码来解释一下

$("button#btnUpdate").on('click', function (e){
        e.preventDefault();
        $("#inputStatus").val("update");
        $.ajax({
            type: 'post',
            url: 'changeClassStatus.php'
        });
    }

在服务器端,PHP 期望来自 AJAX 发布请求的以下变量

$class  = trim($_POST['calss']);
  $teacher = trim($_POST['teacher']);
  $date   = $_POST['date'];
  $date   = $date."/01";
  $status = $_POST['status'];
  $empId = $_POST['empId'];

所以你的 AJAX 请求应该用下面给定的语法重写。

上述AJAX请求不包含任何post参数。您应该为其添加数据属性。请参阅下面的示例

$.ajax({
    url: 'url',
    type: 'GET',
    data: { field1: "hello", field2 : "hello2"} ,
    contentType: 'application/json; 
    charset=utf-8'
});

【讨论】:

  • 我将很快编辑我的问题。感谢你的回复。我会尝试一下并回复你=D
【解决方案3】:

在 jQuery ajax 调用中,将字段变量以 JSON 格式传递给 data 属性,因为您的 php 脚本使用 $_POST 获取字段变量值,使用 type 作为 post。

$.ajax({
    url: 'changeClassStatus.php',
    type: 'POST',
    data: { calss: "hello", teacher : "hello2", date : "01/01/2017", status: "Active", empId : 12 },
    contentType: 'application/json; charset=UTF-8',
    success: function (response) {
        console.log(response.status);
    },
    error: function () {
        alert("error");
    }
}); 

在这里,如果在 ajax 调用中传入 data 属性,您的 php 脚本将获取值。在 if 条件下,检查空变量并仅在值不为空时更新。

 <?php
      $class  = trim($_POST['calss']);
      $teacher = trim($_POST['teacher']);
      $date   = $_POST['date'];
      $date   = $date."/01";
      $status = $_POST['status'];
      $empId = $_POST['empId'];

if((!empty($status) && $status == 'update') && !empty($class) && !empty($teacher) && !empty($date) && !empty($empId)){
        $sqlUpdate = mysqli_query($conn,"UPDATE SchoolData SET Status='Pending' WHERE (Class=$class AND Teacher=$teacher AND ID='".$id[$i]."' AND YEAR(MonthYear)= YEAR('$date') AND MONTH(MonthYear)= MONTH('$date'));";
        $sqlExecute=$conn->query($sqlUpdate)or exit("Error code ({$conn->errno}): {$conn->error}");

        echo "Data Status Changed";
    }

    ?>

【讨论】:

  • 谢谢,我会试试这个并回复你。我也将很快编辑我的问题=D
猜你喜欢
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多