如何解决我有用于文本框的数组变量,如何正确使用$ _POST?
| 注册<?php
session_start();
$connection=Mysql_connect(\'localhost\',\'admin\',\'123\');
Mysql_select_db(\'db\',$connection);
if(array_key_exists(\'insert\',$_POST))
{
$query=\"select * from pharmacy\";
$result=mysql_query($query);
if (!$result)
{
print(mysql_errno() .\":\". mysql_error());
}
$num=Mysql_num_rows($result);
$num1=Mysql_num_fields($result);
if($num>0)
{
echo \"<table border=2>\";
for($i=0;$i<$num;$i++)
{
$row=mysql_fetch_row($result);
echo \"<tr>\";
echo\"<td><input type=\'Checkbox\' name=\'p[$i]\' value=\'on\' unchecked /></td>\";
echo\"<td>$row[0]</td>\";
echo\"<td><input type=\'txt\' name=\'q[$i]\' /></td>\";
$r[$i]=$row[0];
if(isset($_POST[\'q\']))
$q[$i]=$_POST[\'q\'];
echo\"</tr>\";
}//for
echo\"</table>\";
}
if(isset($_POST[\'p\']))
foreach($_POST[\'p\'] as $key=>$value)
{
if($value==\"on\")
{
$u=$_SESSION[\'t\'];
$query8=\"insert into $u(name,qun)values(\'$r[$key]\',$q[$key])\";
echo $query8;
$result8 = mysql_query($query8);
//header(\"Location: show.php?\");
}
echo $q[0];
}//for
}
?>
<input type=\"submit\" name=\'insert\' value=\"insert Drugs\"/>
</form>
</body>
我有一个有行的表我将所选的行插入到MySQL的另一个表中
但是当我想插入文本内容时,我遇到了问题
我的问题在这里:if(isset($ _ POST [\'q \']))
$ q [$ i] = $ _ POST [\'q \'];
无法设置该如何纠正?
解决方法
这段代码:
编码恐怖
$query8=\"insert into $u(name,qun)values(\'$r[$key]\',$q[$key])\";
是一场注射噩梦!
从安全的角度来看,此代码有很多错误:
始终使用$var = mysql_real_escape_string($_POST[\'var\'\')
;
在查询中,请始终用\'
单引号括住用于值的$vars
。
如果使用动态数据库,则表或字段名“ 5”将不起作用,任何其他转义功能也将不起作用。
您将需要对照预先批准的表名和字段名列表检查所有表名和字段名。
如果必须使用动态字段和/或列名,请使用```;将其转义。这不是出于安全性考虑,而是为了防止在使用保留字或数字作为列/表名时查询中出现语法错误。
有关更多详细信息,请参见此问题:如何防止使用动态表名进行SQL注入?
, 您确实应该将表单处理代码与表单生成代码分开。这种可怕的混合很难调试。
<?php
if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
if (isset($_POST[\'p\']) && is_array($_POST[\'p\'])) {
foreach($_POST[\'p\'] as $key => $val) {
... do db stuff ...
}
}
}
... generate form here ...
, $_POST[\'q\']
是一个数组,因此您的$query8
将在您使用时失败:
$q[$i]=$_POST[\'q\'];
所有$q
的值都是数组,您不能在这样的数据库中插入数组:
$query8=\"insert into $u(name,$q[$key])\";
您可能需要类似:
$q[$i]=$_POST[\'q\'][$i];
编辑:顺便说一句,您始终需要准备要在数据库中使用的数据。我更喜欢预备语句/ PDO,但是如果您使用常规的mysql,则在使用诸如mysql_real_escape_string
之类的变量插入变量之前,需要先对其进行转义。
编辑2:对于可变表名或列名,请始终对照白名单进行检查。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。