【问题标题】:PHP Warning: A non-numeric value encounteredPHP 警告:遇到非数字值
【发布时间】:2018-08-14 17:20:09
【问题描述】:

我收到以下错误“PHP 警告:第 11 行遇到的非数字值”。以下代码用于分页。我已经尝试了我所知道的一切,不知道还能做什么。任何帮助表示赞赏。

8 $rowsPerPage = 20;
9 if(isset($_GET['page'])){$pageNum = $_GET['page'];}
10 if(empty($pageNum)) {$pageNum = 1;}
11 $offset = ($pageNum - 1) * $rowsPerPage;

【问题讨论】:

  • $_GET['page'] 可能是一个字符串,转换它...或者可能是更好的方法:$pageNum = (int)!empty($_GET['page']) ? $_GET['page'] : 1;
  • Warning 不是Error...
  • $pageNum 可能是第 11 行中的字符串
  • PHP 在对包含数字字符串的变量执行数学运算时不会生成警告,因此$_GET['page'] 必须包含非数字。

标签: php php-7.2


【解决方案1】:

有些东西不是数字的(听起来很明显,这是错误),如果您手动将所有东西设置为除 GET 值之外的整数,试试这个:

$rowsPerPage = 20;
if (isset($_GET['page'])) {
    $pageNum = (int) $_GET['page'];
}
if(empty($pageNum)) {
    $pageNum = 1;
}
$offset = ($pageNum - 1) * $rowsPerPage;

注意 GET 参数转换为 int

你也可以只转换为 int,如果它还不是 int,PHP 将默认为整数 0:

$pageNum = (int) $_GET['page'];

无法自拔 - 您也可以使用三元组来设置 $pageNum 清洁器 (IMO):

$rowsPerPage = 20;

$pageNum = isset($_GET['page'])
    ? (int) $_GET['page']
    : 1;

$offset = ($pageNum - 1) * $rowsPerPage;

【讨论】:

    【解决方案2】:

    好像$pageNum 是非数字的,即字符串,试试:

    $offset = (intval($pageNum) - 1) * $rowsPerPage;
    

    【讨论】:

    • 如果$pageNum 不是数字,intval 会将其转换为零。从 0 中减去 1 将得到 -1,将 $rowsPerPage 乘以 -1 将得到负偏移量,可能不是预期的结果。
    【解决方案3】:

    如果$_GET['page'] 是非数字的不要只是将其转换为 int 以消除警告。如果它是非数字的,将其转换为数字将防止警告,但是因为非数字值总是会被​​转换为零,所以你的分页永远不会起作用。

    如果您希望您的分页正常工作,您需要通过发现 为什么 $_GET['page'] 不是数字并修复它来处理警告。使用调试器或var_dump($_GET['page'] 查看其中的实际内容。找到之后,您应该能够将其追溯到发出请求的任何地方并纠正那里的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 2023-03-29
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      相关资源
      最近更新 更多