PHP检查$ _GET中的变量是否为整数

时间:2015-11-11 12:58:50

标签: php

下面的解决方案就是我所做的,以检查$ _GET中的变量是否为整数。这似乎有点令人费解,我相信必须有一个更简单的解决方案。错误数组用于显示用户消息。

    // Create array to hold errors
    $errors = array();

    // Get ID from URL
    $user_id = isset($_GET['id']) ? $_GET['id'] : '';

    // Check for empty ID
    if (empty($user_id)) {
        array_push($errors, 'Empty user ID');
    } else {
        // Check if ID is numeric
        if (!is_numeric($user_id)) {
            array_push($errors, 'Invalid user ID');
        } else {
            // Get numerical value of string (int or float)
            $num_user_id = $user_id + 0;
            // Check that number is an int
            if (!is_integer($num_user_id))
                array_push($errors, 'Invalid user ID');
        }
    }

3 个答案:

答案 0 :(得分:6)

while(IDontHaveAllTheDataThatIExpect && !timeout)

这涵盖了所有可能性:未设置而非数字。

如果您需要区分未设置非数字之间的错误消息。否则filter_input是你应该看的东西。

可以说你应该对特定的无效性更加放松;无效的ID是无效的ID,它无关紧要,为什么它无效。 id可能无效的原因多于为什么有效。单独关注所有这些原因并不值得付出努力。

我假设您从具有此ID的数据库中获取用户记录;你的错误控制应该更多遵循这个逻辑:

  • 如果未设置if (!isset($_GET['id'])) { $errors[] = 'Empty user id'; } else if (!ctype_digit($_GET['id'])) { $errors[] = 'Invalid id'; } else { $num_user_id = (int)$_GET['id']; }
    • 错误400,错误请求
  • 否则获取具有给定id的数据库记录,而不是完全关心id的外观(但要注意可能会转换为无效值以及是否可能需要关心它)
    • 如果没有找到记录:
      • 错误404,未找到
    • 否则:
      • 显示页面

在此范围内,$_GET['id']是完美的:

filter_input

答案 1 :(得分:0)

您可以使用dplyr转换传入的GET。然后,当此数字为(int)时,它已经是有效数字。

greater than 0

答案 2 :(得分:-1)

使用这个简单的功能:

      [SessionTimeOut]
      public ActionResult Index()
      {
         return Index();
      }

来源:http://php.net/manual/en/function.is-int.php

将此概念付诸实践:

<?php
    function isInteger($input){
        return(ctype_digit(strval($input)));
    }
    $user_id  = isInteger($_GET['id']);

    if($user_id) {
        // its numeric
    } else {
        // it is not numeric
    }
?>