Я разрабатываю приложение, и в моем модальном окне возникла странная ошибка, когда я не могу отредактировать запись.
Ниже приведено модальное окно, в котором отображается ошибка:
<?php
include_once dirname(dirname(dirname(__FILE__))) . "/const.php";
include_once PHP_PATH . "/config1.php";
include_once CONFIG_PATH.'/modal/routemgmt/route_mgmt.php';
function sanitize($input) {
if (is_array($input))
return array_map('sanitize', $input);
else
return htmlspecialchars(trim($input));
}
// Sanitize all the incoming data
$sanitized = array_map('sanitize', $_POST);
$reason = $sanitized['reason'];
if ($reason == "insert"){
$staffs = [];
$stops = [];
$name = $sanitized['rname'];
$code = $sanitized['rcode'];
$desc = $sanitized['rdesc'];
$vnum = $sanitized['vnum'];
$stf = $_POST['staff'];
$st = isset($_POST['stops'])? $_POST['stops']: [];
$st = [];
// foreach($staffs as $staff){
// $stf[] = array_map('sanitize', $staff);
// }
// if (isset($stops)){
// foreach($stops as $stop){
// $st[] = array_map('sanitize', $stop);
// }
// }
$val = insertRoute($conn,$name, $code, $desc, $vnum, $stf, $stops);
echo $val;
}
if ($reason == "view"){
$id = $sanitized['id'];
$val = [];
$val = viewRoute($conn,$id);
echo json_encode($val);
}
if ($reason == "edit"){
$stf = [];
$stp = [];
$id = $sanitized['pkid'];
$name = $sanitized['rname'];
$code = $sanitized['rcode'];
$desc = $sanitized['rdesc'];
$vnum = $sanitized['vnum'];
$estaffs = $_POST['estaff'];
$estops = $_POST['estops'];
$edel = $_POST['del'];
foreach($estaffs as $val){
$stf[] = array_map('sanitize', $val);
}
foreach($estops as $val){
$stp[] = array_map('sanitize', $val);
}
$cnt = 0;$n_stp = [];
for($i = 0; $i<sizeof($stp); $i++){
if ($stp[$i]['stat'] != "Exist"){
$n_stp[$cnt] = $stp[$i];
$cnt++;
}
}
$val = editValues($conn,$id, $name, $code, $desc, $vnum, $stf, $n_stp, $edel);
echo $val;
}
if ($reason == "delRoute"){
$id = $sanitized['id'];
$val = delRoute($conn,$id);
echo $val;
}
I tried changing the function to :
function sanitize($input) {
return htmlspecialchars(trim($input));
}
Но затем он начал выдавать мне ошибку ниже
<b>Warning</b>: trim() expects parameter 1 to be string, array given in <b>C:\xampp\htdocs\gurukul\demo2\controller\routemgmt\route_mgmt.php</b> on line <b>7</b><br />
Насколько я понимаю, он передает массив вместо строки в обрезке. Может кто-нибудь посоветовать мне, как я могу решить эту проблему? Пробовал несколько шагов отладки, но безуспешно
Ошибка вызвана тем, что вы изменили функцию очистки, вернули ее обратно, а в чем заключалась исходная проблема?
Возможный дубликат PHP: ожидает, что параметр будет заданным строковым массивом
Не думаю, что кто-то может помочь, взглянув на этот код. Нет строки, где был вызван sanitize
@AniketSahrawat Вот $stf[] = array_map('sanitize', $val); :)
И вот: $sanitized = array_map('sanitize', $_POST); и POST однозначно массив.
@Nawin Да, верно. Я искал sanitize( в браузере и дал только два результата. Не думал, что это можно было передать по-другому.






В этой функции вы возвращаете массив в своем операторе if, когда он всегда должен быть просто строкой.
Заменять:
function sanitize($input) {
if (is_array($input))
return array_map('sanitize', $input);
else
return htmlspecialchars(trim($input));
}
С участием:
function sanitize($input) {
if (is_array($input))
return sanitize($input);
else
return htmlspecialchars(trim($input));
}
Вам нужно вернуть значение в виде строки, а не массива. Не связывайтесь с $_POST.
Заменить все:
array_map('sanitize', $val);
С участием:
sanitize($val);
return sanitize($input);? Это верно? Просто передаст тот же массив функции, в которой находится строка
Да, это.,,,,,
Где ваши значения
$_POST['estaff'];и$_POST['estops'];. Ошибка из-за того, что вы отправили массив вместо строкового значения.