【问题标题】:Update column value to NULL based on $_POST values for both columns? [duplicate]根据两列的 $_POST 值将列值更新为 NULL? [复制]
【发布时间】:2020-03-11 18:09:59
【问题描述】:

尝试根据另一列值 ($_POST['pid']) 将列 ($_POST['dtf']) 值更新为 null,但它不起作用。我尝试了不同版本的 MySQL 语句,但均无济于事。
AJAX

      $(function() {
      $(".remove-tf").click(function() {
      $.ajax({
          type: 'POST',
          url: 'tf-delete.php',
          data: 'pid=' + $(".pid").attr("value") + '&dtf=' + $(this).val()
      });
      });
      });

PHP

<?php
include 'sqlconnection.php';
$conn = OpenCon();
$sql = "UPDATE tasks SET '".$_POST['dtf']."'=NULL WHERE pid=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $_POST['pid']);
if ($stmt->execute()){
    header('Location: listings.php');
};
$stmt->close();
CloseCon($conn);
?>

HTML

<input type="hidden" class="pid" name="pid" value="">
<button class="remove-tf" name="submit" type="button" value="taskimg0">Remove</button>

【问题讨论】:

  • $(".remove-tf").attr("value") 将是 DOM 中第一个 .remove-tf 元素的值,而不是用户点击的那个。
  • 你应该使用$(this).val()来获取被点击元素的值。
  • $(".pid").attr("value") 应该是$(this).prev(".pid").val()
  • @Suboptimizer 他正在使用准备好的语句。但是你不能使用占位符来表示列名。
  • 为什么是$(this).prev(".pid").val()?我不能只根据其类名获取元素的值吗?在我的真实代码中它们并不直接相邻

标签: php jquery mysql ajax


【解决方案1】:

这是你的代码:

$sql = "UPDATE tasks SET '".$_POST['dtf']."' = NULL WHERE pid = ?";

这会产生如下查询:

UPDATE tasks set 'foo' = null where pid = ?

这不是有效的 MySQL。列名不应用单引号括起来(在 ANSI SQL 中,单引号用于字符串字面量)。

只需将您的代码更改为:

$sql = "UPDATE tasks SET ".$_POST['dtf']." = NULL WHERE pid = ?";

或者,如果您想使用带引号的标识符,请使用反引号:

$sql = "UPDATE tasks SET `".$_POST['dtf']."` = NULL WHERE pid = ?";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2021-10-19
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多