讓我們舉一個簡單的例子。假設我們有一個表Characters
,字段爲id
,name
和age
。
爲此表提供編輯表單的一種更簡潔的方法是讓表單假定有一個包含這些字段的數組(我們稱之爲$char
)。主代碼可以從任何地方得到這個數組,無論是從表單字段還是從數據庫。我不知道或關心你正在使用的數據庫,或者你如何進行驗證;重要的部分是表單處理,而且不管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
來選擇該行,並返回其內容與您在表單中具有的相同名稱。 (保持表格和數據庫字段名稱一致這裏幫助了不少。如果這兩個使用相同的名稱,你可以直接返回行。)
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
的值放在適當的元素中秒。
從數據庫中取回數組,並將其粘貼到$ _REQUEST ['Character']'...?這是最簡單的方法,如果你有表單記住目前發佈的值......只是假設該行是張貼表單。 (這假設你沒有對數據庫中的數據進行大量修改,如果你這樣做了,你將不得不按照表單的形式修改) – cHao 2013-04-24 16:31:06
嗯,我沒有考慮試圖讓數組填寫。我所看到的關於數組的所有'教程'通常都是關於如何使用數組,然後將值打印出來,而不是填寫表格/表格。我會給你一個鏡頭。 這些字段的值就是每個字段的名稱,比如字符名稱是'CharacterName',我是否需要比值字段中的更多來填充所有內容? – 2013-04-24 16:35:58
如果你把'$ _REQUEST ['Character'] ['CharacterName']'放到一個名爲'CharacterName'的字段中,那可能很簡單。如果字段名稱不同,則可以使用列別名使列名稱與表單字段名稱匹配。但我通常更喜歡使表單字段名稱與列名稱匹配,這使得獲取數據庫行並將其用作表單數據集幾乎是微不足道的。 – cHao 2013-04-24 16:38:25