我正在尝试使用一个表单更新多个记录,但在尝试使用 addslashes
功能时遇到了问题。
表格如下:
<form name="form1" method="post" action="editnewscategorysubmit.php">
<table width="405">
<tr>
<td width="246"><span class="link1">News Category </span></td>
<td width="146" colspan="2"><span class="link1">Delete?</span></td>
</tr>
<tr>
<td>
<input type='text' name='title[]' value='$title' style='width:700px;'>
<input type='hidden' name='id[]' value='$id'>
</td>
<td>
<div style='padding-left:8px;'><a onclick='return confirmSubmit()' href='deletenewscategory.php?id=$id'><img src='images/delete.jpg' border='0'></a></div>
</td>
</tr>
<tr>
<td><input name="image" type="image" src="images/submit.png" alt="Submit Form" border="0" /></td>
<td colspan="2"> </td>
</tr>
</table>
</form>
处理它的PHP代码如下所示:
$identity = $_REQUEST['id'];
$title = addslashes($_REQUEST['title']);
include 'connection.php';
for($i=0;$i<count($identity);$i++)
{
$query = "update newscategory set title = '$title[$i]' where id = '$identity[$i]'";
$result = mysql_query($query) or die(mysql_error());
}
echo "Success. The news categories were updated.";
include 'return.php';
返回的警告是:
警告:addslashes()期望参数1为字符串,数组为 第71行/home/u180175506/public_html/editnewscategorysubmit.php
我想要做的是在更新表之前将addslashes(或者我正在阅读的内容,首选使用 mysql_real_escape_string
!)添加到每个值。有什么我想念的吗?谢谢!
答案 0 :(得分:6)
功能:
function addslashes_recursive( $data )
{
if ( is_array( $data ) )
{
return array_map( 'addslashes', $data );
}
else
{
return addslashes( $data );
}
}
单行
$array = array_map( 'addslashes', $array );
答案 1 :(得分:2)
在阵列上运行某些功能有多种方法。一个简单的循环:
$stillNotSafeData = array();
foreach ($_REQUEST as $key => $value) {
if (!is_array($value)) {
$stillNotSafeData[$key] = addslashes($value);
} else {
foreach ($value as $innerKey => $innerValue) {
$stillNotSafeData[$key][$innerKey] = addslashes($innerValue);
}
}
}
或使用array_walk_recursive
:
array_walk_recursive($_REQUEST, function(&$item, $key) {
$item = addslashes($item);
});
但正如您已经注意到的那样,您不应该使用addslashes
。但是,一旦使用mysql_*
函数与mysql建立了有效连接,您就可以使用mres
执行相同的操作。
但你不应该这样做。 mysql_*
函数已被暂时弃用了一段时间(将在不到一年的时间内从语言核心中删除)。
除了它很快就会删除之外,还有一些“边缘”案例可以解决它:SQL injection that gets around mysql_real_escape_string()
长话短说:停止使用mysql_ *函数。
您真正想要做的是使用mysqli
或PDO
。这些支持预处理语句和绑定参数。这篇文章将帮助您:How can I prevent SQL injection in PHP?
答案 2 :(得分:0)
array_map('addslashes', $_REQUEST['title']);
http://php.net/manual/en/function.array-map.php
当然,还有其他方法可以将函数应用于每个数组元素。你可以foreach()它,并将addslashes()应用于每个值,或者在for循环中将$ var分配给addslashes($ title [$ i])。