警告:遇到非数字值

时间:2017-02-04 18:42:50

标签: php

最近更新到PHP 7.1并开始收到以下错误

  

警告:第29行遇到非数字值

这是第29行的样子

$sub_total += ($item['quantity'] * $product['price']);

在localhost上一切正常..

任何想法如何解决这个或它是什么?

18 个答案:

答案 0 :(得分:101)

不完全是您遇到的问题,但搜索人员的错误相同。

当我在JavaScript上花费太多时间时,这发生在我身上。

回到PHP我用“+”而不是“.”连接了两个字符串并得到了这个错误。

答案 1 :(得分:63)

似乎在PHP 7.1中,如果遇到非数字值,将发出警告。请参阅此link

以下是与您收到的警告通知有关的相关部分:

  

无效时引入了新的E_WARNING和E_NOTICE错误   使用期望数字或其数字的运营商强制执行字符串   赋值等价物。字符串开始时会发出E_NOTICE   使用数值但包含尾随的非数字字符,和   当字符串不包含数字时,会发出E_WARNING   值。

我猜测 $ item ['quantity'] $ product ['price'] 不包含数值,所以请确保他们这样做在尝试繁殖它们之前。也许在计算$ sub_total之前使用某种条件,如下所示:

<?php

if (is_numeric($item['quantity']) && is_numeric($product['price'])) {
  $sub_total += ($item['quantity'] * $product['price']);
} else {
  // do some error handling...
}

答案 2 :(得分:42)

你可以在没有任何新逻辑的情况下解决问题,只需将数据转换为数字,这可以防止警告,并且等同于PHP 7.0及以下版本中的行为:

$sub_total += ((int)$item['quantity'] * (int)$product['price']);

(Daniel Schroeder的回答并不等同,因为如果遇到非数字值,$ sub_total将保持未设置状态。例如,如果打印出$ sub_total,您将获得一个空字符串,这在发票中可能是错误的 - 通过强制转换确保$ sub_total是一个整数。)

答案 3 :(得分:12)

在我的情况下,因为我使用“+”和其他语言一样,但在PHP字符串中,连接oprator是“。”

答案 4 :(得分:6)

你好 在使用(WordPress)和PHP7.4的情况下,我收到有关数值问题的警告。因此,我将旧代码更改如下:

发件人:

$val = $oldval + $val;

收件人:

$val = ((int)$oldval + (int)$val);

现在警告消失了:)

答案 5 :(得分:5)

特别是在PHPMyAdmin上发生了这种情况。所以更具体地回答this,我做了以下几点:

在文件中:

C:\ampps\phpMyAdmin\libraries\DisplayResults.class.php

我改变了这个:

// Move to the next page or to the last one
$endpos = $_SESSION['tmpval']['pos']
    + $_SESSION['tmpval']['max_rows'];

对此:

$endpos = 0;
if (!empty($_SESSION['tmpval']['pos']) && is_numeric($_SESSION['tmpval']['pos'])) {
    $endpos += $_SESSION['tmpval']['pos'];
}
if (!empty($_SESSION['tmpval']['max_rows']) && is_numeric($_SESSION['tmpval']['max_rows'])) {
    $endpos += $_SESSION['tmpval']['max_rows'];
}

希望拯救某人有些麻烦...

答案 6 :(得分:3)

我的分页前向和后向链接有这个问题....只需在变量$ Page + 1前面设置(int)并且它有用......

<?php 
$Page = (isset($_GET['Page']) ? $_GET['Page'] : '');
if ((int)$Page+1<=$PostPagination) {
?>
<li> <a href="Index.php?Page=<?php echo $Page+1; ?>"> &raquo;</a></li>
<?php }
?>

答案 7 :(得分:2)

检查您是否使用某个变量递增,其值为空字符串,如&#39;&#39;。

示例:

$total = '';
$integers = range(1, 5);

foreach($integers as $integer) {
    $total += $integer;
}

答案 8 :(得分:2)

我在PHP 7.3的phpmyadmin中遇到了这个问题。感谢@coderama,我从// p>更改了library / DisplayResults.class.php第855行

FirefoxProfile profile = new FirefoxProfile(@"D:\FFprofile");
            FirefoxOptions options = new FirefoxOptions();
            options.Profile = profile;

            FirefoxDriver driver = new FirefoxDriver(options);

进入

// Move to the next page or to the last one
$endpos = $_SESSION['tmpval']['pos']
    + $_SESSION['tmpval']['max_rows'];

固定。

答案 9 :(得分:1)

试试这个。

$sub_total = 0;

现在你可以在你的循环中使用这个

$sub_total += ($item['quantity'] * $product['price']);

它应该可以解决你的问题。

答案 10 :(得分:1)

通常在您用+号组合字符串时会发生这种情况。在PHP中,您可以使用点号(。)进行串联。因此有时我不小心在PHP中的两个字符串之间加上了+号,这向我显示了此错误,因为您只能使用+号。

答案 11 :(得分:1)

$sub_total_price = 0; 

foreach($booking_list as $key=>$value) {
        $sub_total_price += ($price * $quantity); 
}

echo $sub_total_price;

它正在100%工作:)

答案 12 :(得分:1)

在WordPress上解决此错误

  

警告:在第694行的C:\ XAMPP \ htdocs \ aad-2 \ wp-includes \ SimplePie \ Parse \ Date.php中遇到非数字值

这里简单的解决方案!

  1. 找到wp-includes\SimplePie\Parse\Date.php
  2. 的文件
  3. 找到一行。 694
  4. 您显示代码$second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
  5. 并将此3.)更改为此行$second = round((int)$match[6] + (int)$match[7] / pow(10, strlen($match[7])));

答案 13 :(得分:0)

确保您的列结构为INT。

答案 14 :(得分:0)

如果代码中遇到非数字值,请尝试以下一个。 下面的代码将转换为float。

$PlannedAmount = ''; // empty string ''

if(!is_numeric($PlannedAmount)) {
           $PlannedAmount = floatval($PlannedAmount);
 }

 echo $PlannedAmount; //output = 0

答案 15 :(得分:0)

如果在PHP中使用 + 进行连接,则

会导致此错误。在php中, + 算术运算符。 https://www.php.net/manual/en/language.operators.arithmetic.php

错误使用+运算符:

            "<label for='content'>Content:</label>"+
            "<textarea class='form-control col-xs-12' rows='7'cols='100' id='content' name='content'>"+$initcontent+"</textarea>'"+                 
            "</div>";

使用进行连接

$output = "<div class='from-group'>".
            "<label for='content'>Content:</label>".
            "<textarea class='form-control col-xs-12' rows='7'cols='100' id='content' name='content'>".$initcontent."</textarea>'".                 
            "</div>";

答案 16 :(得分:0)

您需要验证您正在处理一个数字:

 if (is_numeric($item['quantity'])) {
 if (is_numeric($product['price'])) {
    echo $item['quantity'] * $product['price'];
 } else {
    echo $item['quantity']. $product['price'];
 }
 } else {
    echo $item['quantity']. $product['price'];
 }

答案 17 :(得分:0)

$sub_total += ($item['quantity'] * $product['price']);

替换为:

$sub_total += floatval($item['quantity']) * floatval($product['price']);