Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP: Warning: Illegal string offset

Sivun loppuun

pistemies [07.05.2020 09:10:12]

#

Moi

Outo virhe, josta en nyt tajua yhtään mitään.

  echo "<pre>";
  print_r($product);
  echo "</pre>";

/*
Näkymä:
Array
(
    [price] => 32.5000
    [product_id] => 123
    [quantity] => 1
    [order_product_id] => 296
    [order_id] => 258
) */

 $quantity = $product['quantity'];
 $price = $product['quantity'];

Tulos:
Warning: Illegal string offset 'quantity' in ........... Illegal string offset 'price' in ....................

Käytössä PHP 7.2, vielä eilen päivällä toimi.

Lebe80 [07.05.2020 09:24:38]

#

Mä veikkaan, et virhe tuleekin nimenomaa sellaisesta arraystä, jossa noita ei oikeasti ole määritelty. Pistät iffittelyä vaan, että onko oikeasti arvo määritelty, ennen sen tunkemista muuttujaan.

Näin käy usein, esim. loopatessa suurta määrää tietoa, jolloin huonosti debugatun koodin virheilmoitus tai varoitus voidaan tulkita nopeasti väärin, ja etsiä virhettä väärästä kohdasta.

Virheenä saattaa olla vaikkapa epähuomiossa samanniminen muuttuja, jonka koodari vahingossa luo kesken skriptin.

pistemies [07.05.2020 10:35:34]

#

Lebe80 kirjoitti:

(07.05.2020 09:24:38): Mä veikkaan, et virhe tuleekin nimenomaa...

Kiitos! Minulla silmät vähän harittaa pahasti .... ;)

Vika löytyi, eilen illalla yritin tehdä tähän jotakin 'kiertoa', että kun vanhan ostoksen vanha tuote on poistettu, niin se ei pysäyttäisi tulostusmekanismia.
Laiskuutta siihen tein muuttujan $product kun en viitsiniyt kirjoittaa $product_name.
No nyt taas rullaa...

The Alchemist [07.05.2020 16:43:57]

#

Eli vika olikin siinä, että pastesit tänne ihan eri koodin kuin mitä oikeasti yritit (et yrittänyt) debugata. Voi helvetti.

Lebe80 [08.05.2020 08:40:19]

#

The Alchemist kirjoitti:

Eli vika olikin siinä, että pastesit tänne ihan eri koodin kuin mitä oikeasti yritit (et yrittänyt) debugata. Voi helvetti.

Kyllä ton näki jo tosta esimerkkikoodista, ettei ole sellainen, mitä oikeasti käytetään.

Grez [08.05.2020 11:32:31]

#

Lebe80 kirjoitti:

Kyllä ton näki jo tosta esimerkkikoodista, ettei ole sellainen, mitä oikeasti käytetään.

Me ja kaikki muut tähän ketjuun vastanneet varmaan näkeekin.. Mutta moni muukin olisi varmasti voinut virheen huomata jos kysymykseen laitettu koodi olisi ollut se mistä virhe oikeasti tuli.

Toisekseen juuri tässä tapauksessa oli helppo nähdä virheilmoituksesta, ettei se voi tulla laitetusta koodista. Aina ei kuitenkaan näin ole, eli yleisellä tasolla on erittäin huono idea laittaa viestiin jokin muu koodi kuin se mistä virhe oikeasti tulee.

Eli Alchemistilla oli kyllä oikein hyvä pointti.

Lebe80 [08.05.2020 13:50:18]

#

Grez kirjoitti:

Eli Alchemistilla oli kyllä oikein hyvä pointti.

No oli tietysti.

The Alchemist [13.05.2020 17:09:25]

#

Niin ja kun kaikki ketjuun vastanneet eivät edes nähneet sitä, ettei virheilmoitus voinut tulla tuosta annetusta koodista. Tuo virheilmoitus voi tietääkseni tulla vain siinä tapauksessa, kun muuttujaan on asetettu merkkijono, ja sen jälkeen muuttujata yritetään lukea indeksejä kuin se olisi taulukko.

$foo = 'Lorem ipsum';

// "Illegal string offset 'test'."
print $foo['test'];

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta