PHP - form - mysql - GLOBALS

Olyan problémával (feladattal) találkoztunk szembe, hogy egy egyszerű “kiszámolós” szkriptet kell futtatni egy Widget-PHP-code-ból. Kezdetben az volt a probléma, hogy nem tudtuk átadni a kiszámított értékeket az oldalnak (page), mert nem látszódtak a változók.











Szilárd elhatározással vetettem bele magam a mysql-be, hogy majd ha abba beírom biztosan látszódni fog az eredmény. Lehet, hogy ágyúval verébre lőttem és elég lett volna a $GLOBALS használata?











Az egészet még fűszerezi, hogy egy form-ból vesszük a bemeneti adatokat a php szkripthez.











Most már látom, hogy mindegyik dologgal megéri foglalkozni(a későbbi terveink miatt), de azért érdekelne, hogy melyik lehet a legjobb, leggyorsabb megoldás.





Milyen megfontolásokat kell figyelembe venni, ha a form nem adja át megfelelően az adatokat a php feldolgozáshoz.











Konkrétan csodálatosan lefut a php szkriptem, de mikor a bemenetet a formból kellene vennie, valamiért makacskodik…











Sajnos ebben az esetben az is sújt bennünket, hogy a társam írta a formot, én a szkriptet, meg az adatbázis elérést. Elkezdtem már én is foglalkozni a formokkal, de sajnos kevés az időm…











Igazából jól ebben az esetben kérdezni sem tudok, csak reménykedem valami ötletben, ihletben:-)











Üdv.





aks69

http://www.google.hu/search?q=php+programozás&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:hu:official&client=firefox-a


'aks69' wrote on '2010-04-21:




Olyan problémával (feladattal) találkoztunk szembe, hogy egy egyszerű "kiszámolós" szkriptet kell futtatni egy Widget-PHP-code-ból. Kezdetben az volt a probléma, hogy nem tudtuk átadni a kiszámított értékeket az oldalnak (page), mert nem látszódtak a változók.








Szerintem mindannyian jobban tudnánk segíteni, ha általános iskola első osztályos, "hogyan telt a nyári szüneted" színvonalú fogalmazástól elrugaszkodva KONKRÉTUMOKAT láthatnánk.


Feltéve, ha nem az volt a cél, hogy a szíved fájdalmát megoszd velünk, hanem tényleg segítséget szeretnél kapni.

Na ez jó, nem is tudtam, hogy vannak ezek a jó kis keresők, és ennyi adatot képesek kezelni… :-OOO)))











Találtam egy jó kis direktívát, ami lehet, egy az egyben megszünteti az összes eddigi komolyabb problémámat.











Beírok róla pár sort, hisz ha jól sejtem ez a fórum értelme (ezt az n-edik doksiban találtam, még Győző segítsége nélkül tegnap, és egész jó, illetve annak tűnik):











“Amikor a register_globals be van állítva, megmérgezi a szkriptjeidet mindenféle változóval, mint például a HTML formokból származókkal. Ehhez hozzájön az, hogy a PHP nem követeli meg a változók inicializálását, így sokkal könnyeb veszélyes kódot írni. Nehéz döntés volt, de a PHP közösség úgy döntött, hogy ez a direktíva alap állapotban ki kell legyen kapcsolva. Amikor bekapcsolt állapotban van, úgy használják a változókat, hogy valójában nem is tudják honnan származik, csak feltételezik.”


'DjZoNe' wrote on '2010-04-22:




Szerintem mindannyian jobban tudnánk segíteni, ha általános iskola első osztályos, "hogyan telt a nyári szüneted" színvonalú fogalmazástól elrugaszkodva KONKRÉTUMOKAT láthatnánk.


Feltéve, ha nem az volt a cél, hogy a szíved fájdalmát megoszd velünk, hanem tényleg segítséget szeretnél kapni.





Találtam valamit, amit ki kell próbálnom este.





Üdv.


aks

register_globals-t 5 éve nem használ normális programozó, mivel biztonsági kockázatokat rejt a dolog magában.











Másrészt PHP 5.3.0-ban eltávolításra került a kódból.

Azért futotta ennyire, mert magam sem tudom megfogalmazni a pontos kérdést sajnos. Arra gondoltam, hogy kapok ötletet, de belátom, ez alapján tényleg elég nehéz. Az első ötletem ez az előző direktíva, amit ha (át)beállítok lehet, hogy megjavul a progi.











Egyébként nyiván hasznos volt számomra ez is, hisz a fórum használhatóságáról kaptam információt.











