2012-06-26 28 views
-2

我想知道正確的代碼來檢測來自表單的數值$ _POST字段。

請更正我的代碼。

foreach ($_POST as $vals) { 
    if (is_numeric($vals)) { 
    if (is_numeric($vals[$i]) && ($vals[$i]!="0")) { 
    //do something 
    } 
} 
+2

什麼不在這裏工作? '$ i'從哪裏來?這段代碼看起來很好,只是刪除第二個'if'語句。 –

+0

我只想保留來自$ _POST的數字表單字段。但它帶來的所有內容包括字段 – dave

+2

foreach($ _POST as $ key => $ vals)'然後if(is_numeric($ key))' –

回答

1

嘗試這種情況:

foreach ($_POST as $key => $val) 
{ 
    if (is_numeric($key)) 
    { 
    // do something 
    } 
} 
+0

嗨des,它將結果帶入域中,我只想要數字域.. – dave

+0

所以你想要數字鍵不是值...讓我然後更正我的答案 – Zbigniew

4
$_POST = array_filter($_POST, "is_numeric"); 

上面將去除所有非數字數組項。

foreach (array_filter($_POST, "is_numeric") as $key => $val) 
{ 
    // do something 
    echo "$key is equal to $val which is numeric."; 
} 

更新:

如果你只希望那些像$ _ POST [1],$ _ POST [2]等。

foreach ($_POST as $key => $vals){ 
    if (is_numeric($key)){ 
     //do something 
    } 
} 
+0

它帶來的價值,我想比較字段名稱。如果它們是數字,則繼續。 – dave

+0

更新了上述內容。只要對array_filter執行foreach即可。如果這不是你的意思,你能提供一些僞代碼嗎? –

+0

@sixeightzero:我想他想刪除'$ _POST ['name']',但保留'$ _POST ['12']'。 –

1

嘗試:

foreach ($_POST as $key => $vals){ 
    //this is read: $_POST[$key]=$value 
    if (is_numeric($vals) && ($vals!="0")){ 
      //do something 
    } 
} 
1
if(isset($_POST)){ 
    foreach($_POST as $key => $value){ 
     if(is_numeric($key)){ 
      echo $value; 
     } 
    } 
} 

比較鍵

0

以下代碼與isset()試圖在一個數組上工作是無效的。

if(isset($_POST)){ //isset() only works on variables and array elements. 
    foreach($_POST as $key => $value){ 
     if(is_numeric($key)){ 
      echo $value; 
     } 
    } 

foreach ($_POST as $key => $val) 
{ 
    if (is_numeric($key)) 
    { 
    // do something 
    } 
} 

更好,但現在的foreach將使$ _ POST副本,並把在內存爲循環的持續時間(編程PHP:。第6章,第128-129) 。我希望緩衝區溢出或內存不足錯誤不會跳起來咬你。 :-)


也許這將是明智的決定一些事實約$ _ POST與is_array(),空(),COUNT()等人在開始之前,如...

if(is_array($_POST) && !empty($_POST)) 
{ 
    if(count($_POST) === count($arrayOfExpectedControlNames)) 
    { 
     //Where the the values for the $postKeys have already been validated some... 

     if(in_array($arrayOfExpectedControlNames, $postKeys)) 
     { 
      foreach ($_POST as $key => $val) //If you insist on using foreach. 
      { 
       if (is_numeric($key)) 
       { 
        // do something 
       } 
       else 
       { 
        //Alright, already. Enough! 
       } 
      } 
     } 
     else 
     { 
      //Someone is pulling your leg! 
     } 
    } 
    else 
    { 
     //Definitely a sham! 
    } 
} 
else 
{ 
    //It's a sham! 
} 

儘管如此,$val值需要一些驗證,但我相信你已經掌握了這一點。

+0

''// isset()只對變量和數組元素有作用 - 在這個上下文中這是一個無意義的語句,'$ _POST' _is_是一個變量。 _problem_是_always_集合,但可能是空的,這就是爲什麼使用'isset'來檢查請求方法是否是POST沒有意義的原因。 'empty'將會工作,或者使用'count'。 – CBroe

+0

我的朋友,'$ _POST'是在這種情況下的一個數組(不管它是超全球的)。我的發言很有道理。 PHP語言結構'isset()'不適用於數組,只能使用_variables_和_array elements_。因此,不管你先前的推理如何,在'$ _POST'上使用'isset()'是無效的。 [PHP手冊:isset()](http://us2.php.net/manual/en/function.isset.php) –