最近更新到PHP 7.1并开始收到以下错误
警告:第29行遇到非数字值
这是第29行的样子
$sub_total += ($item['quantity'] * $product['price']);
在localhost上一切正常..
任何想法如何解决这个或它是什么?
答案 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; ?>"> »</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中遇到非数字值
这里简单的解决方案!
wp-includes\SimplePie\Parse\Date.php
$second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
$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中, + 是算术运算符。 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']);