フォームからの数値 $_POST フィールドのみを検出する正しいコードを知りたいです。
私のコードを修正してください。
foreach ($_POST as $vals) {
if (is_numeric($vals)) {
if (is_numeric($vals[$i]) && ($vals[$i]!="0")) {
//do something
}
}
フォームからの数値 $_POST フィールドのみを検出する正しいコードを知りたいです。
私のコードを修正してください。
foreach ($_POST as $vals) {
if (is_numeric($vals)) {
if (is_numeric($vals[$i]) && ($vals[$i]!="0")) {
//do something
}
}
$_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
}
}
if(isset($_POST)){
foreach($_POST as $key => $value){
if(is_numeric($key)){
echo $value;
}
}
}
キーを比較する
これを試して:
foreach ($_POST as $key => $val)
{
if (is_numeric($key))
{
// do something
}
}
試す:
foreach ($_POST as $key => $vals){
//this is read: $_POST[$key]=$value
if (is_numeric($vals) && ($vals!="0")){
//do something
}
}
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 章、p. 128-129)。バッファ オーバーフローやメモリ不足エラーが発生しないことを願っています。:-)
おそらく、開始する前に is_array()、empty()、count() などを使用して $_POST に関するいくつかの事実を判断する方が賢明でしょう...
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
値にはいくつかの検証が必要ですが、あなたはそれに取り組んでいると確信しています.