2011-06-21 75 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