1

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">&nbsp;</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 中给出

我要做的是mysql_real_escape_string在更新表格之前为每个值添加斜杠(或从我正在阅读的内容中,使用是首选!)。有什么我想念的吗?谢谢!

4

3 回答 3

9

功能:

function addslashes_recursive( $data )
{
    if ( is_array( $data ) )
    {
        return array_map( 'addslashes', $data );
    }
    else
    {
        return addslashes( $data );
    }
}  

单线

$array = array_map( 'addslashes', $array );
于 2014-06-20T10:24:05.917 回答
3

有多种方法可以在数组上运行某些函数。一个简单的循环:

$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_*功能已经被官方弃用了一段时间(并且将在不到一年的时间内从语言核心中删除)。

除了它将很快被删除的事实之外,还有一些“边缘”案例可以绕过它:绕过 mysql_real_escape_string() 的 SQL 注入

长话短说:停止使用 mysql_* 函数。

您真正想要做的是使用mysqlior 或PDO. 这些支持准备好的语句和绑定参数。这篇文章将帮助您:如何防止 PHP 中的 SQL 注入?

于 2013-10-06T16:29:41.340 回答
0
array_map('addslashes', $_REQUEST['title']);

http://php.net/manual/en/function.array-map.php

当然还有其他方法可以将函数应用于每个数组元素。您可以 foreach() 它,并将 addlashes() 应用于每个值,或在 for 循环中将 $var 分配给 addlashes($title[$i]) 。

于 2013-10-06T16:33:54.533 回答