即使
未选中,是否可以POST复选框名称?
<input type='checkbox' class='tinyField' name='alert_by_email' value="1" <?PHP echo $alert_by_emailChecked ?> />
foreach ($_POST AS $field => $value)
$sql[] = $field." = '". $value."'";
$sql = implode(' , ',$sql);
$query = "UPDATE user_setup SET ".$sql." WHERE (userID = ".$userID.") " ;
$res = mysql_query($query);
因此,当我PRINT_R POST 时,我将得到该字段,但它将是空的
Array ( [alert_by_email] => '' )
在复选框之前添加此项。
<input type='hidden' name='alert_by_email' value="" />
直接的答案是否定的。如果未选中,HTML 表单将不会发送复选框。
但是,有一些解决方法:
- 使用 js 为每个复选框生成隐藏输入,将值设置为 0 或 '',并在选中它们时删除隐藏输入。
- 您可以简单地测试帖子中是否存在密钥,如下所示:
if (isset($_POST['alert_by_email']))
简而言之,不,如果您在不使用任何Javascript的情况下发布FORM,这是不可能的。
此外,您的代码可能很容易注入,因为您依赖于用户提供的列名称而无需验证这些列名称。我正在发布其他方法来做到这一点。希望有帮助:
假设你有这个 HTML 表单:
<form method="POST">
First name:<br />
<input type="text" name="firstname" />
<br />
Last name:<br />
<input type="text" name="lastname" /><br />
<input type="submit" />
</form>
现在,如果你想使用 PHP 更新值,你的代码应该是:
<?php
$columnArray = array('firstname' => NULL, 'lastname' => NULL); // This is list of columns which can be updated using form input values (NULL is default value here)
$submittedValues = array_intersect_key($_POST, $columnArray);
// Above code will produce an array like `array('firstname' => 'anyname', 'lastname' => 'anylastname')
//--> Now you can generate your SQL using `$submittedValues`
$sql = array();
foreach ($submittedValues as $field => $value)
{
$sql[] = $field." = '". $value."'";
}
$sqlString = implode(' , ',$sql);
使用这种方式,黑客将无法添加用户不应更新的额外列,即last_login_date或其他内容。