3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個贊
您可以使用 is_int 和 is_bool 來實(shí)現(xiàn)這一點(diǎn)。在執(zhí)行此操作之前,請確保您還檢查是否設(shè)置了 $_GET 變量以避免潛在的通知
$rawId = (isset($_GET["id"]) ? $_GET["id"] : null);
$rawStatus = (isset($_GET["status"]) ? $_GET["status"] : null);
if (!is_int($rawId)) {
//handle
}
if (!is_bool($rawStatus)) {
//handle
}

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個贊
如果您需要檢查 $rawId 和 $rawStatus 的類型,您可以這樣做
is_integer($rawId); // return true if $rawId is integer
is_bool($rawStatus); // return true if $rawStatus is boolean
要檢查 $rawId 是否只有數(shù)字,您可以這樣做
is_numeric($rawId)
要檢查 $rawStatus 是否為 bool 你可以看到這個答案
如果需要解析值,您可以使用intval()和boolval()

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個贊
FILTER_SANITIZE_NUMBER_INT允許.,+和-,您可能不想包含它們。使用FILTER_VALIDATE_INT將定期檢查整數(shù)細(xì),不過請記住,這將返回false了0。如果您希望您的 ID 也包含0,那么您需要明確檢查這一點(diǎn):
$Id = filter_var($rawId, FILTER_VALIDATE_INT) === 0 || filter_var($rawId, FILTER_VALIDATE_INT));
假設(shè)您想$rawStatus成為true/的文字字符串false,那么您目前覆蓋它的方式可能是最佳方法,盡管聽起來您正在嘗試在此處進(jìn)行布爾檢查。在這種情況下,你可以簡單地檢查了存在的$rawStatus,使用缺乏它的存在表示一個falsy值:
if ($rawStatus)
正如您在評論中提到的,您確實(shí)需要檢查兩者是否都設(shè)置為isset()... 但您還需要檢查這些值是否為空。這可以通過!empty().
我還建議僅在已知有效狀態(tài)下進(jìn)行,而不是die()在已知無效狀態(tài)下進(jìn)行調(diào)用。
將所有這些放在一起,您將得到如下所示的內(nèi)容:
$rawId = null;
if (isset($_GET["id"]) && !empty($_GET["id"])) {
$rawId = $_GET["id"];
}
if (isset($_GET["status"]) && !empty($_GET["status"])) {
$rawStatus = $_GET["status"];
}
$Id = filter_var($rawId, FILTER_VALIDATE_INT) === 0 || filter_var($rawId, FILTER_VALIDATE_INT);
if ($Id && $rawStatus) {
// Logic
}
- 3 回答
- 0 關(guān)注
- 149 瀏覽
添加回答
舉報(bào)