感谢在过去几个月里给我这么好建议的每一个人。我几乎完成了这个项目,我学到了很多。但我有点被短信区难住了。我在谷歌上搜索了又搜索,找不到解决方案。
这不是一个面向公众的网站,所以我不担心sql注入,而且我的组织使用的是旧版本的PHP,所以我必须使用mysql_query而不是mysqli_query。
我的问题是,我必须将数据库中的两个内容回显到表单中,这样用户就可以编辑数据库,然后用新的输入更新数据库。一个是我使用input="text"显示的一小串文本。然而,另一个是列出一组指令的较长字符串,所以我使用它,因为它对于文本框来说太多了。然而,当我运行更新查询时,只有文本区域字符串的第一个字母会更新到我的数据库中。文本框字符串工作正常。这是我的代码
getrcs.php
<html>
<form>
<body>
<?php
$q = intval($_GET['q']);
include ('database_connect.php');
$sql= "SELECT * FROM RDS_REFERENCE WHERE ID = '".$q."'";
$query_result=mysql_query($sql);
?>
<table>
<tbody>
<?php
while($row = mysql_fetch_array($query_result)) {
?>
<tr>
<td>
<label>Sub File Series Number/Title</label>
<input type="text" style="width:250px;" required="Required" name="sub_fs_num_tle1[]" value="<?php echo $row['SUB_FS_NUM_TITLE']?>/>
</td>
<td>
<label>Disposition Instructions</label>
<textarea name="disp_instr1" cols="40" rows="30" style="font-family: Arial, Helvetica sans-serif; font-size: 12px;"><?php echo $row['Disposition_Instructions'] ?></textarea>
</td>
</tr>
<?php
}
?>
</tbody>
</form>
</body>
</html>
并更新_rcs.php
<?php
include('database_connect.php');
foreach($_POST['id'] as $row => $id)
{
$sub_fs_num_tle1 = $_POST['sub_fs_num_tle1][$row];
$disp_instr1 = $_POST['disp_instr1'][$row];
$rcs_reference_update1 = "UPDATE RDS REFERENCE SET
SUB_FS_NUM_TITLE = '$sub_fs_num_tle1',
Disposition_Instructions = '$disp_instr1'
";
mysql_query($rcs_reference_update1) or die("Could not update".mysql_error());
}
header('Location:rcs_maint.php');
?>
由于您的输入是name="disp_instr1"
,因此$_POST['disp_instr1']
是string
,而不是array
。这意味着$_POST['disp_instr1'][$row]
将输出该字符串中的任何字符$row
。
简单演示:
$test = 'test';
echo $test[0];
输出:
t
现场演示:https://eval.in/541463
要解决此问题,请使用:
$disp_instr1 = $_POST['disp_instr1'];
此外,SQL注入并不是使用参数化查询的唯一原因。如果一个报价需要转到您的数据库,它将按原样失败。