Как использовать строковые функции для очистки переменных массива

php html string mysqli

39 просмотра

2 ответа

У меня есть этот PHP-код для HTML form

if(isset($_POST['job_title'])){
  foreach($_POST['job_title'] as $selected) {
     $job_title[] = $selected ;
  }
  $job_title = json_encode($job_title);
  $job_title = clean_string($job_title);
}

и это то, что clean_stringкод функции, который очищает ввод для SQL

function clean_string($string){
   global $connection;
   $string = trim($string);
   $string = stripslashes($string);
   $string = htmlspecialchars($string);
   $string = htmlentities($string);
   $string = mysqli_real_escape_string($connection,$string);
   return $string;
}

Поэтому, когда этот код выполняется, он вызывает ошибку типа ( ожидает, что параметр 1 будет строкой, задан массив )

Как решить эту проблему ? заранее спасибо

Автор: Mustafa Alsuhaibi Источник Размещён: 08.11.2019 11:26

Ответы (2)


0 плюса

Решение

Дядя Сэм, вероятно, может возразить, что это то, что вы, скорее всего, намерены сделать:

<?php

    if(isset($_POST['job_title'])){
        foreach($_POST['job_title'] as $selected) {
            $job_title[] = clean_string($selected);
        }
        $job_title  = json_encode($job_title);
    }


    function clean_string($string){
        global $connection;
        $string = trim($string);
        $string = stripslashes($string);
        $string = htmlspecialchars($string);
        $string = htmlentities($string);
        $string = mysqli_real_escape_string($connection,$string);
        return $string;
    }

Альтернатива II: использование array_map()

<?php
    if(isset($_POST['job_title'])){
        foreach($_POST['job_title'] as $selected) {
            $job_title[] = $selected;
        }
        $job_title  = json_encode(array_map("clean_string", $job_title) );
    }


    function clean_string($string){
        global $connection;
        $string = trim($string);
        $string = stripslashes($string);
        $string = htmlspecialchars($string);
        $string = htmlentities($string);
        $string = mysqli_real_escape_string($connection,$string);
        return $string;
    }
Автор: Poiz Размещён: 20.08.2016 02:44

0 плюса

Из того, что вы опубликовали, похоже, что пользовательская функция clean_string ($ string) принимает строковый параметр и возвращает строку.

И у вас есть массив $ job_title, который необходимо очистить.

Проблема, с которой вы сталкиваетесь, заключается в том, что вы передаете JSON в clean_string ($ string) в этой строке:

  $job_title = json_encode($job_title);
  $job_title = clean_string($job_title);  // JSON object is passed.

Итак, вам просто нужно пройти через каждый элемент через массив $ job_title и продолжать передавать каждое значение в clean_string (). Это может быть достигнуто с помощью array_map () .

if (isset($_POST['job_title'])) {
    foreach ($_POST['job_title'] as $selected) {
        $job_title[] = $selected ;
    }
    $job_title = array_map("clean_string", $job_title);  // Modify this line
    $job_title = json_encode($job_title);  // Add it here if you need to json encode the sanitized input
}
Автор: Object Manipulator Размещён: 20.08.2016 02:59
Вопросы из категории :
32x32