2011-06-21 44 views
1

我无法消毒我的阵列,希望有人可以看看!从输入故障消毒阵列

这里是我输入:

<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时,数据会很好地发布到数据库。

+0

正常情况下,数据在发布之后会进行消毒处理,即在服务器中,您如何清理它,然后发布? – Balanivash

回答

1

那么,如果sanitizeData()返回值$datastring是一个数组,它将有所帮助。

if (is_array($datastring)) { 
    foreach ($datastring as $indivdata) { 
     $indivdata = sanitizeData($indivdata); 
    } 
    // you need to actually return something here 
} 
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']); 
} 
+0

感谢您的回应!不知何故,这不适合我.. – sourpatchkiddo

+0

我更新了代码 - 应该现在按预期工作。 – Ryan

0

我认为你已经把你的文本框的形式标签之外。

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

除非我错过这么晚了一些,看来你的函数不返回数据数组。 有几种方法可以解决这个问题,但上面的代码应该能让你走上正确的轨道。

+0

谢谢你的回应!我尝试了这一点,并提出了这个错误:“[]运算符不支持的字符串 – sourpatchkiddo