POST复选框名称,即使未选中

时间:2015-03-11 15:09:09

标签: php

是否可以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] => '' ) 

3 个答案:

答案 0 :(得分:0)

在复选框之前添加此内容。

<input type='hidden' name='alert_by_email' value="" />

答案 1 :(得分:0)

直截了当的答案是否定的。 如果未选中,HTML表单将不会发送复选框。

但是,有一些解决方法:

  1. 使用js为您拥有的每个复选框生成隐藏的输入,将值设置为0或&#39;&#39;并且每当您检查它们时,请删除隐藏的输入。
  2. 您可以简单地测试帖子中是否存在密钥,如下所示: if (isset($_POST['alert_by_email']))

答案 2 :(得分:0)

简而言之,如果您在不使用任何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或其他内容。