Én nem vagyok “normális” programozó, sőt programozó sem vagyok. Talán pont emiatt próbálok mindenhonnan információt szerezni.











Sajnálom, ha kiszedték a kódot. De akkor egyszerűsödött a kérdésem is. Hogyan tudom elérni, hogy a widgetekben használt változók gond nélkül elérhetőek legyenek az oldalakon is? (Ez már elég konkrét)











Üdv.





Aks


'aks69' wrote on '2010-04-22:




Hogyan tudom elérni, hogy a widgetekben használt változók gond nélkül elérhetőek legyenek az oldalakon is? (Ez már elég konkrét)








Fussunk neki mégegyszer a dolognak szerintem :)





Widgetekben használt változók...


Nos, a helyzet az, hogy a WordPress sablon rendszere úgy működik (általában), hogy először az oldal tartalma, és az oldalt megjelenítő sablon jelenik meg, és csak utána a sidebar, amiben vannak a widgetek.





Ergo az oldal tartalma már rég meg lesz jelenítve, amikor a widgeted egyáltalán betöltődik.





Persze nagy kérdés, hogy mi van a widgetedben, és hogy mit csinál ez a widget...





Pl. ha egy funkciót hívnak a sablon functions.php-jából, akkor van lehetőség arra, hogy az oldaladban is megjelenjenek ezek a változók.





Egyébként a register_globals egyébként sem oldaná meg a problémádat ebben az esetben.

Még konkrétabban:











Widgetben beolvasunk formból adatokat.











Ezeket valahogy feldolgozzuk, és lesznek erdmények, amit el kell tárolnunk, hogy elérjük az oldalról.





A form nyilván akkor tudja adni az adatokat, ha az “elküld” “megnyomódik”.





Az eredményt rögtön ki is írjuk a widgetbe. (Eddig így volt, működött, de végülis csúnya volt)











Ennek megfelelően született egy kérés, hogy az oldalon jelenítsük meg kis körítéssel (szöveggel) az eredményeket.











Erre volt az ötlet, hogy beírom adatbázisba az eredményt. (Mert régebbről emlékeztem, hogy nehezen működik így együtt a widget és page)





Ami működött is, amig külön futott a form-tól függetlenül a scipt.





Én elküldtem a társamnak a kész, működő(!!!) php-s mysql-es scriptetemet, hogy integráljuk össze a működő formjával.





Utána meg “elegánsan” csak kiolvasom az eltárolt eredményt az adatbázisból, a megfelelő oldalon.





De a form már így nem akart működni, nem jöttek át az adatok belőle.





A widgetben lévő feldolgozó rész, már nem volt hajlandó működni.











Ehhez még hozzájön az, hogy a gomb lenyomása után kellene frissülni az oldalnak a szöveges eredményekkel.











Túl komplexnek érzem a problémát (a mi szintünkhöz képest), ezért nem akartam leírni.











Hát végülis, ennyi…











Üdv.





Aks

Köszönöm a segítségeket. Majdnem minden működik jól. Pontosabban annyi a problémám vele, hogy mivel írok az adatbázisba, nem akadnak-e össze az emberkék, ha időben borzasztó közel vannak egymáshoz. Azaz ha “B” ember azelőtt indítja a saját lekérdezését, mielőtt még “A” ember befejezte volna a sajátját…











Azaz nem tudom, vajon a mysql-ben van-e ilyen valami beépítve, ami ezt áthidalja. Vagy azért lehet néhány oldalon felhívást látni, hogy “öreg”, “akkor fogod tudni használni a progit ha regisztrálsz”, mert csak a regisztrált felhasználókat védi a rendszer az összeakadástól? (A táblákban láttam a felhasználók neveit tartalmazó mezőket.)











Üdv.





Aks


'aks69' wrote on '2010-05-03:




Köszönöm a segítségeket. Majdnem minden működik jól. Pontosabban annyi a problémám vele, hogy mivel írok az adatbázisba, nem akadnak-e össze az emberkék, ha időben borzasztó közel vannak egymáshoz. Azaz ha "B" ember azelőtt indítja a saját lekérdezését, mielőtt még "A" ember befejezte volna a sajátját..








MySQL-ben a másodperc tört része alatt zajlik le egy insert művelet,


így ebből elméletileg nem lehet gond.





De ehhez tudni kellene hogyan is használod az alkalmazást.


Bszúrás után a mysql_insert_id() visszaadja a legutóbb beszúrt sor azonosítóját.