Недавно обновлено до PHP 7.1 и начать получать следующую ошибку
Предупреждение. Нелинейное значение, встречающееся в строке 29
- Локальные жетоны JWT недействительны после обновления их в подходе к проверке подлинности JWT
- Подготовленное заявление MySQLI: num_rows & fetch_assoc
- Добавление процентной доли дисконта к переменной продукции в продаже
- Php form проверяется, когда значение флажка в массиве mysql-запроса?
- Недопустимое сочетание сортировок PHP MYSQL, latin1_swedish_ci и utf8_general_ci
Вот как выглядит строка 29
$sub_total += ($item['quantity'] * $product['price']);
На локальном хосте все работает отлично ..
Любые идеи, как решить это или что это такое?
Похоже, что в 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... }
Вы можете решить проблему без какой-либо новой логики, просто введя вещь в число, что предотвращает предупреждение и эквивалентно поведению в PHP 7.0 и ниже:
$sub_total += ((int)$item['quantity'] * (int)$product['price']);
(Ответ от Daniel Schroeder не эквивалентен, потому что $ sub_total будет оставаться неустановленным, если встречаются нечисловые значения. Например, если вы распечатываете $ sub_total, вы получите пустую строку, что, вероятно, неверно в счете-фактуре. вы должны убедиться, что $ sub_total является целым числом.)
Не совсем такая проблема, как у вас, но такая же ошибка для поиска людей.
Это случилось со мной, когда я потратил слишком много времени на JavaScript.
Возвращаясь к PHP, я конкатенировал две строки с «+» вместо «.». и получил эту ошибку.
Попробуй это.
$sub_total = 0;
и теперь в вашем цикле вы можете использовать это
$sub_total += ($item['quantity'] * $product['price']);
Он должен решить вашу проблему.
Проверьте, не увеличиваете ли вы какую-то переменную, что ее значение представляет собой пустую строку типа ''.
Пример:
$total = ''; $integers = range(1, 5); foreach($integers as $integer) { $total += $integer; }
Я просто посмотрел на эту страницу, поскольку у меня была эта проблема. Для меня у меня были числа с плавающей запятой, рассчитанные из массива, но даже после обозначения переменных как плавающих точек ошибка все еще была указана, вот простой код ошибки и примера, под которым возникла проблема.
Пример 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 ?>
$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
Теперь код работает как раньше, но без предупреждений на этот раз. Надеюсь, этот пример был бы полезен кому-то.