Warnung: Es wurde ein nicht numerischer Wert gefunden

Lesezeit: 6 Minuten

Warnung Es wurde ein nicht numerischer Wert gefunden
Imran Rafique

Kürzlich auf PHP 7.1 aktualisiert und bekomme folgenden Fehler

Warnung: Ein nicht numerischer Wert, der in Zeile 29 angetroffen wird

So sieht Zeile 29 aus

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

Auf localhost funktioniert alles einwandfrei..

Irgendwelche Ideen, wie man das angeht oder was es ist?

  • var_dump($item['quantity'], $product['price'])

    – u_mulder

    4. Februar 2017 um 18:46 Uhr

  • Sieht aus wie eine neue Warnung in PHP 7 (wie Sie wissen). php.net/manual/en/migration71.other-changes.php Wenn Sie den Fehler erhalten, haben diese Variablen Werte? Ich denke, Sie könnten dies vermeiden, indem Sie sie auf 0 initialisieren.

    – tjfo

    4. Februar 2017 um 18:49 Uhr

  • @MichaelHanon wo ist die Antwort, auf die Sie sich beziehen? was ist der Syntaxfehler?

    – FKEinternet

    19. November 2017 um 9:02 Uhr

  • $sub_total += ((int)$item[‘quantity’] * (int)$produkt[‘price’]);

    – Ich bin die dümmste Person

    26. Februar 2018 um 9:50 Uhr

  • Ich verwende ein Legacy-Format wie dieses a=a+b; oder str=str.”asd“; oder $this->storeItems = $this->storeItems . $str;

    – Säbel tabatabaee yazdi

    26. Mai 2018 um 21:03 Uhr


Warnung Es wurde ein nicht numerischer Wert gefunden
Jassir Ennazk

Nicht genau das Problem, das Sie hatten, aber derselbe Fehler für Personen, die suchen.

Das ist mir passiert, als ich zu viel Zeit mit JavaScript verbracht habe.

Zurück zu PHP, mit dem ich zwei Strings verkettet habe + anstatt . und bekam diesen Fehler.

  • Dieses verdammte Ding hat mich 2019 zum Stolpern gebracht, LOL. Die String-Verkettung von PHP muss neu strukturiert werden!

    – Dut A.

    24. Januar 2019 um 5:54 Uhr

  • Und hier, 2 Wochen nachdem ich nodejs gemacht und zu PHP zurückgekehrt war, hatte ich diesen Fehler erneut, lol

    – ich bin dabei

    25. Februar 2019 um 18:04 Uhr

  • sobald versucht wird, einen String mit a zu verketten +es wird angenommen, dass es sich um eine handelt int Wert … während die gegebenen Operanden keinen numerischen Datentyp haben.

    – Martin Zeitler

    3. März 2019 um 16:31 Uhr


  • haha, das gleiche ist mir passiert, ich verbringe zu viel Zeit mit JS und wenn es um PHP geht, versuche ich, JS-Code zu verwenden. Aber der PHP-Interpreter lässt mich das nicht tun.

    – Hemant Sankhla

    26. Juni 2019 um 16:49 Uhr

  • Oh mein Gott. Ich habe fast eine ganze Stunde lang gegoogelt, nur um herauszufinden, dass ich es benutzt habe + anstatt .. Danke!

    – marvinpoo

    2. Juli 2019 um 9:04 Uhr

Es scheint, dass in PHP 7.1 eine Warnung ausgegeben wird, wenn ein nicht numerischer Wert gefunden wird. Sieh dir das an Verknüpfung.

Hier ist der relevante Teil, der sich auf den Warnhinweis bezieht, den Sie erhalten:

Neue E_WARNING- und E_NOTICE-Fehler wurden eingeführt, wenn ungültige Zeichenfolgen mithilfe von Operatoren erzwungen werden, die Zahlen oder ihre Zuweisungsäquivalente erwarten. Eine E_NOTICE wird ausgegeben, wenn die Zeichenfolge mit einem numerischen Wert beginnt, aber nachgestellte nicht numerische Zeichen enthält, und
ein E_WARNING wird ausgegeben, wenn die Zeichenkette keinen numerischen Wert enthält.

Ich vermute auch nicht $Artikel[‘quantity’] oder $Produkt[‘price’] enthält keinen numerischen Wert, stellen Sie also sicher, dass dies der Fall ist, bevor Sie versuchen, sie zu multiplizieren. Verwenden Sie vielleicht eine Art Bedingung, bevor Sie $sub_total berechnen, etwa so:

<?php

