我一直在使用PHP一段时间,我一直想知道如何表示单个表单来处理更新和插入数据库。目前,我使用2个单独的表格来执行此操作,它们都具有基本相同的信息和文本框等。我知道有更好的方法来处理这个但我不确定那是什么。
我过去曾尝试使用单个表单,但与php混合的HTML看起来很糟糕,而且很难维护。我是在“干净”和整洁。
有人可以让我走上正轨。
我必须使用的一件事是POST值,如果用户提交表单并且验证未通过,则刷新不应消除已输入的值。
答案 0 :(得分:5)
您可以使用单个表单,其中隐藏字段为id
。如果设置了此字段,那么您应该使用表单的其余部分更新$_POST['id']
记录。如果未设置该字段(即,它具有value =“”),则应将表单数据插入到新记录中。
您将根据操作设置id
字段,例如/data/edit/1
会将id
字段设置为, and
/ data / new`不会设置值它。
例如,您的观点可能是
<form action="/data/edit/1">
<input type="hidden" value="<?php echo $data->id; ?>" />
<input type="text" value="<?php echo $data->name; ?>" />
</form>
如果是新记录,请使用以下数据调用您的视图
$data->id = '';
$data->name = '';
如果是已知记录,只需使用数据
初始化$data
对象
$data->id = $record_id;
$data->name = $record_name;
答案 1 :(得分:1)
如果不使用任何其他框架/库等,我可能会这样做。这基本上就是Elazar Leibovich所说的。
<?php
//id is zero or a record id depending on whether updating or inserting
//an existing record could be edited using edit.php?id=10
//if the id GET parameter is omitted a new record will be created
$id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
$error = '';
if ($id) {
//this array would be in the same format as the one below
$record = fetchRecordFromDb($id);
} else {
$record = array( 'field1' => 'default value', 'field2' => 'some other default' );
}
//allow POST data to override what is already in the form
foreach ($record as $key => $value) {
if (isset($_POST[$key])) {
$record[$key] = $_POST[$key];
}
}
if (isset($_POST['submit'])) {
if (!validateForm()) {
$error = 'Some form error';
} else {
if ($id) {
updateRecord($id, $record);
} else {
insertRecord($record);
}
//ok, redirect somewhere else
header('Location: http://somewhere');
exit();
}
}
?>
<form method="post">
<?php echo $error; ?>
<input type="hidden" name="id" value="<?php echo $id; ?>">
<input type="text" name="field1" value="<?php echo htmlspecialchars($record['field1']); ?>"><br />
<input type="text" name="field2" value="<?php echo htmlspecialchars($record['field2']); ?>"><br />
<input type="submit" name="submit">
</form>