PHP更新表单,仅当使用PDO在该特定字段中存在输入时才更新数据库信息

时间:2017-11-10 05:40:02

标签: php html sql database pdo

我目前正在处理一个使用PHP和SQL更新数据库中信息的表单。它正常运行并更新信息,但问题是......它更新了所有内容,包括我甚至没有输入任何输入的字段,这意味着它只会更新数据库中的特定行并留下其他空白...我需要它只是用实际输入来改变字段中的信息,如果没有输入则保留它。

这是PHP和SQL代码:

try {

$deleteRecId = $_GET['id'];
$update_event_name = $_POST['updateName'];
$update_event_location = $_POST['updateLocation'];
$update_event_date = $_POST['updateDate'];

include 'connect.php';

if(isset($_POST["submit"])) {

// new data
$sql = "UPDATE events SET event_name='$update_event_name', 
event_location='$update_event_location', event_date='$update_event_date' 
WHERE event_id=$deleteRecId";

// Prepare statement
$stmt = $conn->prepare($sql);

// execute the query
$stmt->execute();

// echo a message to say the UPDATE succeeded
echo $stmt->rowCount() . " records UPDATED successfully";
}
}

catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}

并且如果形式:

<form class="update-form" action="<?php echo $_PHP_SELF ?>" method="post">

  <p id="input-headers">Event Name</p>

  <p id="update-input-field-wrapper">
    <input type="text" name="updateName" value="">
  </p>

  <p id="input-headers">Event Location</p>

  <p id="update-input-field-wrapper">
    <input type="text" name="updateLocation" value="">
  </p>

  <p id="input-headers">Event Date</p>

  <p id="update-input-field-wrapper">
    <input type="text" name="updateDate" value="" placeholder="01/01/2000">
  </p>

  <input type="submit" name="submit" value="Submit" id="updateBtn">

</form>

总而言之,我需要这个应用程序只更新具有实际输入的字段的信息,如果表单字段没有输入,我需要保持相同的数据库信息。我很感激任何帮助,因为我对这些概念都很陌生......谢谢!

2 个答案:

答案 0 :(得分:0)

我找到了一个非常方便的解决方案!以下是我在代码中实现它的方法。

$sql = "UPDATE events SET event_name=IF(LENGTH('$update_event_name')=0, event_name, '$update_event_name'), event_location=IF(LENGTH('$update_event_location')=0, event_location, '$update_event_location'), event_date=IF(LENGTH('$update_event_date')=0, event_date, '$update_event_date') WHERE event_id=$deleteRecId";

它基本上只是检查字符串是否为空。如果它是空的,则不会更新。如果它不是空的,它将通过更新!在创建更新表单时实现此效果的非常简单的方法。

答案 1 :(得分:-1)

使用您当前的代码结构,您可以执行此操作。

  1. 使用SQL从事件ID中选择*。使用参数填充update_event_xxx。

  2. 如果$ _POST [xx]为空,请忽略。否则,update_event_xx = $ _POST [xx]