让我们举一个简单的例子。假设我们有一个 table ,Characters
带有 fieldsid
和。name
age
为该表提供编辑表单的一种更简洁的方法(IMO)是让表单假设有一个$char
包含这些字段的数组(我们称之为它)。主代码将从任何地方获取此数组,无论是从表单字段还是从数据库。
(注意,很多东西都被省略了。我不知道也不关心您使用的是什么数据库,也不关心您如何进行验证;重要的部分是表单处理,无论数据库如何,它都有效。)
<form method="post">
<input type="hidden" name="Character[id]" value="<?= intval($char['id']) ?>">
<input name="Character[name]" value="<?= htmlentities($char['name']) ?>">
<input name="Character[age]" value="<?= htmlentities($char['age']) ?>">
<input type="submit">
</form>
提交表单时,$_POST['Character']
将是一个数组,并包含表单提交的有关角色的所有信息。
让我们有一个saveCharacter
可以获取该信息并将其保存为一行...
(伪代码行以...
; 片段看起来...like this...
)
function saveCharacter($char) {
if (empty($char['id'])):
... do insert
... $char['id'] = last insert ID
else:
... do update
endif;
// return the saved char; inserting would have added an ID
return $char;
}
...并loadCharacter
选择该行,并返回其内容与您在表单中的名称相同。(保持表单和数据库字段名称一致在这里很有帮助。如果两者使用相同的名称,您可以直接返回该行。)
function loadCharacter($id) {
... $result = result from: SELECT id, name, age FROM Characters WHERE id = ?
... return first (should be only) row of $result
}
(如果名称不同,您需要进行转换。您通常可以让 DBMS 为您执行此操作;谷歌搜索“SQL 列别名”以获取更多信息。)
以及启动这一切的代码......
if (isset($_POST['Character'])) {
$char = saveCharacter($_POST['Character']);
}
elseif ( ...the user already has a character id... ) {
$char = loadCharacter(...character id...);
}
else {
// first time on the page, and there's no saved character
// give $char the right field names, to prevent notices
$char = array('id' => null, 'name' => null, 'age' => null);
}
当您从上面包含表单时,它会将$char
' 值放入适当的元素中。