我目前正在处理一个使用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>
总而言之,我需要这个应用程序只更新具有实际输入的字段的信息,如果表单字段没有输入,我需要保持相同的数据库信息。我很感激任何帮助,因为我对这些概念都很陌生......谢谢!
答案 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)
使用您当前的代码结构,您可以执行此操作。
使用SQL从事件ID中选择*。使用参数填充update_event_xxx。
如果$ _POST [xx]为空,请忽略。否则,update_event_xx = $ _POST [xx]