programing

경고: 숫자가 아닌 값이 발견되었습니다.

procenter 2022. 9. 18. 21:16
반응형

경고: 숫자가 아닌 값이 발견되었습니다.

최근 PHP 7.1로 업데이트되었으며 다음 오류가 표시되기 시작합니다.

경고: 회선29 에서 숫자가 아닌 값이 검출되었습니다.

29호선은 다음과 같습니다.

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

localhost에서는 모두 정상적으로 동작합니다.

어떻게 이 문제를 해결할 것인지 또는 무엇인지 알고 계십니까?

문제가 발생한 것은 아니지만 검색 대상과 동일한 오류입니다.

JavaScript에 너무 많은 시간을 할애했을 때 이런 일이 있었습니다.

두 을 PHP와 했습니다.+.에러가 났어요.

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']);

(숫자가 아닌 값이 발견되면 $sub_total은 설정되지 않은 채로 있기 때문에 Daniel Schroeder로부터의 답변은 동일하지 않습니다.예를 들어 $sub_total을 출력하면 빈 문자열이 표시되는데, 이는 청구서에 잘못된 것일 수 있습니다.- 캐스팅을 통해 $sub_total이 정수임을 확인합니다.)

같은 에는 제가 사용한 것 .+ 연결 연산자는 "PHP"입니다...

안녕하세요, 제 경우 (WordPress)와 PHP7.4를 사용하면 수치 문제에 대한 경고가 나타납니다.그래서 이전 코드를 다음과 같이 변경했습니다.

송신원:

$val = $oldval + $val;

수신인:

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

이것으로 경고가 사라졌습니다:)

페이지 순방향 링크와 역방향 링크에서 이 문제가 발생했습니다. $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 }
?>

이것은 특히 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 덕분에 라이브러리/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'];

고정된.

이거 먹어봐.

$sub_total = 0;

이제 루프 내에서 이 기능을 사용할 수 있습니다.

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

그게 네 문제를 해결해 줄 거야.

값이 ''와 같은 빈 문자열인 변수를 사용하여 증분하지 않을 경우 선택하십시오.

예:

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

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

PHP 7.1-7.4

식에 이 포함되어 있을 때 발생합니다( " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "+,-,* , 「」/int, float bool (int, float bool) ,는 PHP 른른른른른른 。이러한 상황이 발생할 가능성이 있는 것은, 다음의 2가지입니다.

  • 스칼라가 필요한 연산을 사용하려는 것은 아닙니다.를 들어, 「」라고 하는 것은,+을 의미하는 경우.(신호)
  • 숫자를 기대했지만 사용한 값이 숫자에 가깝지도 않습니다.번호가 아닌 것을 파악하고 그에 따라 처리하십시오.
    • 를 들어, 「」가 있는 는,echo 3 + $variable 당신의 ★★★★★★★★.$variable입니다."n/a"그 대신 "해당되지 않음"을 에코하는 경우가 있습니다.또는 숫자 이외의 모든 값을 0으로 취급하여에 캐스트할 수도 있습니다.

이 경고들을 수정하세요!PHP 8에서는 "Uncatched TypeError:지원되지 않는 오퍼랜드 유형"입니다.

PHP 8

PHP 7.1-7.4에서 "A non well formed numeric value outcepted"라는 경고를 생성하는 데 사용되었던 코드가 대신 이 경고를 제공합니다.이 문제는 숫자로 시작하지만 숫자가 아닌 문자열인 "추적 문자열"이 있을 때 발생합니다. (계산은 계속되지만 이 문자열은 수정해야 합니다!향후 에러로 업그레이드 될 가능성이 있습니다).예를 들어 다음과 같습니다.

echo 3 + "30 meters";

출력:

경고: X행[...][...]에서 숫자가 아닌 값이 발견되었습니다.
33

수정:

echo 3 + (float) "30 meters";

저는 이 문제가 있어서 이 페이지를 보고만 있었습니다.저는 어레이에서 부동소수점 번호를 계산했습니다만, 변수를 부동소수로 지정한 후에도 오류가 발생하였습니다.다음은 문제의 원인이 된 간단한 수정과 코드 예를 제시하겠습니다.

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에서 이 오류 해결

경고: C:\XAMPP\htdocs\aad-2\wp-includes\에서 숫자가 아닌 값이 발견되었습니다.694행의 SimplePie\Parse\Date.php

심플한 솔루션!

  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])));
