Проблема санации массива из ввода - PullRequest
1 голос
/ 21 июня 2011

У меня проблемы с очисткой массива, и я надеюсь, что кто-то может взглянуть!

вот мой ввод:

<input type="text" name="courseno[]" id="courseno" size="12" />

вот моя функция по очистке моих данных:

function sanitizeData ($datastring) {
    if (is_array($datastring)) {
        foreach ($datastring as $indivdata) {
            $indivdata = sanitizeData($indivdata);
        }
    }
    else {
        $datastring=trim($datastring);
        $datastring=htmlspecialchars($datastring);
        $datastring = mysql_real_escape_string($datastring);
        return $datastring;
    }
}

if (isset($_POST['courseno'])) {
    $courseno = sanitizeData($_POST['courseno']);
}

данные $courseno не будут опубликованы, когда я попытаюсь очистить массив, в то время как все остальные мои данные будут опубликованы. Когда я не выполняю санитарную обработку $courseno, данные просто добавляются в базу данных.

Ответы [ 4 ]

1 голос
/ 21 июня 2011

В вашем тесте if (is_array($datastring)) вы присваиваете выход sanitizeData обратного вызова для $indivData. Поэтому, если вход содержит массив, реальное значение никогда не возвращается. $courseno будет присвоено значение NULL. Возможно, вы захотите изменить его на что-то вроде этого:

function sanitizeData ($datastring) {
    if (is_array($datastring)) {
        $result = '';
        foreach ($datastring as $indivdata) {
            $result .= sanitizeData($indivdata);
        }
    return $result;   
}
else {
    $datastring=trim($datastring);
    $datastring=htmlspecialchars($datastring);
    $datastring = mysql_real_escape_string($datastring);
    return $datastring;
  }
}

if (isset($_POST['courseno'])){
    $courseno = sanitizeData($_POST['courseno']);
}
1 голос
/ 21 июня 2011

Хорошо, было бы полезно, если бы sanitizeData() вернул значение, когда $datastring - массив.

if (is_array($datastring)) {
    foreach ($datastring as $indivdata) {
        $indivdata = sanitizeData($indivdata);
    }
    // you need to actually return something here
}
0 голосов
/ 21 июня 2011

Это просто проблема переменной области видимости.

function sanitizeData ($datastring) {
    // This is needed to hold the value between function calls ...        
    static $indivdata = array();         

    if (is_array($datastring)) {
       foreach ($datastring as $indivdata) {
          $indivdata[] = sanitizeData($indivdata);
       }
       return $indivdata;
   } 
   else {
     $datastring=trim($datastring);
     $datastring=htmlspecialchars($datastring);
     $datastring = mysql_real_escape_string($datastring);

     return $datastring; 
     } 
  }   
 // $courseno will be an array now.
 if (isset($_POST['courseno'])){
       $courseno= sanitizeData($_POST['courseno']);
 }

Если я не пропустил что-то в этот поздний час, похоже, ваша функция не возвращает массив данных.Есть несколько способов решить эту проблему, но приведенный выше код поможет вам в правильном направлении.

0 голосов
/ 21 июня 2011

Я думаю, что вы поместили текстовое поле вне тега формы.

...