2013-07-02 38 views
-1

我想更改一個名稱,或添加一個表單域,我必須在9個不同的位置執行此操作。有一個更好的方法嗎?我想知道,如果有更好的方式是工作的一半,我可能會做很多工作。HTML表單名稱到PHP PDO語句

我的代碼在文件中的代碼片段如下。代碼只是一個片段,所以我知道它並不完整。

HTML表單

<p> 
<label for="fName">First Name</label> 
<input id="fName" name="fName" class="required" placeholder="As it appears on your passport" /> 
<label for="mName">Middle Name</label> 
<input id="mName" name="mName" placeholder="As it appears on your passport" /> 
<label for="lName">Last Name</label> 
<input id="lName" name="lName" class="required" placeholder="As it appears on your  passport" /> 
</p> 

PHP PDO聲明

$fName = trim($_REQUEST['fName']); 
$mName = trim($_REQUEST['mName']); 
$lName = trim($_REQUEST['lName']); 

$query = $db->prepare("INSERT INTO mform(fname, mname, lname, 

..."VALUES(:fname, :mname, :lname, 



$query->execute(array(
':fname' => isset($fName) ? $fName : null, 
':mname' => isset($mName) ? $mName : null, 
':lname' => isset($lName) ? $lName : null, 
+0

實際上,您應該只進行2次更改,即輸入'name'和$ _POST鍵。你還做了什麼其他的改變? –

+0

記事本,查找和替換。 – egig

+0

通過代碼生成表單,然後生成查詢 – 2013-07-02 01:44:02

回答

0

不是一個完整的答案,但在你的代碼有幾點是可以在沒有任何額外的「框架可以簡化「代碼,只是通過思考邏輯。

  • 未設置被解釋爲NULL自動任何變量,所以isset($fName) ? $fName : null是有些多餘
  • 在消毒代碼
  • ,你定義每個變量,你無論如何消毒(如$fName = trim($_REQUEST['fName'])),所以他們永遠不會被設置(他們可能是空字符串,但那是不同的)
  • 如果一個變量曾經應該NULL,你的禁制代碼就知道了這一點,可以分配值明確,而不是留下一個變量未設置
  • 考慮到上述情況,您的衛生處理可以建立一個關聯數組的消毒值,而不是使用單獨的變量
  • 由於PDO的execute瞭解密鑰,無論是否帶前導:,都可以直接使用此數組將值替換爲準備好的查詢

$sanitised_fields['fName'] = isset($_REQUEST['fName']) ? trim($_REQUEST['fName']) : NULL; 
// Note that $sanitised_fields can now be passed around as a single variable 
// if you want to break apart sanitisation and SQL into separate functions 

// Column names don't have to match array keys, but placeholders do 
$query = $db->prepare("INSERT INTO mform(first_name) VALUES(:fName)"); 
$query->execute($sanitised_fields); 
+0

哇,非常感謝。 因此,我也可以將Insert列中的值更改爲泛型值,因爲它們不必匹配正確嗎? ():'INSERT INTO mform(value1,value2)values(:fName,mName)「);'$ query = $ db-> – JoshJoe