$sub_total_price = 0; 

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

echo $sub_total_price;

100% 동작하고 있습니다. : )

이것은 보통 + 기호로 줄을 묶을 때 발생합니다.PHP에서는 도트 기호( )를 사용하여 연결을 할 수 있습니다.따라서 PHP에서는 실수로 두 문자열 사이에 + 기호를 넣었는데 숫자만 사용할 수 있기 때문에 이 오류가 나타납니다.

여러분 감사합니다.지금까지:

<?php echo $data['style_headerheight']-3; ?>

에러가 발생했습니다.

PHP 경고: framework/inc/customcss에서 숫자가 아닌 값이 발견되었습니다.78행의 php

이를 수정하기 위해 다음과 같이 대체했습니다.

<?php echo ((int)$data['style_headerheight']-(int)3); ?>

여기서 답변해도 문제가 해결되지 않을 수 있습니다.

내 문제는 정수나 연계가 관련되지 않았다.

문제는 단순한 오타(코드에 오류가 있는 문자열)였습니다.

$conn = new PDO($details, $username, $password); -

어쩌다 보니 코드에 마이너스 기호(-)를 입력하게 되었습니다.이것을 삭제하면, 문제가 해결됩니다.제 추측으로는 PHP가 에러를 일으킨 것 같습니다.왜냐하면 마이너스 부호를 봤기 때문에 거기서 계산을 할 필요가 있었지만 인수가 없었기 때문입니다.

열 구조가 INT인지 확인하십시오.

코드에 숫자가 아닌 값이 있는 경우는, 다음의 1을 시험해 주세요.아래 코드는 float로 변환됩니다.

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

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

 echo $PlannedAmount; //output = 0

PHP에서 연결에 +를 사용하면 이 오류가 발생합니다.In 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>";

다음의 번호를 사용하고 있는 것을 확인할 필요가 있습니다.

 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'];
 }
$sub_total += ($item['quantity'] * $product['price']);

대체 사용자:

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

number_format() 메서드를 사용하여 포맷된 변수 2개를 추가한 후 이 오류가 발생하였습니다.그 이유는 이 방법이 보통 당신의 번호의 형식을,separator 인수(옵션)를 다음과 같이 지정하지 않는 한null예를 들어, 다음과 같은 코드가 있다고 합시다.

$subtotal = 6556.7;
$vat = number_format(0.175 * $subtotal, 2);            // 1,147.42
$transactionfee = number_format(0.02 * $subtotal, 2);  // 131.13
$total = $subtotal + $vat + $transactionfee;           // 6556.7 + 1,147.42 + 131.13 = ERROR

변수 중 에 '다음에 있다'가 되어 있기 에 다음 합니다.,플로트 유형에는 유효하지 않습니다.

경고: 숫자가 아닌 값이 발견되었습니다...

number_format()과 .

number_format(number,decimals,decimalpoint,separator).

로 지정하면 됩니다.''는 다음과할 수

$subtotal = 6556.7;
$vat = number_format(0.175 * $subtotal, 2, '.', '');           //1147.42
$transactionfee = number_format(0.02 * $subtotal, 2, '.', ''); //131.13
$total = $subtotal + $vat + $transactionfee;   // // 6556.7 + 1147.42 + 131.13 = 7835.25

나처럼 아직도 머리를 찧고 있는 사람들이 아니라면 늦었을지도 모른다.내 경우 PHP 5.6에서 개발된 레거시 프로젝트였지만 수정해야 할 때는 PHP 7.1을 실행하고 있었습니다.굳이 바꾸지 않았어요.(돈을 지불하지 않으면 안 된다) 그래서 문제는 PHP 7.1이 PHP 5.6보다 더 엄격하다는 것입니다.

PHP 5.6에서는 다음을 수행할 수 있습니다.

$totalPrice = ' '
$someFoo = $totalPrice + 100
// This is totally fine. And PHP will not yell about it.

PHP 7.1에서는 에러가 발생합니다.

$totalPrice = ' '
$someFoo = $totalPrice + 100
// Error : A non-numeric value encountered.

그 을 '이행'으로 $totalPrice = 0모든 게 성공했어

누군가 유용하게 써주길 바란다.

언급URL : https://stackoverflow.com/questions/42044127/warning-a-non-numeric-value-encountered

반응형