최근 PHP 7.1로 업데이트되었으며 다음 오류가 발생하기 시작했습니다.
경고 : 29 행에 숫자가 아닌 값이 있습니다.
29 번 줄은 다음과 같습니다.
$sub_total += ($item['quantity'] * $product['price']);
localhost에서 모두 잘 작동합니다 ..
이것을 해결하는 방법이나 그것이 무엇인지 어떤 아이디어?
최근 PHP 7.1로 업데이트되었으며 다음 오류가 발생하기 시작했습니다.
경고 : 29 행에 숫자가 아닌 값이 있습니다.
29 번 줄은 다음과 같습니다.
$sub_total += ($item['quantity'] * $product['price']);
localhost에서 모두 잘 작동합니다 ..
이것을 해결하는 방법이나 그것이 무엇인지 어떤 아이디어?
답변:
PHP 7.1에서 숫자가 아닌 값이 발견되면 경고가 발생하는 것 같습니다. 이 링크를 참조하십시오 .
다음은 귀하가 받고있는 경고 통지와 관련된 관련 부분입니다.
숫자 또는 그에 상응하는 할당을 예상하는 연산자를 사용하여 유효하지 않은 문자열을 강제 할 때 새로운 E_WARNING 및 E_NOTICE 오류가 도입되었습니다. 문자열이 숫자 값으로 시작하지만 뒤에 숫자가 아닌 문자가 포함 된 경우 E_NOTICE가 발생하고 문자열에 숫자 값이 포함되지 않은 경우 E_WARNING이 발생합니다.
나도 같은데요 $ 항목 [ '수량'] 또는 $ 제품 [ '가격'] 확신 그들을 번성하기 전에 할 것을 확인, 숫자 값을 포함하지 않습니다. $ sub_total을 계산하기 전에 다음과 같이 조건부를 사용할 수 있습니다.
<?php
if (is_numeric($item['quantity']) && is_numeric($product['price'])) {
$sub_total += ($item['quantity'] * $product['price']);
} else {
// do some error handling...
}
$sub_total += ((int)$item['quantity'] * (int)$product['price']);
정확히 당신이 가진 문제는 아니지만 검색하는 사람들에게 동일한 오류가 있습니다.
JavaScript에 너무 많은 시간을 할애했을 때 이런 일이 발생했습니다.
PHP로 돌아와서 " +
"대신 " "로 두 문자열을 연결 .
하고 오류가 발생했습니다.
+
이라고 가정 int
하고 주어진 피연산자는 숫자 데이터 유형이 아닙니다.
+
대신에 내가 사용한 것을 알아 내기 위해 거의 한 시간 동안 인터넷 검색을 해왔다 .
. 감사!
새로운 로직 없이도 문제를 숫자로 캐스팅하여 문제를 해결할 수 있습니다. 이렇게하면 경고를 방지하고 PHP 7.0 이하의 동작과 동일합니다.
$sub_total += ((int)$item['quantity'] * (int)$product['price']);
(Daniel Schroeder의 답변은 숫자가 아닌 값이 발견되면 $ sub_total이 설정되지 않은 상태로 유지되기 때문에 동일하지 않습니다. 예를 들어, $ sub_total을 인쇄하면 빈 문자열이 표시되며 이는 송장에서 잘못되었을 수 있습니다.-by 캐스팅하면 $ sub_total이 정수인지 확인합니다.)
제 경우에는 +
다른 언어로 사용되었지만 PHP 문자열에서 연결 연산자는 .
.
이것은 특히 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'];
}
누군가가 문제를 해결하기를 바랍니다.
PHP 7.3의 phpmyadmin에서 문제가 발생했습니다. 감사합니다 @coderama, 나는 libraries / 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'];
결정된.
값이 ''와 같은 빈 문자열인지 일부 변수로 증가하지 않는지 확인하십시오.
예:
$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
이제 코드는 이전처럼 작동하지만 이번에는 경고가 없습니다. 이 예제가 누군가에게 유용하기를 바랍니다.
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])));
코드에서 숫자가 아닌 값이 발견되면 아래에서 시도하십시오. 아래 코드는 float로 변환됩니다.
$PlannedAmount = ''; // empty string ''
if(!is_numeric($PlannedAmount)) {
$PlannedAmount = floatval($PlannedAmount);
}
echo $PlannedAmount; //output = 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>";
var_dump($item['quantity'], $product['price'])