HTML中的值与占位符属性

Jo.*_*o.P 5 html input

我正在处理表单,并且有用户可能填写或未填写的字段。为了使后端逻辑简单,我计划从表单中获取所有数据,并使用所有数据更新我的记录,而不管用户是否输入了字段。

有人告诉我(也许是错误地)我可以获取数据库中当前存在的数据(即页面加载时的数据)并将其放入输入区域的“值”属性中。据推测,如果用户未在该字段中输入任何内容,则旧/当前值将简单地传递回服务器并重新输入(但不会更改)。

如果用户确实输入数据,则该值将成为新值。

所以看起来像这样:

<input type='text' name='XYZ' value='<?php echo $record['XYZ']; ?>'></td>
Run Code Online (Sandbox Code Playgroud)

-1--第一个问题是,这是真的吗?

第二个问题是我不希望此值出现在实际的文本字段中。因此,我在输入标签中添加了一个占位符属性:

<input type='text' name='XYZ' value='<?php echo $record['XYZ']; ?>' placeholder=''></td>
Run Code Online (Sandbox Code Playgroud)

但是value属性似乎覆盖了占位符标签!

-2--因此,第二个Q是,是否有我想要分配的值,而没有在实际文本字段中显示它?

dec*_*eze 6

  1. 嗯,是。该value属性定义“输入字段中的内容”。这是输入字段的。有三种方法可以影响此值:在字段中键入,通过Javascript更改它或通过HTML属性设置。因此,如果您通过HTML属性预先填充值,然后提交表单,则该值将被提交回服务器。

  2. 占位符是只要实际值为空就显示的值。这是为了向用户提示应该输入什么内容;一旦用户确实输入了内容或以其他方式填充了字段(请参见上文),就不再需要占位符。

您必须决定要尝试执行的操作。假设您有一个用户的个人资料页面,用户可以在其中更新他们的信息,在这种情况下,我非常希望填写我所有的当前信息并能够对其进行更改。我不需要空白字段,从可用性的角度来看这没有任何意义。

如果您确实想要空白字段并且仅更新用户已为其填写字段的数据库中的信息,那么最有用的技术可能就是仅更新用户已填写的那些字段:

// only these fields may be submitted
$allowedFields = ['foo', 'bar', 'baz'];

// protecting from invalid submitted data, simplifies SQL injection prevention
if (array_diff(array_keys($_POST), $allowedFields)) {
    throw new Exception('Invalid data submitted');
}

// filter out fields which do not have any input
$data = array_filter($_POST, 'strlen');

// prepare placeholders for binding data
$placeholders = array_map(
    function ($key) { return "`$key` = :$key"; }
    array_keys($data)
);

// prepare your query
$query = sprintf('UPDATE table SET %s WHERE id = :id', join(', ', $placeholders));
$stmt  = $pdo->prepare($query);

$data['id'] = /* some id you get from somewhere to know what record to update */;

$stmt->execute($data);
Run Code Online (Sandbox Code Playgroud)

上面的示例假定PDO作为数据库适配器,并根据您自己的需要进行更改。它证明了编写动态更新仅更新提交的列是非常简单的。您无需对表单数据进行特殊处理。