麻烦从输入清理数组

时间:2011-06-21 05:21:58

标签: php sql sql-injection sanitization

我无法清理我的阵列,希望有人可以看看!

这是我的意见:

<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 个答案:

答案 0 :(得分:1)

嗯,如果sanitizeData()是一个数组,$datastring返回一个值会有所帮助。

if (is_array($datastring)) {
    foreach ($datastring as $indivdata) {
        $indivdata = sanitizeData($indivdata);
    }
    // you need to actually return something here
}

答案 1 :(得分:1)

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']);
}

答案 2 :(得分:0)

我认为您已将文本框放在表单标记之外。

答案 3 :(得分:0)

这只是一个可变范围问题。

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']);
 }

除非我在这么晚的时候遗漏了什么,否则你的函数似乎不会返回数据数组。 有几种方法可以解决这个问题,但上面的代码可以帮助您找到正确的方法。