PHP使用数组添加

时间:2013-10-06 16:01:03

标签: php

我正在尝试使用一个表单更新多个记录,但在尝试使用 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

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

3 个答案:

答案 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_ *函数。

您真正想要做的是使用mysqliPDO。这些支持预处理语句和绑定参数。这篇文章将帮助您: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])。