簡単な例を見てみましょう。Characters
フィールドid
とname
を持つテーブルがあるとしましょうage
。
$char
このテーブルの編集フォームを提供するためのよりクリーンな方法 (IMO) の 1 つは、これらのフィールドを持つ配列 (と呼びましょう) があるとフォームに仮定させることです。メイン コードは、フォーム フィールドやデータベースなど、どこからでもこの配列を取得します。
(多くのことが省略されていることに注意してください。私は、あなたが使用しているデータベースや、どのように検証を行っているのか知りませんし、気にしません。重要な部分はフォーム処理であり、DB に関係なく機能します。)
<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
その行を SELECT し、フォームにあったのと同じ名前でその内容を返します。(フォームとデータベースのフィールド名を一致させておくと、ここでかなり役立ちます。2 つが同じ名前を使用している場合は、行を直接返すことができます。)
function loadCharacter($id) {
... $result = result from: SELECT id, name, age FROM Characters WHERE id = ?
... return first (should be only) row of $result
}
(名前が異なる場合は、変換する必要があります。通常、これは DBMS に任せることができます。詳細については、"SQL 列エイリアス" を Google で検索してください。)
そして、これらすべてを開始するコード...
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
の値が適切な要素に配置されます。