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.
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.
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...
Eli vika olikin siinä, että pastesit tänne ihan eri koodin kuin mitä oikeasti yritit (et yrittänyt) debugata. Voi helvetti.
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.
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.
Grez kirjoitti:
Eli Alchemistilla oli kyllä oikein hyvä pointti.
No oli tietysti.
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'];
Aihe on jo aika vanha, joten et voi enää vastata siihen.