【问题标题】:check if $_GET parameters are correct检查 $_GET 参数是否正确
【发布时间】:2024-09-04 12:35:01
【问题描述】:

我有三个 $_GET 变量,我想检查它们是否被正确传递。

$amnt = $_GET['amnt'];
$from = $_GET['from'];
$to = $_GET['to'];

if ($_GET != 'amnt' || $_GET != 'from' || $_GET != 'to' ) {
    $errorno = 1100;
    echo $errorno;
    exit;

到目前为止,我已经尝试过了,但这只是检查 $_GET 中的参数,而不是实际的 amnt=&from= 等。因为有人可以输入 ammount=&frommm=

【问题讨论】:

  • 为什么你更关心名称而不是实际值?
  • 您需要编写一个测试来检查每个参数是否包含可接受的值。我们无法告诉您如何做到这一点,因为您还没有说明哪些值是可以接受的。
  • 我已经有一个 if 语句来检查值是否为空以及小数位等
  • 那么你希望这到底是为了什么?
  • 首先,您的代码将始终导致失败条件,因为您将数组与字符串进行比较,它们永远不会相等。其次,您需要做的就是if (!isset($_GET['amnt'], $_GET['from'], $_GET['to'])) {

标签: php get


【解决方案1】:

您应该检查是否设置了您感兴趣的某个参数,如果是,请使用它。喜欢:

if (isset($_GET['from'])) {
    // use $_GET['from']
}

如果您需要设置一定数量的参数,请全部检查:

if (isset($_GET['from'], $_GET['to'], $_GET['amnt'])) ...

如果设置了任何其他参数或参数拼写错误,请忽略它们。如果你真的想检查没有设置其他参数,你可以这样做:

if (array_diff_key($_GET, array_flip(array('amnt', 'from', 'to')))) {
    // some other keys are set!!
}

但重点是什么,真的吗?如果你只是忽略这些参数,谁在乎呢?额外的参数对调试很有用,比如example.com/foo?DEBUG=true。如果你检查得太严格,你只会在以后给自己制造问题。

【讨论】: