[英]foreach and array maps error
我收到:3警告(isset中的偏移量類型非法或in ...中的空偏移量)3通知(未定義索引:...)
這三個警告是通過第一個foreach實現的。 這3個通知與第二個foreach循環有關。
我沒有真正弄錯我在做的事...這里需要一些幫助。
<form name="form" action="index.php" method="POST">
<input type="text" name="name" value="<?php if (isset($_POST['name'])) { echo $_POST['name']; } ?>" />
<input type="text" name="age" value="<?php if (isset($_POST['age'])) { echo $_POST['age']; } ?>" />
<input type="text" name="email" value="<?php if (isset($_POST['email'])) { echo $_POST['email']; } ?>" />
<input type="submit" />
</form>
<?php
$expected = array(
'name' => array("filter" => FILTER_SANITIZE_STRING),
'age' => array("filter" => FILTER_SANITIZE_NUMBER_INT),
'email' => array("filter" => FILTER_SANITIZE_EMAIL)
);
foreach ($expected AS $key => $value) {
if (!isset($_POST[$value])) {
echo "not set";
} elseif (empty($_POST[$value])) {
echo "empty";
}
}
$result = filter_input_array(INPUT_POST, $expected);
foreach ($result AS $key => $value) {
if (!$result[$value]) {
echo "not valid value";
}
}
?>
謝謝你們。
foreach
的形式為foreach
foreach($iterable as $value)
和foreach($iterable as $key => $value)
。 沒有foreach ($iterable as $key)
形式的javascript形式的for (key in obj)
。
而是使用foreach ($expected as $key => $value) {
和foreach($result as $key=>$value) { if (!$value) die(false); }
foreach($result as $key=>$value) { if (!$value) die(false); }
您的完整代碼應如下所示:
$expected = array(
'name' => array("filter" => FILTER_SANITIZE_STRING),
'age' => array("filter" => FILTER_SANITIZE_NUMBER_INT),
'email' => array("filter" => FILTER_SANITIZE_EMAIL)
);
foreach ($expected AS $key => $value) {
if (!isset($_POST[$key])) { // NOT $value!!!!
echo "not set";
} elseif (empty($_POST[$key])) {
echo "empty";
}
}
$result = filter_input_array(INPUT_POST, $expected);
foreach ($result AS $key => $value) {
if (!$result[$key]) { // NOT $value!!!
echo "not valid value";
}
}
如果您的目標是驗證輸入,那么我建議您不要大量使用PHP清理機制。 像所有的PHP,它是建立在消毒輸入,而不是驗證它的根本破理念。 不過,我不確定還有什么建議您使用。 尊重/驗證看起來很有希望,盡管我認為如果可以的話,最好離開PHP。
根據現有情況,僅將以下函數與FILTER_VALIDATE_*
過濾器一起使用。 您仍然需要進行預處理和后處理,並且必須模擬具有多個調用的“鏈接”過濾器。
function filter_array($data, $filter) {
$missing = array_diff_key($filter, $data);
$filtered = filter_var_array($data, $filter);
$invalid = array_filter($filtered, function($v){return $v===FALSE;});
$filtered = array_diff_key($filtered, $missing, $invalid);
return array($filtered, array_keys($invalid), array_keys($missing));
}
使用示例:
$_POST = array('extra'=>'extra', 'age'=>array('30a'), 'name'=>'the name');
$expected = array(
'name' => array("filter" => FILTER_UNSAFE_RAW, // using this as a "passthrough" filter
"flags" => FILTER_REQUIRE_SCALAR, // just to set this flag
),
'age' => array("filter" => FILTER_VALIDATE_INT,
"flags" => FILTER_REQUIRE_SCALAR,
"options" => array('min_range'=>0, 'max_range'=>120)
),
'email' => array("filter" => FILTER_VALIDATE_EMAIL,
"flags" => FILTER_REQUIRE_SCALAR,
),
);
list($valid, $invalid, $missing) = filter_array($_POST, $expected);
var_export($valid); var_export($invalid); var_export($missing);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.