Подтвердить что ты не робот

Предупреждение: встречено нечисловое значение

Недавно обновлено до PHP 7.1 и начнет получать следующую ошибку

Предупреждение. Нечисловое значение, встречающееся в строке 29

Вот как выглядит строка 29

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

На локальном хосте все работает отлично.

Любые идеи, как решить это или что это такое?

4b9b3361

Ответ 1

Похоже, что в PHP 7.1 предупреждение будет выпущено, если встречается нечисловое значение. См. Ссылку .

Вот соответствующая часть, относящаяся к уведомлению о предупреждении, которое вы получаете:

Новые ошибки 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

Не совсем та проблема, что у вас была, но та же ошибка для людей, которые ищут.

Это случилось со мной, когда я потратил слишком много времени на JavaScript.

Возвращаясь к PHP, я связал две строки с " + " вместо " . " И получил эту ошибку.

Ответ 3

Вы можете решить проблему без какой-либо новой логики, просто введя вещь в число, что предотвращает предупреждение и эквивалентно поведению в PHP 7.0 и ниже:

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

(Ответ от Daniel Schroeder не эквивалентен, потому что $sub_total будет оставаться неустановленным, если встречаются нечисловые значения. Например, если вы печатаете $sub_total, вы получите пустую строку, что, вероятно, неверно в счете-фактуре. - путем литья вы убедитесь, что $sub_total является целым числом.)

Ответ 4

В моем случае это было из-за того, что я использовал "+", как и в других языках, но в PHP строка конкатенации - "." ,

Ответ 5

Это происходило со мной специально на PHPMyAdmin. Чтобы более конкретно ответить на это, я сделал следующее:

В файле:

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

У меня была эта проблема с моей пагинацией прямой и обратной ссылки.... просто установил (int) перед переменной $ Page + 1, и это сработало...

<?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

Проверьте, не увеличиваете ли вы какую-то переменную, что ее значение представляет собой пустую строку типа ''.

Пример:

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

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

Ответ 8

Я столкнулся с проблемой в phpmyadmin с PHP 7.3. Спасибо @coderama, я изменил библиотеки /DisplayResults.class.php строка 855 из

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

в

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

Исправлена.

Ответ 9

Попробуйте это.

$sub_total = 0;

и в вашем цикле теперь вы можете использовать этот

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

Он должен решить вашу проблему.

Ответ 10

Я просто посмотрел на эту страницу, поскольку у меня была эта проблема. Для меня у меня были числа с плавающей запятой, рассчитанные из массива, но даже после обозначения переменных как плавающих точек ошибка все еще была указана, вот простой код ошибки и примера, под которым возникла проблема.

Пример PHP

<?php
$subtotal = 0; //Warning fixed
$shippingtotal = 0; //Warning fixed

$price = array($row3['price']);
$shipping = array($row3['shipping']);
$values1 = array_sum($price);
$values2 = array_sum($shipping);
(float)$subtotal += $values1; // float is irrelevant $subtotal creates warning
(float)$shippingtotal += $values2; // float is irrelevant $shippingtotal creates warning
?>

Ответ 11

$sn = 0;//increment the serial number, then add the sn to job
for($x = 0; $x<20; $x++)
{
$sn++;
$added_date = "10/10/10";
$job_title = "new job";
$salary = $sn*1000;
$cd = "27/10/2017";//the closing date
$ins = "some institution";//the institution for the vacancy 
$notes = "some notes here";//any notes about the jobs

$sn_div = "<div class='sn_div'>".$sn."</div>";
$ad_div = "<div class='ad_div'>".$added_date."</div>";
$job_div = "<div class='job_div'>".$job_title."</div>";
$salary_div = "<div class='salary_div'>".$salary."</div>";
$cd_div = "<div class='cd_div'>".$cd."</div>";//cd means closing date
$ins_div = "<div class='ins_div'>".$ins."</div>";//ins means institution
$notes_div = "<div class='notes_div'>".$notes."</div>";


/*erroneous line*/$job_no = "job"+$sn;//to create the job rows
$$job_no = "<div class='job_wrapper'>".$sn_div.$ad_div.$job_div.$salary_div.$cd_div.$ins_div.$notes_div."</div>";

echo $$job_no;//and then echo each job

}

что у меня был код, который зацикливал и создал новые элементы html div. Код работал нормально, и элементы были сформированы, но я получил то же предупреждение в error_log.

Прочитав полезные другие ответы, я подумал, что я суммировал строку и число в ошибочной строке. Поэтому я изменил код на этой строке на

/*erroneous line*/$job_no = "job"&&$sn;//this is the new variable that will create the job rows

Теперь код работает как раньше, но без предупреждений на этот раз. Надеюсь, этот пример будет полезен кому-то.

Ответ 12

Решить эту ошибку на WordPress

Предупреждение: нечисловое значение, встречающееся в C:\XAMPP\htdocs\aad-2\wp-includes\SimplePie\Parse\Date.php в строке 694

Простое решение здесь!

  1. найдите файл wp-includes\SimplePie\Parse\Date.php
  2. найти строку нет. 694
  3. вы показываете код $second = round($match[6] + $match[7]/pow(10, strlen($match[7])));
  4. и измените этот 3.) на эту строку $second = round((int)$match[6] + (int)$match[7]/pow(10, strlen($match[7])));

Ответ 13

$sub_total_price = 0; 

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

echo $sub_total_price;

это работает на 100% :)

Ответ 14

Обычно это происходит, когда вы соединяете строки со знаком+. В PHP вы можете сделать конкатенацию, используя знак точки (.) Так что иногда я случайно ставлю знак + между двумя строками в PHP, и это показывает мне эту ошибку, так как вы можете использовать только знак + в числах.

Ответ 15

Убедитесь, что ваша структура столбца INT.