存储复选框数据

时间:2009-08-28 22:05:35

标签: php mysql forms checkbox

我目前正在编写一个脚本,其中显示了一系列复选框:

<?
  while($i = mysqli_fetch_array($get_perms)){

  $pname = $i[pname];
  $id = $i[id];
?>
  <div>
    <input type="checkbox" tabindex="1" name="<? echo("$id");?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo(" $pname");?>
  </div>
<? } ?>     

但是,我还有另一部分做了类似的事情,但是Sget_perms是一个不同的sql来获取不同的数据。

现在,显然,当将数据发布回表单/脚本时,在区分表单中的两个数据位之间会出现问题。

这是用于更新从表单中提供的数据的SQL:

$insert = mysql_query("UPDATE `perms` SET
    `title`='$_POST[title]',
    `1` ='$_POST[1]',
    `2` ='$_POST[2]',
    `3` ='$_POST[3]',
    `4` ='$_POST[4]',
    `5` ='$_POST[5]',
    `user` ='$_POST[username]'
     WHERE `userid` = '$valued_user_show[id]'
")

那么我究竟如何才能正确区分两者,并且能够正确输入SQL?

表的架构基本上是:

7列,userid,user,1,2,3,4,6 userid是在表单之前已发布到脚本的用户的用户标识。用户是名字。 这些数字是许可号码。

$ get_perm是用于从数组中的表加载有关用户的当前信息的SQL。

2 个答案:

答案 0 :(得分:2)

首先:从不在SQL语句中包含用户提交的数据而不转义它!恶意用户可以利用它来破坏您的数据,在未经授权的情况下检索数据,并造成各种伤害。始终使用mysql_real_escape_string()来转义进入查询的提交值。

关于你的实际问题:要区分你的两个相似的字段集,只需给它们不同的名称。也许第一个叫做permsA,第二个叫permsB。然后你会得到这样的HTML:

<input type="checkbox" tabindex="1" name="permsA_<? echo $id;?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo htmlspecialchars($pname);?>

请注意,我还调用htmlspecialchars()来正确转义$pname值以便在HTML中使用,我省略了"$id"周围不必要的引号(将变量放在引号中)这只是让PHP做了额外的处理来解析字符串;你可以在没有引号的情况下自己回显变量。

然后在你的SQl声明中:

$insert = mysql_query("UPDATE `perms` SET
    `title`='" . mysql_real_escape_string($_POST[title]) . "',
    `1` ='" . mysql_real_escape_string($_POST['permsA_1'] . "',
    `2` ='" . mysql_real_escape_string($_POST['permsA_2'] . "',
    `3` ='" . mysql_real_escape_string($_POST['permsA_3'] . "',
    `4` ='" . mysql_real_escape_string($_POST['permsA_4'] . "',
    `5` ='" . mysql_real_escape_string($_POST['permsA_5'] . "',
    `user` ='" . mysql_real_escape_string($_POST['username']) . "'
     WHERE `userid` = '$valued_user_show[id]'
")

此处唯一的更改是添加permsA_前缀,并正确转义所有用户提交的值。

答案 1 :(得分:1)

使用您的复选框创建一个数组:

<input type="checkbox" name="mycheckbox[]"/>

“mycheckbox”将作为_POST数据中的数组提供。