if (is_numeric($item['quantity']) && is_numeric($product['price'])) {
  $sub_total += ($item['quantity'] * $product['price']);
} else {
  // do some error handling...
}

  • Ich hatte dieses Problem, weil ich noch ein paar Pluszeichen in der ASP hatte, die ich auf PHP übertragen hatte. Strg+f und suchen Sie nach + Zeichen.

    – MH

    15. Juni 2017 um 15:24 Uhr

  • Gibt es eine Möglichkeit, diese Warnung über php.ini auszuschalten?

    – BeniRose

    28. August 2017 um 16:49 Uhr

  • Danke. Ich arbeite an einem älteren Symfony 1.4-Projekt, und es scheint, dass es einige Stellen gibt, an denen dies absichtlich geschieht, was ein Schmerz war. Dies sollte wirklich ein Flag in php.ini sein, mit dem Sie diese Strenge ausschalten können.

    – BeniRose

    6. September 2017 um 16:16 Uhr

  • Alternativ können Sie verwenden $sub_total += ((int)$item['quantity'] * (int)$product['price']);

    – Ich bin die dümmste Person

    13. Februar 2018 um 11:34 Uhr

  • Um fair zu sein, würde ich dies nicht ausschalten, es ist eine der nützlicheren Warnungen, die Sie tatsächlich dazu bringen können, einen Fehler zu finden – in unserem Fall einen, der seit Jahren vorhanden war und nicht bemerkt wurde. Wie Daniel sagte, erscheint es nur, wenn Sie versuchen, Mathematik auf eine nicht numerische Zeichenfolge anzuwenden. Ich sehe keinen Fall, in dem dies das gewünschte Verhalten wäre. dh “default” * 86400 wäre gleich 0 und ohne diese Warnung würden Sie es nie erfahren, es sei denn, Sie gehen den Code schrittweise durch.

    – Steve Childs

    5. März 2018 um 16:25 Uhr


Sie können das Problem ohne neue Logik lösen, indem Sie das Ding einfach in die Zahl werfen, was die Warnung verhindert und dem Verhalten in PHP 7.0 und darunter entspricht:

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

(Die Antwort von Daniel Schroeder ist nicht äquivalent, da $sub_total ungesetzt bleiben würde, wenn nicht numerische Werte gefunden werden. Wenn Sie beispielsweise $sub_total ausdrucken, erhalten Sie eine leere Zeichenfolge, was in einer Rechnung wahrscheinlich falsch ist. – von stellen Sie sicher, dass $sub_total eine Ganzzahl ist.)

  • das ist eine schlechte Praxis. Sie müssen Ihre Eingaben filtern

    – Ciro Vargas

    25. Mai 2017 um 3:47 Uhr

  • Dies scheint die beste Antwort zu sein. Und soweit Sie wissen, dass diese Werte aus der Datenbank stammen, müssen Sie möglicherweise nicht entkommen.

    – MH

    15. Juni 2017 um 15:32 Uhr

  • @Ciro Vargas: Das hängt von der Anwendung ab. In vielen Fällen möchten Sie, dass eine undefinierte Ganzzahl als Null interpretiert wird. Jedenfalls entspricht dies dem PHP7.0-Verhalten und erfordert keine Umschreibung des Codes. (Die akzeptierte Antwort erfordert eine Umschreibung.)

    – Roland Seuhs

    27. Juni 2017 um 12:24 Uhr

  • @RolandSeuhs Ich bin mir nicht sicher, ob ich folge, wenn zwei Zeichenfolgen multipliziert werden, wird ’24’ * ’10’ 240 in PHP erzeugen, ’24’ * null wird 0 erzeugen, aber ’24’ * ‘cat’ wird den erwähnten Fehler auslösen oben, weil ‘cat’ ein nicht numerischer Wert ist. Sie können ‘cat’ in ein int umwandeln, aber das gibt Ihnen auch keine aussagekräftige Zwischensumme. Meine Lösung funktioniert, um festzustellen, ob Menge und Preis numerisch sind. Wenn es sich um die Zeichenfolgen ’24’ und ’10’ handelt, wird es bestanden, aber wenn es sich bei einer der Zeichenfolgen um keine numerischen Zeichenfolgen handelt, schlägt es fehl. Wie mit sub_total umgegangen wird, war eigentlich nicht mein Ziel, tut mir leid, falls das so rübergekommen ist.

    – DJs

    2. September 2017 um 3:10 Uhr

  • ***** PREIS sollte sein (float) sollte das sagen!

    – Bhavin Rana

    12. Dezember 2018 um 4:31 Uhr


Warnung Es wurde ein nicht numerischer Wert gefunden
CodeToLife

In meinem Fall wurde es wegen mir verwendet + wie in anderen Sprachen, aber in PHP ist der String-Verkettungsoperator ..

Hallo,
In meinem Fall mit (WordPress) und PHP7.4 erhalte ich eine Warnung über ein Problem mit numerischen Werten. Also habe ich den alten Code wie folgt geändert:

Von:

$val = $oldval + $val;

Zu:

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

Jetzt ist die Warnung verschwunden 🙂

1646938451 736 Warnung Es wurde ein nicht numerischer Wert gefunden
Ajmal Aamir

Ich hatte dieses Problem mit meinem Paginierungs-Vorwärts- und Rückwärts-Link …. einfach (int ) vor die Variable $Page+1 setzen und es hat funktioniert …

<?php 
$Page = (isset($_GET['Page']) ? $_GET['Page'] : '');
if ((int)$Page+1<=$PostPagination) {
?>
<li> <a href="https://stackoverflow.com/questions/42044127/Index.php?Page=<?php%20echo%20$Page+1;%20?>"> &raquo;</a></li>
<?php }
?>

1646938452 462 Warnung Es wurde ein nicht numerischer Wert gefunden
Coderama

Das ist mir speziell auf PHPMyAdmin passiert. Um dies genauer zu beantworten, habe ich Folgendes getan:

Im Ordner:

C:\ampps\phpMyAdmin\libraries\DisplayResults.class.php

Ich habe das geändert:

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

Dazu:

$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'];
}

Hoffe das erspart jemandem Ärger…

988730cookie-checkWarnung: Es wurde ein nicht numerischer Wert gefunden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy