Невозможно редактировать при использовании функции обрезки

Я разрабатываю приложение, и в моем модальном окне возникла странная ошибка, когда я не могу отредактировать запись.

Ниже приведено модальное окно, в котором отображается ошибка:

 <?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 />

Насколько я понимаю, он передает массив вместо строки в обрезке. Может кто-нибудь посоветовать мне, как я могу решить эту проблему? Пробовал несколько шагов отладки, но безуспешно

Где ваши значения $_POST['estaff']; и $_POST['estops'];. Ошибка из-за того, что вы отправили массив вместо строкового значения.

Nawin 31.03.2018 10:10
Насколько я понимаю, он передает массив вместо строки в обрезке. Нет, это ты передает массив для обрезки. Это не код, который делает это сам по себе.
Andreas 31.03.2018 10:11

Ошибка вызвана тем, что вы изменили функцию очистки, вернули ее обратно, а в чем заключалась исходная проблема?

Lawrence Cherone 31.03.2018 10:13

Не думаю, что кто-то может помочь, взглянув на этот код. Нет строки, где был вызван sanitize

Aniket Sahrawat 31.03.2018 10:20

@AniketSahrawat Вот $stf[] = array_map('sanitize', $val); :)

Nawin 31.03.2018 10:25

И вот: $sanitized = array_map('sanitize', $_POST); и POST однозначно массив.

Andreas 31.03.2018 10:29

@Nawin Да, верно. Я искал sanitize( в браузере и дал только два результата. Не думал, что это можно было передать по-другому.

Aniket Sahrawat 31.03.2018 10:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
43
1

Ответы 1

В этой функции вы возвращаете массив в своем операторе 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);? Это верно? Просто передаст тот же массив функции, в которой находится строка
James 01.04.2018 04:16

Да, это.,,,,,

Karlo Kokkak 01.04.2018 04:18

Другие вопросы по теме