最近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に戻ると、2つの文字列を " +"ではなく" "で連結する.と、そのエラーが発生しました。
+に、それはint値であると見なされます...指定されたオペランドは数値データ型ではありません。
+代わりに使用したことを確認するためだけに、ほぼ1時間グーグルで作業してきました.。ありがとう!
新しいロジックなしで問題を数値にキャストするだけで問題を解決できます。これは警告を防ぎ、PHP 7.0以下の動作と同等です。
$sub_total += ((int)$item['quantity'] * (int)$product['price']);
(Daniel Schroederからの回答は、$ sub_totalが数値以外の値に遭遇すると未設定のままになるため、同等ではありません。たとえば、$ sub_totalを印刷すると、空の文字列が返されます。これはおそらく請求書では間違っています。キャストする場合は、$ 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でこのエラーを解決する
警告:C:\ XAMPP \ htdocs \ aad-2 \ wp-includes \ SimplePie \ Parse \ Date.phpの行694で非数値が見つかりました
ここで簡単な解決策!
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])));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'])