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 будет строкой, массив указан в /home/u180175506/public_html/editnewscategorysubmit.php в строке 71

То, что я пытаюсь сделать, это добавление (или из того, что я читаю, использование mysql_real_escape_string предпочтительнее!) До каждого значения до обновления таблицы. Есть что-то, что мне не хватает? Благодаря!

Существует несколько способов запуска некоторой функции над массивом. Простой цикл:

 $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-инъекция, которая обходит mysql_real_escape_string ()

Короче говоря: прекратите использование функций mysql_ *.

То, что вы действительно хотите сделать, это использовать либо mysqli либо PDO . Они поддерживают подготовленные операторы и связанные параметры. Это сообщение поможет вам в этом: как я могу предотвратить SQL-инъекцию в PHP?

Функция:

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

Одна линия

 $array = array_map( 'addslashes', $array ); 
 array_map('addslashes', $_REQUEST['title']); 

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

Конечно, есть другие способы применения функции к каждому элементу массива. Вы можете использовать foreach () и применять addlashes () к каждому значению или назначить $ var to addslashes ($ title [$ i]) в вашем цикле for.