Php GET变量和IF语句

Php GET变量和IF语句,php,if-statement,get,Php,If Statement,Get,我对这个简单的if语句有问题: $type = $_GET['type']; if ($type !== 1 || $type !== 2) { header('Location: payment.php'); exit; } 只允许类型1和2,但是 www.example/success.php?type=1-重定向回payment.php www.example/success.php?type=2-重定向回payment.php www.example/success.p

我对这个简单的
if
语句有问题:

$type = $_GET['type'];
if ($type !== 1 || $type !== 2) {
    header('Location: payment.php');
    exit;
}
只允许类型1和2,但是

  • www.example/success.php?type=1-重定向回payment.php
  • www.example/success.php?type=2-重定向回payment.php
  • www.example/success.php?type=3-重定向回payment.php

  • 最后一个例子还可以,但我不知道为什么在第一个和第二个例子中它也重定向。

    ==
    是标识运算符;所以它也会检查类型

    但是$\u GET,$\u POST。。。数组是字符串。因此,您还需要检查字符串:

    if ($type !== "1" && $type !== "2") /* ... */
    

    同时检查
    $a!==$x&&$a!==$y
    将始终为真(如果
    $x!==y
    )。所以在这里使用
    |

    如果您的意思是只有值为1和2的类型应该被重定向,那么您应该尝试使用此代码

    if ($type === 1 || $type === 2) {
        header('Location: payment.php');
        exit;
    }
    
    试试这个:

    if (!($type == 1 || $type == 2)) {
        header('Location: payment.php');
        exit;
    }
    

    这可以说是
    类型为1或2以外的任何类型

    ,您还需要从或切换到和<代码>$x!=1 | |$x!=2始终为真。@Juhana-true;我没看到。太快了,看不到第二个错误,抱歉。@user2406937现在好多了?不,只有这些类型不应该被重定向。我明白了,这个$type=(int)$\u GET['type']怎么样;if($type!=1 | |$type!=2){header('Location:payment.php');exit;}
    if(!($type==1 | |$type==2))
    -这很好,但我想问你,这里的int是什么-
    (int)$\u得到['type'(int)类型将值从字符串转换为整数。。您可以在google中搜索php中的typecasting这个词,或者您也可以阅读本文