-1

我只想更改一个名称,或者添加一个表单域,我必须在 9 个不同的地方进行。有一个更好的方法吗?我想知道当有一种更好的方法可以完成一半的工作时,我是否正在做很多工作。

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

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,
4

1 回答 1

0

不是一个完整的答案,但您的代码中有几点可以简化,无需任何额外的“框架”代码,只需考虑逻辑即可。

  • 任何未设置的变量都被解释为NULL自动,因此isset($fName) ? $fName : null有些多余
  • 在您的清理代码中,无论如何都要在清理时定义每个变量(例如$fName = trim($_REQUEST['fName'])),因此它们永远不会被设置(它们可能是空字符串,但这是不同的)
  • 如果变量应该NULL,您的清理代码将知道这一点,并且可以显式分配值而不是未设置变量
  • 鉴于上述情况,您的清理可以构建清理值的关联数组,而不是使用单独的变量
  • 由于 PDOexecute理解带或不带前导的键:,因此您可以直接使用此数组将值替换为准备好的查询

.

$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);
于 2013-07-02T17:55:20.107 回答