Új hozzászólás Aktív témák
-
pelyib
tag
Gratula az elert eredmenyhez.
Miben mas a te alkalmazasod mint egy szimpla gallery app? pl: https://piwigo.org/Par eszrevetel:
- mysqli helyett PDO
- egy framework, vagy legalabb egy router lib hogy egy belepesi pontja legyen az alkalmazasnak => nem kell minden fajlban duplikalni a kodot ellenorizni a sessiont => csak egy folder legyen elerheto a webservernek (tipikusan web vagy public neven)
- template engine hasznalata, vagy legalabbis view kiszervezese
- PSR hasznalata => tobbi PHP fejlesztonek konnyebb lesz olvasnia a kodot
- hasznalj 1 fajta karaktert behuzasra space VS tab (PSR a space-t ajanlja)
- injectalj, e helyettfunction __construct()
{
require_once "DataSource.php";
$this->ds = new DataSource();
}ezt
public function __construct(DataSource $source)
{
$this->ds = $source;
}- injectalas igaz a DB connection configra is
- PHP verzio nincs megemlitve,jobban mondva semmilyen requirements nincs megemlitve, 7.2 legyen legalabb, MySQL ?, egyeb?
- ezt meg lehetne forditani:if(!empty($_SESSION["userId"])) {
// amit ved
}
} else {
require_once './view/login-form.php';
}erre:
if(true === empty($_SESSION["userId"]))
{
require_once './view/login-form.php';
exit;
}
//amit ved- "class" folder atneveznem "src"-re
-
disy68
aktív tag
válasz jattila48 #20000 üzenetére
Ha a program visszatérési értéke az exit code-ot jelenti, akkor érthető, mert az exit code-ok csak 255-ig értelmezettek linux rendszereknél míg windows-on 499-ig. Ha valóban erről van szó, akkor ezt ne így használd semmiképp sem.
“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude
-
jattila48
aktív tag
válasz disy68 #20002 üzenetére
Hogy mit jelent a program visszatérési értéke, az azon múlik, hogy az őt meghívó PHP szkript hogy értelmezi ezt az értéket. A lényeg az, hogy a program 4 byte-os intet ad vissza, amit a php feltehetőleg már csak 1 karakterként lát. A kérdés az, hogy ez miért van így. Ha az exec a bash közbeiktatásával hívja a programot, akkor megvan a magyarázat, mert a bash csak karakternyi egész értéket ad vissza. Csakhogy a dokumentáció nem ezt állítja. A shell_exec PHP fv. az, amely a shell segítségével hívja az adott programot. A Windows cmd-ben tudtommal nincs ilyen korlátozás, hogy maximum 499-et adhat vissza egy batch program. Nem tudom, erre gondoltál-e.
[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz jattila48 #20003 üzenetére
Közben a C exit fv.-től olvasom, hogy az argumentumaként megadott egész érték alsó 8 byte-ja lesz a hívónak visszaadott statusz kód. A programom viszont egyszerűen return-nel adja vissza az értéket, nem hív exit-et.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz jattila48 #20004 üzenetére
Lehet, hogy a Linux-on az int main(int,char **) fv. return-nel is csak az alsó 8 bitet adja vissza? Windowsban nem így van. Ritkán programozok Linux-ban, ez még fel sem tűnt.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
btz
addikt
válasz pelyib #20001 üzenetére
Üdv!
Először is köszönöm, ezbben leledzik minden PHP tudásom, amit össze tudtam szedni a cél érdekében. (Nem foglalkozom napi szinten programozással)
Nem ismerem az általad ajánlott PHP galleryt-t de így első ránézésre azt mondom, hogy az enyém jóval egyszerűbb céleszköz kamerakép nézegetésre, mindazonáltal jobban szemügyre veszem majd az általad ajánlott Piwigo scriptet is.
PDO-t már nézegettem, ha jól tudom az előnye abban rejlik, hogy könnyedén lehet változtatni az SQL típusokat és teljesen objektumorientált, de jelenleg a PHP tudásom nincs azon a szinten, hogy egy könnyű félórás szabadidőben csak úgy lecseréljem. Szívesen veszek minden forkot, ami a PDO-ra építkezik adatbázis tekintetében, ebből én is építkezni tudnék PHP ügyileg
Az aktruális scripten való bejelentkezési pontot már én fabrikáltam rá. Igen, sajnos ezzel kódismétlés van. Erre is szívesen várnék egy változatot, ami egy ponton beléptet és vissza tud dobni a refer oldalra.
"csak egy folder legyen elerheto a webservernek (tipikusan web vagy public neven)"
Ezt nem értem pontosan, de jelenleg is így van. Egy mappában van a dashboard és a képek mappa is ami htaccessel le van védve, így csak az viewer applikációban nézhetők a képek.Probálom minél jobban szétválasztani a vieweket a PHP változóktól és minden egyébtől.
Amint lesz időm rendezem a kód sorait olvashatóság szempontjából.
public function __construct(DataSource $source)
{
$this->ds = $source;
}Ez az injektálási eljárás pontosan mitől is jobb? Illetve nem nagyon értem, hogy a require_once nélkül akkor hogy is érem el vele a DataSource.php fájlt?
A readme fájlban meg fogom említeni, hogy milyen PHP verziókon fut, csak előtte le kéne magamnak is tesztelni, eddig az egész 7.4-en ment , nem néztem meg, hogy mondjuk 5.6-on van e nyűgje
if(true === empty($_SESSION["userId"]))
{
require_once './view/login-form.php';
exit;
}
//amit vedEz jó ötlet, azthiszem ez lesz az első a listán amit majd cserélek. Ennél legalább dereng is, hogy miért jobb ha így csinálom
A Class folder a PHPPOT cucca volt eredetileg, de persze bele nyúltam mivel kellett néhány módosítás itt ott.
Köszi a hasznos tippeket, ahogy haladok a PHP-vel való ismerkedésben próbálom behúzni a kódba a hasznos módosításokat.
ⓑⓣⓩ
-
MODERÁTOR
-
disy68
aktív tag
válasz jattila48 #20003 üzenetére
Az exit code és fogalma az nem értelmezés kérdése. Linux alatt az exit code 0-255 között míg Windows alatt 0-499 között értelmezett (foglalt és szabad exit kódok).
Általában a programok a standard out/standard error csatornákat fogják írni, ez lesz a kimenete a programnak, a tényleges adat (persze lehet ezen kívül ezer meg egy módon kimenetet generálni, pl. fájlba írni, de ez most nem érdekes).
"A programom viszont egyszerűen return-nel adja vissza az értéket, nem hív exit-et."
A main-ből hívott return az kvázi az exit-nek fog megfelelni. A main-ből nem térünk vissza return-nel, hanem a standard out-ra kiírjuk az adatot, amivel csinálhat a hívó, amit szeretne. Ez okozza nálad is a problémát. Írd ki a program végén az eredményt és azt használd php-ből.“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude
-
MODERÁTOR
Szerintem teljesen felesleges leelenőrizni, hogy a gyári empty függvény visszaztérési értéke értékre és típusra is megegyezik. Ha az empty hibásan működik ott komoly gond van!
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
jattila48
aktív tag
válasz disy68 #20009 üzenetére
Akkor nem vagyok tisztában az exit kód fogalmával, de most sem lett világosabb. Végülis pontosan mi akkor az exit kód? Windows-ban biztos, hogy vissza lehet adni return-nel a main fv.-ből 499-nél nagyobb értéket is, ilyet már csináltam (pl. CreateProcess => WaitForSingleObject => GetExitCodeProcess ). Az lehet, hogy az exit fv. lecsonkolja az int értéket, de windowsban miért 499-ig, miért nem 255-ig ? A main fv. visszatérési értéke miért int (Linuxban is), ha nem tud 4 byte-os egész értéket visszaadni?
Egyáltalán nem biztos, hogy a main fv.-ből bármit is ki akarok írni az stdout-ra, viszont szeretném pl. batch-ből meghívni, és a visszatérési értékével kezdeni valamit. Ez sokkal egyszerűbb, mint stdout-ra írni, aztán valahogy ezt visszaolvasni. Egyébként ezt a konkrét problémát megoldottam másképp (nem adok vissza 256-ot).[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
sztanozs
veterán
válasz jattila48 #20011 üzenetére
POSIX rendszerekben a visszatérési érték 0-255 között lehet (vélelmezhetően 8-bites rendszerekhet való kompatibilitási okok miatt).
Az int mérete rendszerenként más és más, általában a rendszer natív kódszélességét jelenti (x86 rendszereken 32 bit, 64 bites rendszereken lehet 64 bit, de pl 8 bites rendszereken csak 8 bit). A word (modern rendszerekben long) dupla int hosszú.256-ból úgy lesz 0, hogy a 256-tal (8bit) való maradékos osztás eredményét adja vissza a rendszer - illetve a visszatérési érték RETVAL & 0xff
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
pelyib
tag
Piwig csak egy példa, biztos vagyok benne, hogy tele a net self hosted gallery app-l ami tud jogosultságot kezelni.
"csak egy folder legyen elerheto a webservernek (tipikusan web vagy public neven)"
Ezt nem értem pontosan, de jelenleg is így van. Egy mappában van a dashboard és a képek mappa is ami htaccessel le van védve, így csak az viewer applikációban nézhetők a képek.
Lehet én nézek be valamit, de jelenleg ./ a docroot a webszervernek, ami azt jelenti, h pl az SQL installer fájl is pulikusan elérhető (beirom a böngészőbe és meg tudom nyitni), illetve a class folder is elérhető. Csak az legyen elérhető a webszerveren keresztül aminek kell. Pl rossz esteben ki lehet szedni a DB credential-t.Ez az injektálási eljárás pontosan mitől is jobb? Illetve nem nagyon értem, hogy a require_once nélkül akkor hogy is érem el vele a DataSource.php fájlt?
Egyrészt láthatóak lesznek az osztályod függőségei, hisz ott van az interface-n (public function __construct(DataSource $source)
) illetve megadja a lehetőséget, hogy szabadon kicseréld annélkül hogy ott változtatni kelljen ahol használod.
PéldaA readme fájlban meg fogom említeni, hogy milyen PHP verziókon fut
Bár az is több mint a semmi, de a Composer vagy Docker jobban segíthet annak aki maga is akarja használni.Composer használata megoldja a require_once kérdését is (autoloader). Ez így lehet nem sokat segít de tele a net leírással hogy miként kell beállítani és használni.
[Ez] így biztos jó?
[ Szerkesztve ]
-
jattila48
aktív tag
válasz sztanozs #20012 üzenetére
Azt tudom, hogy az int mérete általában rendszerfüggő. Engem most csak az intel x86 és x64 rendszerek érdekelnek, ezeken az int 4 byte hosszú. Nem hiszem, hogy egy int f() -ként definiált fv. csak úgy lecsonkolná a visszatérési értékét 8 bitre. Márpedig az int main(int, char **) fv. éppen olyan közönséges fv., mint bármelyik, nem lehet olyan speciális tulajdonsága, hogy a return-nel visszaadott int értéket 8 bitre csonkolja. Szerintem a kutya máshol van elásva. Az OK, hogy az exit lecsonkolja az argumentumaként kapott int-et 8 bitre (legalábbis Linuxon), de a return biztos, hogy nem. Windows-ban biztos, hogy nincs is így, mert ahogy említettem, a CreateProcess => WaitForSingleObject => GetExitCodeProcess API hívás sorozattal a végén megkapom mind a 4 byte-ot. Linux-on vagy az exit lehet a "bűnös", de mivel ezt nem használom, akkor a parent process által hívott valamelyik wait* fv., vagy a PHP valóban bash-on keresztül hívja a programot, és akkor a bash lesz a hunyó. De nagyon valószínű, hogy ez nem a main fv. lényegi viselkedése.
Azt, hogy "POSIX rendszerekben a visszatérési érték 0-255 között lehet" hogy érted? Minek a visszatérési érétékét mondod? A main fv.-ét? Nem hinném, hogy a POSIX ilyet állítana (legalábbis igen csodálkoznék rajta).
Amit Windows-ról írtatok, hogy a maximális exit kód 499, ilyenről még nem hallottam, pedig igen régóta programozok Windowst. Nem lehet, hogy ez valami hiba család maximális értéke, amit pl. a GetLastError ad vissza (a GetLastError ennél egyébként nagyobb értékekekt is vissza szokott adni).
[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz jattila48 #20014 üzenetére
Közben beledebuggoltam a programba (Windows alatt, Linux-on még nem), és a rendszer (Windows RTL, Linuxon libc) a main meghívása után valóban meghívja az exit fv.-t, aminek a main-ből return-nel visszaadott értéket adja át. Az exit ezt az értéket lehet, hogy Linux-on 8 bitre csonkolja, Windows-on nem. Vagyis szerintem itt lesz a kutya elásva, az exit-nél. Akkor is meg lesz hívva (a libc által), ha a main-ből return-nel térek vissza. Minden esetre az továbbra is igaz, hogy ez nem a main fv. specialitása. A válaszokat köszönöm, probléma felderítve. Most már legalább ezt is tudom. Igaz rá ment egy napom, hogy kiderítsem, linuxon miért nem működött a PHP szkriptem.
A Windows max. 499-es visszatérési értéke mellékszál, de azért még érdekel. Ha tudtok róla bővebbet, kérlek ne tartsátok magatokban.[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
disy68
aktív tag
válasz jattila48 #20014 üzenetére
"Márpedig az int main(int, char **) fv. éppen olyan közönséges fv., mint bármelyik"
Ez nem igaz, a main függvény végén lesz egy system exit call, vagy a return által visszaadott értékkel vagy default 0, amennyiben nem volt explicit exit hívás vagy bármi egyéb runtime error.A fentiek alapján látszik, hogy az exit code az nem adat átadásra szolgál, hanem a process befejézés állapotának a közlésére. Processek közötti kommunikáció vagy adatcsere az nem ilyen egyszerű. Erről itt találsz egy összefoglalót. A táblázatban az anonymous pipe, amit én is írtam a standard out, ami a te esetedben a bevált és használt megoldás. Bármi más az vagy lassabb lesz (pl. file-ok) vagy sokkal komplexebb (pl. socket vagy message queue-k). Persze ragaszkodhatsz az exit code megerőszakolásához is, ez a te dolgod.
A standard out-ra kerülő adat a visszatérési érték a php shell_exec és exec függvényénél is (a megkötések benne vannak a dokumentációban).
A windows vonatkozást én néztem be, sorry, figyelmetlenül olvastam a dokumentációt.
“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude
-
venic
kezdő
Sziasztok!
Irtam egy kisebb programot, ami a felhasználó által beirt adatok alapján kiszámol valamit.
A beirt adatok adatbázisba kerülnek, majd onnan történik a számolás.
Eddig működne is, csak most azon gondolkozom, ha véletlen feltenném internetre, akkor valószinű gond lenne, ha egyszerre 2 felhasználó is lenne, mert összeakadnának a beirt adatok, szóval valahogy szét szeretném szeparálni, hogy 1 felhasználó által beirt adatok csak hozzá tartozzanak és ne keveredjenek a beirt adatok.
Gondolom lehetne regisztrációval megoldani, de egyelőre anélkül szeretném.
Szerintetek ezt hogy lenne érdemes megoldani?
Köszi előre is. -
venic
kezdő
válasz bandi0000 #20018 üzenetére
Mutatok egy példát, ehhez hasonlót szeretnék, talán igy jobban érthető lesz.
Ezen az oldalon is lehet regisztráció nélkül is beirni, hogy miket ettél egy nap.
És ha beirod az ételeket, utána kijön egy táblázat, ahol összegzi.
Csak ugye ez a gondom, hogy mig beir a felhasználó 2 adatot, közben beirhat egy másik felhasználó egy másikat.
Nekem is ilyesmi, hogy több adatot lehetne beirni és később ezekből számol, ahogy itt is végülis.
https://kaloriabazis.hu/ -
bandi0000
nagyúr
Nem tudom hogy építetted fel a backendet, de amit bhonti kolléga mond, kb úgy kellene csinálni, mintha/ vagy ha van egy REST API-d, akkor frontenden beírogatja amit akar a felhasználó, és elküldi a szervernek, az kiszámolja és visszaküldi az eredményt, és így nem fog ütközni semmit
Xbox One: bandymnc
-
venic
kezdő
válasz bandi0000 #20023 üzenetére
Úgy szeretném, hogy beir valamit a felhasználó és akkor már ezzel is történik számolás, majd ha megint hozzáir valamit, akkor módosul a számolás... szóval közben is van számolás, minden egyes adat beirás után, nemcsak a végén.
Szóval most úgy van felépitve, hogy beirsz valamit, akkor az adat megy az adatbázisba, majd a szükséges adatokból számol. Ha újra beirsz valamit, akkor az megint megy az adatbázisba, de számolásnál már a korábbi és a mostani beirt adatot is figyelembe véve történik a számolás. -
bandi0000
nagyúr
Én mêg mindig nem értem ezt az eltàrolást, hacsak nem valami marha bonyolult sok időt igénybe vevő szàmolást csinálsz
Gondolj egy online szàmológépre, ahol összeadsz 2 szàmot és az "=" gombra kattintva elküldi az adatokat a szervernek, aki visszaadja az eredményt, ettől független frontenden megtarthatod a 2 szàmot amihez hozzàír megint egyet, megint a gombra kattintva adja az eredményt
Persze ettől független csinálhatod azt amit javasoltak feljebb, de az olyan megkerülő megoldàs
Xbox One: bandymnc
-
venic
kezdő
válasz bandi0000 #20027 üzenetére
Nem biztos, hogy választ tudok adni a kérdésedre
De mondjuk nem a beirt adatokból számolok, hanem a beirt info alapján még az adatbázisban vannak az adatok, ahonnan veszem a számokat amivel számolok.
Amit belinkeltem oldalt (kaloriabazis.hu), ha azt vesszük példának, akkor pl beirod hogy almát ettél, és akkor az adatbázisban meg kell nézni, annak mennyi a szénhidrát fehérje stb tartalma és akkor azzal kell számolni.
Illetve egy étel adatfelvételekor 3, tehát 1 küldés során 3 érték megy az adatbázisba, nemcsak 1.
Persze létrehozhatnék változókat a beirt adatoknak (vagy nem tudom, hogy gondolod), csak jelenleg nekem az most bonyolultabbnak tűnik. -
jattila48
aktív tag
válasz disy68 #20016 üzenetére
Továbbra is fenntartom, hogy a main fv. semmiben sem speciális, nem hívja meg (legalábbis magától) az exit-et, és nem csonkolja az int visszatérési értékét. Egyébként a linkereknek megadhatod, hogy mi legyen a belépési pont, a main csupán a default. Ahogy az előző hozzászólásomban írtam, az exit végülis valóban meg lesz hívva, de nem a main, hanem a main fv.-t hívó entitás (RTL, libc,...) fogja azt meghívni. Leegyszerűsítve nagyjából így:
exit(main(...));
Amikor a rendszer egy processzt kerál (pl. a shell), akkor CreateProcess rendszerhívással hozza létre (Windowsban) az exe fájlból. Először az exe-hez linkelt Startup (RTL, libc) fv. indul el, amely különböző inicializálások után meghívja a main fv.-t, majd annak visszatérési értékével (ha a main nem hívott explicite exit-et), az exit rendszerhívást. A processz indító entitás, pedig WaitForSingleObject-tel várakozik a processz befejeződésére, ami az exit végrehajtásával következik be. Az exit által kreált exit kódot a GetExitCodeProcess hívásával szerzi meg. Windows-ban semmi különös nem történik, visszakapom a 4 bájtos visszatérő értéket. Linux-on azonban, vagy az exit, vagy a wait* fv. (valószínűleg az utóbbi) 8 bitre csonkolja azt. Hogy ez a viselkedés POSIX szabvány-e vagy nem, azt nem tudom (újabban valószínűleg nem az), de mindenesetre semmiképpen nem a main fv. specialitása.
Az IPC módokat ismerem (kb. 30 éve programozok), szerintem az most itt nem releváns.
"A standard out-ra kerülő adat a visszatérési érték a php shell_exec és exec függvényénél is "
Ez szerintem nem így van, az exec visszatérési értéke (exec 3. argumentuma) a hívott exe program visszatérési értéke (amit végül is az exit->wait* állít elő), az stdout-ra írt értékeket pedig az exec 2. argumentumában kapom vissza tömbben.[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz jattila48 #20029 üzenetére
A PHP exec visszatérési értékén a 3. argumentumát értem. A PHP értelemben vett visszatérési értéke az stdout-ra írt utolsó sor (ami egyébként a 2. argumentum utolsó eleme is lesz) sztringként. A 3. argumentumban kapom vissza az exe program visszatérési értékét, ezért értem azt az "igazi" visszatérési értéknek. Bocs, ha esetleg zavarosan fogalmaztam.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz jattila48 #20030 üzenetére
Közben éppen az általad linkelt Wikipédia cikkben megtaláltam, hogy a
waitid
-del visszakaphatod mind a 4 byte-ot. Tehát valóban a többi wait* fv. az, amelyik lecsonkolja az exit kódot. Így méginkább igaz, hogy a main fv.-nek semmi köze a csonkoláshoz, ez nem az ő speciális viselkedése.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
supercow
őstag
Sziasztok veteránok,
Egy új Laravel munkát kezdek, azoktól kérnék ötletet akik hasonlóan felépített rendszeren dolgoztak már.
A végső cél a rendszerben CAD és PDF fájlok generálása egy gyártási rendszernek / gépsornak. A PDF a megrendelések melléklete, rajta a méretekkel, amolyan műszaki rajz szinten "preview". A CAD dxf és/vagy CNC kimenet megy a gyártósornak.
Példának legyenek KRESZ táblák. Amikor egy új táblát készít a user, elsőre ki kell választania milyen táblát csinál mondjuk útjelző tábla az autópálya szélén, melyik szabvány szerint (pl magyar, német, kínai, esetleg 2018-as Rev2 olasz KRESZ stb) ezután kiválasztja a tábla méretét, szöveget, rögzítési pontokat stb.
A választható tábla alapméretek, szöveg betűtípusa, a betűk mérete, betűk közötti távolság, háttérszín, tábla minimális és maximális mérete, betűk széltől mért min. távolsága stb stb mind a szabványban van és néha összefüggnek (pl 400mm-es táblán 254mm betűvel kell), ezek a "build szabályok" amiket be kell tartani hogy jó bemenetet kapjon a CNC gép, ami majd kivágja a táblát alamíniumból vagy a fényvisszaverő fóliából.
A kérdésem az, hogy hogyan szerveznétek a kódot hogy ezeket a szabályokat rugalmasan lehessen definiálni, illetve későbbiekben minimális munkával új szabályokat vagy teljesen új szabványt lehessen hozzáadni.In nomine Pasta, et Fusilli, et Spaghetti Sancti. Ramen.
-
MODERÁTOR
válasz supercow #20032 üzenetére
Építs belőle egy "fát (nem tudom ez a jó szó erre)". Vedd a "fő" tulajdonságokat és kezd hozzá szűrni a többit. Én valahogy így állnék hozzá.
Ezt ha papíron leírod akkor szerintem látni fogod a megoldást.
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
Ispy
veterán
Sziasztok!
Elakadtam...hátha van valakinek valami jó ötlete.
PHP-ból hívok meg sqlsrv-vel egy tárolt eljárást, ami összekészít egy json-t és azt visszaadja. De a visszakapott adat 2033 hosszú blokkokra szétszedve jön (11db), amit az istenért nem tudok utána php-ban összerakni, hogy abból valid json text legyen, próbáltam már loopot, implode-ot, akkor sem add vissza semmit a json_decode. Szóval ott vannak az adatok egy arrayben, vagy meg van egy stringben, csak nem jól összefűzve.
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
MODERÁTOR
-
Ispy
veterán
Hát pedig az ms sqlnek complett kódjai vannak, hogy jsont készíts vagy kiolvass, ez a része kész is van. Csak amikor a fetch array-el visszakapom az adatot (ami itt tk. egy string), akkor ezt a stringet 11 részben kapom meg, ha array, ha meg string, akkor olyan, mintha sortörésekkel lenne összerakva a 11 rész. Tehát ebben a formában már nem json. Ha kimásolom egy text editorba, kézzel megszüntettem a töréseket, akkor kész a json.
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
Ispy
veterán
Közben gugli kisegített, szóval az sql driver szedi szét az outputot [link] , php oldalon így lehet összerakni megint:
while (sqlsrv_fetch($stmt)) {
$data .= sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING('UTF-8'));
}
[ Szerkesztve ]
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
Ispy
veterán
De ez az adatbázis nem lesz cserélve, pont ez a lényege, hogy az üzleti logika ott van tárolva, ezért akarom ott összerakni az outputot, nem pedig a php apiban, aminek kb. annyi a dolga, hogy a kérést elküldje a db-nek és visszaadja a db válaszát. Nem szeretném egyessével összeszedegetni az adatokat php-ban és ott összerakni a json (6 különböző táblából jönnek adatok, amik különböző relációkban vannak egymással).
[ Szerkesztve ]
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
MODERÁTOR
Nem oda való. Fentebb leírtam, ha adatbázist kell cserélni akkor problémás, attól függetlenül, hogy a Te esetedben nem lesz. Meg elég problémás mindenre új tárolt eljárást kreálni.
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
Ispy
veterán
Minden eljárás saját verzióval rendelkezik, 1001, 1002 stb., az api csak ezekhez az eljárásokhoz fog hozzáférni, ha az adatbázis oldalon bármi változik, akkor csak csinálni kell egy 1003-as verziót, ami visszaadja a szükséges adatokat. Így simán lehet, hogy az android app az 1001-es kódot használja, a .net-es alkalmazás meg már az 1003-as kódot, mert ott valami frissítés lett csinálva már, de az androidban még nem lett beépítve a módosítás. A tárolt eljárásban meg tk. bármit lehet szimulálni, ha kell.
Btw. inkább megírok 1000 tárolt eljárást, mint 1000 php kódot, de persze kinek mi.
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
-
-
Ispy
veterán
Közben megoldottam a rejtélyt, megy rendben a dolog, csak a postmanban nem váltottam nézetett, ezért nem a raw adatokat teszteltem, hanem a pretty-t, mybad, lehet nem kéne hétvégén dolgoznom.
"Debugging is like being the detective in a crime movie where you're also the murderer."
Új hozzászólás Aktív témák
Hirdetés
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest