这是Check $_POST['id'] is numeric then do this if not do otherwise
的重复问题但是..
给出的答案不回答恕我直言的问题。
问题是测试一个$ _POST字符串,看它是一个数字还是包含非数字字符。不要更改代码以使用$ _GET。
最初的问题是这样的:
if (!empty($_POST['id'])) {
echo "empty";
} else {
if (is_numeric($_POST['id'])) {
echo "numeric!";
} else {
echo "not empty but not numeric how come?";
}
}
我试过,is_numeric(),但由于$ _POST将变量作为字符串传递,即使它是一个数字,这也是无用的。
我试过,如果(!preg_match('#[^ 0-9]#',$ id)),但我不知道为什么这不起作用。
ctype_digit()我认为将$ _POST中的所有内容都视为字符串仍然存在问题,所以没有问题。
必须有一种方法,但我对如何做到这一点感到迷茫。不,我不能使用$ _GET。
更新答案! (TYPO !!!!!上帝该致!):
// test.php
// testing with $_POST['id'] from forum with id = 5 and another test where id = new
$id = $_POST['editid'] ;
echo "<br>---".$id."---<br>";
if (empty($id)) {
echo "<br>1: empty";
} else {
if (!is_numeric($id)) {
echo "<br>2: This is the number 5";
} else {
echo "<br>3: the must be the word new";
}
}
// test 2 ... ctype_digit
if (empty($id)) {
echo "<br>4: empty";
} else {
if (!ctype_digit($id)) {
echo "<br>5: This is the number 5";
} else {
echo "<br>6: the must be the word new";
}
}
// test 3 ...
if (empty($id)) {
echo "<br>7: empty";
} else {
if (!preg_match('#[^0-9]#',$id)) {
echo "<br>8: This is the number 5";
} else {
echo "<br>9: the must be the word new";
}
}
/**
result from 5
---5---
3: the must be the word new
6: the must be the word new
8: This is the number 5
results from "new"
**/