注册
<?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']; 它无法设置我怎样才能纠正它?
答案 0 :(得分:3)
此代码:
编码恐怖
$query8="insert into $u(name,qun)values('$r[$key]',$q[$key])";
注射噩梦!
从安全角度来看,这段代码存在很多错误:
$var = mysql_real_escape_string($_POST['var'')
; $vars
单引号的查询中,始终围绕用于值的'
。mysql_real_escape_string
将无法正常工作,也不会使用任何其他转义功能。有关详细信息,请参阅此问题:How to prevent SQL injection with dynamic tablenames?
答案 1 :(得分:-1)
$_POST['q']
是一个数组,因此您的$query8
将在您使用时失败:
$q[$i]=$_POST['q'];
$q
的所有值都是数组,您无法在数据库中插入数组,如下所示:
$query8="insert into $u(name,qun)values('$r[$key]',$q[$key])";
您可能需要以下内容:
$q[$i]=$_POST['q'][$i];
编辑顺便说一句,您始终需要准备数据以便在数据库中使用。我更喜欢预处理语句/ PDO但是如果你使用常规mysql,你需要在使用类似mysql_real_escape_string
之类的内容之前转义变量。
编辑2:如果是可变的表名或列名,请始终针对白名单进行检查。
答案 2 :(得分:-1)
您确实应该将表单处理代码与表单生成代码分开。这种可怕的混合很难调试。
<?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 ...