Minulla on rakenteilla sivu, jossa on muutama javascript-väkkyrä. Olen asetuksissa (mysql-kannassa) määritellyt kuville ym. asetuksia serialize muodossa.
Tämä kuitenkin herkesi toimimasta.
a:1:{i:0;a:7:{s:9:"banner_id";s:1:"7";s:5:"width";s:3:"1150";s:6:"height";s:3:"90";s:9:"layout_id";s:1:"1";s:8:"position";s:11:"content_top";s:6:"status";s:1:"1";s:10:"sort_order";s:1:"1";}}
Mikä tässä voisi heittää? Virheilmitus sivulla alkaa näin:
Notice: unserialize() [function.unserialize]: Error at offset 58 of 190 bytes in....
Ps. joku voi tuosta jo osata lukea, että rakentelen javascript-esitystä,jonka leveys on 1150px ja korkeus 90 px :)
Mod. korjasi kooditagit!
Kuten virheilmoituksessa hyvin selvästi lukee, datan 58. tavussa on virhe. Varmaan itsekin osaat selvittää, että kyse on tällöin kohdasta s:3:"1150". Tässä hyvin näkyykin, että pitäisi olla kolmen merkin teksti (s:3) mutta tekstissä onkin neljä merkkiä ("1150").
Älä sorki serialisoitua dataa käsin. Jos haluat muuttaa jotain, pura data, tee muutos ja serialisoi uudestaan.
Älä käytä PHP:n serialisointia JS:n kanssa, vaan käytä JSON-muotoa, jolle on molemmissa hyvä tuki ja joka tässä tapauksessa myös vie vähemmän tilaa. Tietokannan tasolla voisit harkita myös tiedon tallentamista kantaan rakenteellisesti eli esimerkiksi erilliseen tauluun avain-arvopareina.
Kiitos.
Muokkasin noita kuvan mittoja suoraan kannassa enkä hoksannut muokata tuota pituutta. Selveni kun tein testissä samanlaisesta arraysta serializen ja vertasin merkkijonoja vierekkäin.
En käytä tätä varsinaisen Javascriptin kanssa, se vaan asettaa divin koon, jossa javascript esitetään täysimittaisena. Administa sen kokoa pystyy sitten muuttamaan, paitsi että adminia tälle ei ole vielä tehty. ;)
Ps. Tämä ohjelma on kokonaisuudessaan sellainen, että setting taulussa on yli 40 riviä asetuksia. Kaikki ne syötetään Config-luokalle ja kukin alaluokka poimii sieltä sitten omat asetuksensa. Siksi tuon muuttaminen ei sovellu tähän luokka-rakennelmaan ilman ylimääräisiä juttuja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.