2017-07-31 40 views
0

上使用cleanInput()我有以下代碼。我想要做的是清理任何標記的_POST輸入並遍歷_POST中的信息的foreach循環,但我有似乎沒有工作,因爲我認爲$ post_loop回來空,我不是確定這是爲什麼。 $ save變量分配正確。在_POST

$save = cleanInput($_POST["save"]); 
$post_loop = cleanInput($_POST); 
$obs_loop; 

foreach ($post_loop as $key=>$value) { 

if ($match = ereg('[0-9].*', $key)) { 

    list($obsid, $action) = explode("_", $key); 

    if ($save == "Send Final Response to CDO") { 
    $save = 'final'; 
    } else if ($save == "Save Choices") { 
    $save = 'save'; 
    }   

    $query = "LOCK TABLES obs_responses WRITE, obs WRITE"; 
    $result = mysql_query($query) or die("Locking Failed". mysql_error()); 

    if ($action != 'problem' && $action != 'const_narr' && $action != 'acnonects' && $action != 'gt2spec') { 
    $upd_query = $db->prepare("update obs_responses set $action = '$value' where obsID = $obsid"); 
    if (!$upd_query->execute()) { die("UPDATE failed"); } 

    } else if ($action == 'problem' || $action == 'const_narr' || $action == 'acnonects' || $action == 'gt2spec') { 

    $value = addslashes($value); 

    $prob_query = $db->prepare("update obs set $action = '$value' where obsID = $obsid"); 
    if (!$prob_query->execute()) { die("UPDATE of problem failed"); } 
} 

} 

乾淨的輸入功能看起來像:

function cleanInput($invalue) { 
    $outvalue = trim($invalue); 
    $outvalue = stripslashes($outvalue); 
    $outvalue = htmlspecialchars($outvalue); 
    return $outvalue; 
} 
+0

我們怎麼知道'cleanInput()'是幹什麼的? – rtfm

+0

ereg:警告這個函數在PHP 5.3.0中被取消,而在PHP 7.0.0中被取消。和mysql_ *以及 – rtfm

+1

cleanInput()是專爲字符串而不是陣列 - 看起來像一個壞主意,不管 – rtfm

回答

-1

不能使用裁剪,和的stripslashes用htmlspecialchars陣列上。您必須遍歷數組並在每個值上使用它。

function cleanInput(&$string) { 
    $string = trim($string); 
    $string = stripslashes($string); 
    $string = htmlspecialchars($string); 
} 

array_walk_recursive($_POST, "cleanInput"); 

...並且清除了$_POST中的所有值。

+0

清潔?用於數據庫查詢 - NOPE – rtfm

+0

我寫了它的清理**數據庫查詢使用**?不,它是按照他想要的方式清潔的。如何清理在DB語句中使用它的值經常被討論並且應該清楚。否則它是重複的。 – Spingolini