我目前正在编写一个脚本,其中显示了一系列复选框:
<?
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。
答案 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数据中的数组提供。