- A holnap határán: itt van minden új Galaxy promóképe
- Xiaomi 14T Pro - teljes a család?
- Okosóra és okoskiegészítő topik
- Garmin Instinct – küldetés teljesítve
- Google Pixel 7a - venni vagy nem venni?
- 200 megapixeles zoomkamerát sem kap az S26 Ultra?
- Poco X6 Pro - ötös alá
- Bemutatkozott a Poco X7 és X7 Pro
- Samsung Galaxy A54 - türelemjáték
- Mobil flották
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
Na basszus, most látom, hogy pont a backslash-t akartam írni, erre csak elcsesztem...
Úgy látszik, már késő volt.
Na várj, ezt írd már körül kicsit, mert nem értem. Tulajdonképpen mit szeretnél elérni? Hogy a szögletes zárójeleket tartalmazó elérési útvonalakat találja meg? Ezek szerint a backslash nem volt jó ( \[ kjkj \] )
A [ és ] HTML-kódjával is próbálkoztál?
[ : [
] : ] -
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz
Sickboy25 #4087 üzenetére
Az első hsz.-ben látható könyvek közül én kivettem könyvtárból a Bevezetés a PHP5 programozásába c. könyvet, és nekem eddig pozitívak a tapasztalataim, ezerszer értelmesebb könyvnek látszik, mint pl. a "Tanuljuk meg a PHP5 használatát 24 óra alatt" c. könyv... Előbbi igen vaskos, több mint 1000 oldalas könyv. Én ezt ajánlanám kezdetnek, meg persze a php.net-et.
Aztán amikor elkezd jobban menni, és a dolgok hátterére is kíváncsi vagy, akkor érdemes lehet olvasgatni a PHP fejlesztés felsőfokon c. könyvet, nagyon érdekes dolgok vannak benne, és jó az író (a fordító?) stílusa is. -
Sk8erPeter
nagyúr
Köszönöm a válaszokat, akkor tényleg maradok a lehető legegyszerűbb megoldásnál.
Ami talán mellesleg ugyanolyan gyors is, vagy gyorsabb, mint ha minden egyes feltételt vizsgálgatnék, annak megfelelően törölnék, stb. Azért jó ebbe a topicba írni, mert végül a segítségetekkel valahogy mindig eljutok a közel legegyszerűbb megoldáshoz.
"Általában egy nagy terhelésű rendszeren az adatbázis i/o a szűk keresztmetszet, nem pedig a processzor sebessége."
Mondjuk gondolom ilyen esetben érdemes lenne megfontolni, hogy inkább PHP-vel vizsgálgatom a különböző tömböket kicsit komplikáltabb módon, mint hogy több adatot töröljek, majd vigyek be újra az adatbázisba.Még egy eszembe jutott, amire kíváncsi lennék:
-csak érdekességképpen: van olyan módszer, amivel figyelni lehet a felhasznált erőforrások váltakozását? Csak azért, mert érdekelne, az egyes módszerek, függvények felhasználástól függően vajon nagyjából mennyi erőforrást (memóriahasználat, prociigény) igényelnek. Legalább itthoni gépen próbálgatnám, ha a szolgáltató szerverén nem is lehet - van olyan külső progi, amit rá lehet állítani a PHP-s folyamatokra? Vagy akár beépített függvény? A microtime()-mal ugye elvileg jól lehet figyelgetni a lekérdezések idejét, ezzel csak az a probléma, hogy nyilván a saját procim is mindig más folyamatokkal foglalkozik, mást helyez előtérbe (prioritás, megszakítások), ezért akárhányszor frissítek a böngészőben, a microtime() függvény mindig más eredményt ad... így sokszor még ez sem olyan jó összehasonlítási alap.
Pl. azt akartam tesztelni legutóbb, hogy a többszörös mysql_query($query) utasításnál mennyivel gyorsabb a MySQLi osztály használata, és a $mysqli->multi_query($query) utasítás egy do{...}while($mysqli->next_result()); paranccsal.
De akárhányszor frissítettem, mindig más eredmény jött ki, egyszer az egyik javára, máskor a másik javára - de összességében a MySQLi osztály használata a multi_query()-vel jött ki győztesen, legalábbis ott szerepeltek a rövidebb értékek a legtöbbször.(#4086) cucka: igazad van, a JavaScriptes megoldás a legegyszerűbb, amennyiben szükség van a gomb value mezőjére (már amennyiben egy felhasználónál nincs kikapcsolva a JavaScript, de ez az esetek döntő többségében nem áll fenn).
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #4083 üzenetére
Na ja, de előfordul, hogy az alapérték (pl. pont az Elküldés, ezért rossz példa volt, amit írtam) nem megfelelő, hanem a value-ba valami egyedi szöveg kellene (pl. Kiskutyafüle), hogy kerüljön. Mintha egyszer láttam volna már megoldást ilyenre, de nem tudom, hol, és lehet, hogy az valahogyan manipulálva volt, mert nem tudok róla, hogy alapból meg lehetne oldani. De szóljatok, ha mégis (azonkívül, hogy nem adok nevet).
-
Sk8erPeter
nagyúr
Még egy kérdés: amikor get methoddal küldök el egy formot, akkor hogyan tudom elérni, hogy az url-be NE pakolja bele a submit gombnak az értékét is?
(Elég hülyén néz ki, amikor a submit gomb neve mondjuk mod_submit, és akkor lesz az url-ben egy mod_submit=Elküldés vagy valami ehhez hasonló...) -
Sk8erPeter
nagyúr
Tényleg, köszi.
Nem tudom, miért nem jutott eszembe, hogy azt is meg lehetne oldani, hogy még egyszer lekérdezem a feldolgozó fájlban az adatbázist, és összepakolom a lekérdező parancsot sima for ciklussal aszerint, hogy ha mondjuk nem adott azonosítószámú annak a bizonyos post tömbnek az aktuális értéke, akkor insert...
De mondjuk abban is igazad van, hogy talán adatbázisban átláthatóbb lenne, ha minden egy helyen lenne, bár nem mintha túl sűrűn nézegetné bárki is az adatbázist, de esetleg a kódban is jobban lehetne követni az eseményeket, kevesebb parancs lenne, ha adott azonosítójú elemet törölnék az összerendelő táblából, aztán a kiválasztott kategóriáknak megfelelően ismét feltölteném.
Na de ez nem lenne sokkal erőforrás-igényesebb művelet? Valóban nem lenne túl sokszor kategória-átrendezgetés, de azért gondolkodom hosszú távon is.
Mondjuk most jobban belegondolva ha azt csinálnám, hogy a feldolgozó fájlban ismét lekérném adatbázisból a kategória-összerendeléseket, és összehasonlítanám a post tömbbel, amiben a bejelölt kategóriák azonosítói vannak, akkor a for ciklusban is lennének if(in_array(...)) és ehhez hasonló ellenőrzések, ráadásul akkor külön kellene figyelni, hogy viszont mi az, ami NINCS benne a korábbi hozzárendelésekhez képest az új kategória-kiválasztásokban, amit meg törölni kell, és akkor lehet, hogy ott vagyok, ahol a part szakad.Vagyis így a hozzászólás végére eljutottam arra a következtetésre, hogy lehet, hogy semmivel nem lenne erőforrás-igényesebb az, ha mindent törölnék, és mindent újra hozzáadnék - itt már az a kérdés, hogy vajon melyik működik gyorsabban, a MySQL törlő és hozzáadó műveletei, vagy a PHP összehasonlítgatásai, majd egy MySQL-törlés illetve -hozzáadás...
Hmm, na ezekkel a különbségekkel mondjuk nem vagyok tisztában, ezt azért nem lenne egyszerű tényleges összehasonlításnak alávetni.De inkább az első megoldás tűnik hasznavehetőbbnek.
Azt hiszem, igazad van abban, hogy ezerszer átláthatóbb és követhetőbb lenne, ha inkább mindent törölnék, majd mindent hozzáadnék a kiválasztottaknak megfelelően.
Ha esetleg valami kommentár eszedbe jutott még a leírtakkal kapcsolatban, akkor örömmel várom.Köszi.
-
Sk8erPeter
nagyúr
Sziasztok!
Egy kis ötletet szeretnék kérni.
Van egy honlap, amin amin egy fotósnak a képei jelennek meg. A képek különböző kategóriákba tartoznak, egy kép akár több kategóriába is tartozhat. Az admin felületen ez mind szépen, grafikus felületen működik (lehet kategóriákat létrehozni, új képet feltölteni, azt akár több kategóriához rendelni, címet megadni hozzá, kategóriát vagy képet törölni, módosítani).
Az adatbázis úgy néz ki, hogy van egy tábla, ahova a kép elérési útja és egyéb adatai (szélesség, magasság, stb.) kerülnek, van egy tábla a kategórianeveknek, és van egy összerendelő tábla, ahova a kép azonosítószáma és a kategória azonosítószáma kerülnek, jelezve, hogy mik tartoznak össze.Egy ponton viszont most elakadtam, lehet, hogy a fáradtság az oka, de most nem jut eszembe, mi lenne a legjobb megoldás:
az admin felületen a kép tulajdonságainak módosításánál az eddig bejelölt kategóriákat checkboxok formájában jelenítem meg, amelyik kategóriához a kép már hozzá van rendelve, oda kerül egy pipa, amelyik kategóriához NEM tartozik a kép, ott nincs pipa.
Azt szeretném megoldani, hogy a felhasználó viszont újabb pipák behelyezésével (más kategóriákhoz), vagy korábbi pipák kivételével tudja módosítani, melyik kategóriákba tartozzon egy adott kép.
Ezt hogy kellene megoldani az űrlap ellenőrzésekor, hogy azokat a rekordokat töröljem az összerendelő táblából, amelyeknél a checkboxoknál korábban volt pipa, de a felhasználó kiszedte (jelezve ezzel, hogy nem szeretné, ha abba a kategóriába is tartozna), viszont azok a rekordok kerüljenek be az összerendelő táblába, ahol korábban nem volt pipa?
A problémám az, hogy milyen módszerrel hasonlítsam össze, hogy hol volt és hol nem volt korábban pipa, mi az, amit törölni kell, mi az, ami új elem.Lehetne
-hidden elemekkel betenni valami inputba azoknak a kategóriáknak az azonosítószámát, amikbe a kép már tartozik, így POST-tal elküldöm, de az gány megoldásnak tűnik
-valami session változóban (tömbben) ugyanezt eltárolni, de ott meg az új checkbox-os POST tömbbel (egy tömbben tárolódnak a kipipált checkboxok) kell mindig összehasonlítgatni, és azt sem tudom, hogy lehetne a legkisebb lépésszámmal megoldani
-meg még azt is lehetne, hogy a kép összes addigi kategória-hozzárendelését törlöm az összerendelő táblából, és az újonnan bepipált értékeknek megfelelően adogatom hozzá az új összerendelést, de az meg már megint nagyon gáz: tegyük fel, hogy mondjuk csak egyetlen helyről kiszedem a pipát, akkor az összes hozzárendelést törli, és adhatja hozzá újra az összeset, ez felesleges munka; ráadásul mi van, ha megszakad valamiért a folyamat, akkor elvesztek az addigi hozzárendelésekTehát egyelőre tanácstalan vagyok, az összehasonlítgatásokra mi lenne a jó módszer.
Nagyon megköszönném, ha bármi jó ötlettel tudnátok segíteni!
-
Sk8erPeter
nagyúr
válasz
DerStauner #4048 üzenetére
Notepad++-t rakd fel, aztán egy új doksiba pötyögd be, hogy
<?php
echo 'Hello World!';
?>
majd mentsd el mondjuk hello.php néven, a telepített WAMP-alapkönyvtár www könyvtárába elhelyezve. (Pl. ha a WAMP-ot a C:\wamp könyvtárba telepítetted, akkor C:\wamp\www könyvtárba pakold.)
Aztán böngésző megnyit, és írd be a címsorba:
http://localhost/hello.php
És látnod kell a szöveget, ha minden jól lett beállítva.Szerk.: csak a félreértések elkerülése érdekében: ez nyilván nem nevezhető még "weblapnak" (csak egy sort írunk ki), a sima HTML-részeket már neked kell hozzáillesztened...
Pl. ha már weblapszerű struktúrát szeretnél, akkor így is megírhatod a hello.php tartalmát (legegyszerűbb példával élve):<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Dokumentumod címe</title>
</head>
<body>
<div style="font-weight:bold;color:red;"><?php echo 'Hello World!'; ?></div>
</body>
</html> -
-
Sk8erPeter
nagyúr
"(Már végigzongoráztam párszor az apache-php-mysql telepítést külön-külön, mindent beállítva, nekem ennyi elég is volt belőle, ezért kerestem olyan csomagot, ami megcsinálja helyettem)"
Én is ugyanezen okból kezdtem el használni a WAMP-ot... Franc fog szarakodni minden újratelepítésnél.A "WAMP saját szemete" nem hinném, hogy túl sok kárt okozna a gépben, nem fosta tele a registry-t sem, azért szerintem ezt nem kell ennyire túlparázni, ráadásul azért is előnyös a WAMP egy kezdő számára (is), mert nem szöveges fájlokban kell kutakodni a megfelelő beállítások után, hanem van egy kellemes grafikus felület a Tálcán, ahol eléred az Apache, a MySQL és a PHP beállításait is.
Az Appserv-et még nem próbáltam, de az alapján, amit elmondtál, meg az alapján, amit a honlapján látok, ehhez nincs ilyen könnyen elérhető és kezelhető grafikus felület.
Nem értem, a WAMP miért lenne rosszabb az Appserv-nél, a WAMP is ugyanúgy az éles környezetet pakolja fel, csak biztosít hozzá még egy plusz felületet, amin a beállítások elérhetők. -
Sk8erPeter
nagyúr
válasz
DerStauner #4037 üzenetére
Használd a WAMP-ot, ezt a lehető legegyszerűbb telepíteni, next-next-finish módszerrel rakhatod fel, és a konfigurálása is könnyű (magához a működéshez viszont nem is szükséges átállítgatni semmit). Aztán a cuccaidat bepakolod a www könyvtárba, és kész vagy, a böngészőben a http://localhost/ cím beírásával már el is éred az oldaladat.
-
Sk8erPeter
nagyúr
Értem én, csak szerintem hülyén tettem fel a kérdéseket.
Úgy tanul a gyerek, ha kérdez.
Egyébként minden témával kapcsolatos hozzászólásoddal inspirációt adtál a saját megoldásomhoz, ezért is kérdezősködtem.
Köszönöm a példát és a válaszaidat, azt hiszem, menni fog.
Persze lehet, hogy még felteszek majd pár kérdést, ha időközben felmerül. -
Sk8erPeter
nagyúr
Áháá, már kezdem kapiskálni.
"Nyilván ekkor kézzel kell hozzáadni a lehetséges nyelveket"
Ez volt a kulcsmondat...Eddig nem igazán értettem, hogy ha nem adatbázisból szeded, akkor mégis honnan, ha csak egy osztályod van... Rögtön gondoltam, hogy valami ilyesmi megoldás, de az elmondásodból először úgy tűnt, hogy mégsem.
Így viszont pont a rugalmasságát veszti el a dolog, ha kézzel kell hozzáadni, nem?
És a gyakorlatban ezt a kézzel való hozzáadást hogy kell elképzelni? -
Sk8erPeter
nagyúr
Mondjuk ha valaki ilyen gyökérségeket csinál, hogy kétbetűs változóneveket ad meg, és még csak nem is kommentezi, vagyis később már ő maga sem fogja érteni a saját kódját, akkor ilyen merényleteket akár más nyelveken is elkövethet.
Amúgy tényleg meglepő, mennyire egyszerűen össze lehet hozni PHP-vel "működő" kódokat, és most, hogy kicsit már talán jobban megy a PHP-zás, mint az elején, rossz visszanézni, miket műveltem eleinte, amikor elkezdtem tanulni a nyelvet, és még mindig nem tudok az egészről semmit.
Mondjuk sokan vannak, akik már egy for ciklustól profinak érzik magukat. Ezzel szemben viszont: "An expert is someone who knows more and more about less and less, until eventually he knows everything about nothing." -
Sk8erPeter
nagyúr
Köszi a példát, még mindenképp tanulmányozni fogom, ha kicsit kiismertem az OOP-t.
Egyébként egész érthetőnek tűnik.
De azért még megkérdezem:
$lang_object->add_language(1,'en');
$lang_object->add_language(2,'hu');
Ez most ilyen default értéket ad, mert a hu és en nyelvekhez nyúlkálsz a legtöbbször, és ha mégis másik nyelvre van szükséged, akkor lekérdezed adatbázisból, de egyébként nincs rá szükség? -
Sk8erPeter
nagyúr
"A nyelvek kezelését egy nyelvkezelő osztállyal oldom meg, amely a konstruktorában betölti a rendszerben található összes nyelvet."
És ez hogyan történik? Nem úgyszintén adatbázisból való lekérdezés segítségével? Mivel most nem arról az esetről beszélünk, hogy fájlban tárolod ezeket az elemeket, ezért máshogy nem tudom elképzelni ennek a megvalósítását, mint ugyanúgy adatbázisból való lekéréssel - de szólj, ha valami más módszer van rá... -, ebben az esetben meg nem nagyon értem, miért lenne "rosszabb" egy joinolás.
Mondjuk C-ben esetleg valami struktúrában tárolnám el pointerekkel és egyéb mókák segítségével az egyszer már megkapott adatokat, rendezve, és ahhoz nyúlkálnék, de itt egyelőre nem tudom elképzelni a megfelelő megoldást, ha az nem lekérdezés.
Ismét csak azért kérdezem, mert ennek a gyakorlati megvalósítására még elég kevés példát láttam osztályokkal (mondom, az OOP-t még csak most fogom tanulni), nem azért, mert "nem tanították az iskolában"...Amiket még írtál, nagyon jó és megfontolandó. Már ebből is látszik, mire jó az OOP-szemlélet.
Köszi.
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
"Az iskolában nem tanították, hogy hogyan kell gráfokat és azon belül fákat reprezentálni?"
Most mit kötekszel?Nem arról volt szó, hogy fingom sincs, mi az a gráf vagy fa, hanem arról, hogy jelen esetben Te hogy oldottad meg a gyakorlatban. Nyilván az egyetemen vagy máshol tanított elméletet csak akkor tudod összekapcsolni a gyakorlattal, ha erre szolgáló feladatot minimum egyszer megoldottál. Az meg még akkor sem biztos, hogy elsőre eszedbe jut, amikor az triviális. Jó, most mondhatod, hogy de neked igenis elsőre eszedbe jutott, de talán ne hasonlítsuk össze a Te webfejlesztésben és programozásban szerzett tapasztalatodat az enyémmel, ahhoz képest én valszeg csúfosan le vagyok maradva...
Szóval érted, ha már akár egyszer láttam olyan megoldást, ahol végre azt érezhetem, hogy az egyetemen vagy akárhol oktatott elméleti dolgok közül tudom hasznosítani a tudást, akkor a homlokomra csapva mondhatom azt, hogy "nahát, akkor ezt az elméleti hátteret erre a feladatra is le lehet képezni!" És onnantól könnyebben megy."Pedig eddig is erről volt szó."
Valóban..."A menü és a menü tartalom táblák között 1:n típusú reláció van. Ha n:m reláció lenne, akkor lenne szükség kapcsolótáblára. Ezt sem tanították az iskolában?"
Ismét kötekedés...de inkább elengedem a fülem/szemem mellett...
A kérdés oka az volt, hogy először úgy képzeltem, hogy a language táblát is azért kell joinolni, mert mondjuk úgy kérdezel le, hogy "... WHERE language.name='en';", és akkor tényleg kellett volna joinolni, mivel akkor különben honnan szeded a nevet? De persze rájöttem, hogy csak simán azonosítószám alapján kérdezel, én meg úgy gondoltam, hogy név (hu, en, de, es, stb.) alapján kissé könnyebb beazonosítani adott nyelvet..."A file-os megoldás azért jó, mert tudsz olyan oldalt készíteni, amelynél a megrendelő saját maga szerkeszthetik a menüt és a menüpontok tartalmát, mégsincs hozzá szükség adatbázisra."
Igen, viszont így megnő az esélye annak, hogy elcseszi a fájlt, és ha nem ért a HTML-hez, akkor néz, hogy miért nem működik. Mondjuk ha úgy van megoldva a dolog, hogy ne legyen benne HTML, hanem mondjuk csak soronként elválasztva a menüpontok, behúzással az almenüpontok, a menüpontokhoz tartozó tartalom meg különálló fájlokban, csupán a fő szövege, vagy valami más megoldással kerülik el a gányolás lehetőségét, akkor ilyen para nincs, de akkor meg már iszonyat macerásnak látszik az egész.
Akkor meg már mondjuk az a kérdés is felmerül, hogy miért is ne használjunk adatbázist a saját életünk megkönnyítésére, és alakítunk ki egy jó admin felületet a megrendelőnek, ahol sokkal szebb felületen tudja szerkesztgetni a menüpontokat és a belső tartalmat. Persze azt is alá lehet támasztani, hogy miért ne, ha akarjuk, de minek. -
Sk8erPeter
nagyúr
válasz
raczger #3976 üzenetére
Uhh, az egyenként való kikeresés helyett nem lett volna egyszerűbb itt megnézni szépen áttekinthetően?
-
Sk8erPeter
nagyúr
Ismét köszönöm az alapos választ.
A DBDesigner-t majd kipróbálom.
Jaaaa, akkor már sejtem a parent_id szerepét. Vagyis ez akkor arra való, hogy adott menüpontnak tetszőleges számú almenüpontja legyen?Na, ez az MVC-szerkezet egyelőre kicsit magas, de remélhetőleg előbb-utóbb csak utána tudok már olvasni, ha lesz rá időm... Amúgy most olvasgatom a PHP fejlesztés felsőfokon c. könyvet, eddig nagyon alapos és hasznos olvasmánynak találom.
"(Tehát a struktúrád működjön tetszőleges számú nyelv esetén)"
Így lesz, mindenképp ki fogom javítani.A menu_content táblában úgy látom, hogy a táblázat mezői közé tartozik a language_id és a menu_id is. De ettől függetlenül valószínűleg mindenképp joinolni kell a language és menu táblát is, hogy ezek azonosíthatók legyenek.
Akkor már nem lenne esetleg jobb/szebb megoldás egy külön összekapcsoló táblát létrehozni erre a célra? Ezt most nem kötekedésként kérdezem, hanem mert érdekelne."Nagyjából ugyanolyan gyors lesz."
Tényleg? Mert ez esetben viszont egyértelmű, hogy az adatbázisban való tárolásnál maradnék, az legalább könnyen és rugalmasan kezelhető, módosítható, különböző szempontok szerint egészíthető ki, nem macerás a jogosultságok beállítása sem, míg mindez a fájlkezelésről azért nem mondható el! Tehát ha azt mondod, hogy nem lesz gyorsabb attól, hogy fájlból olvasom ki, akkor mindenképp maradok az adatbázisnál. -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3962 üzenetére
Tényleg?
Ez eléggé meglepett. Köszi, hogy szóltál.
Azt hittem, épp az a gyorsabb, ha minden megjelenítendő elemet összegyűjtök egy változóba, és aztán csak echo-val kiíratom a HTML-elemek végleges kiíratásakor, így nincs szükség a megjelenítés közbeni esetleges feltételvizsgálatokra, stb.
Ezek alapján viszont alaposan át kell gondolnom, hogy jó-e, hogy egy csomó helyen éppen úgy változtattam meg a kódot, hogy ahelyett, hogy a HTML-elemek között lenne több helyen echo-zás, és esetleg feltételvizsgálat, inkább összegyűjtöttem egyetlen $main_content változóba az egész tartalmat...
Áttekinthetőség szempontjából jó, de ezek szerint éppen, hogy lassabb... Akkor csinálhatom vissza csomó helyen. -
Sk8erPeter
nagyúr
válasz
raczger #3967 üzenetére
htmlentities()
Ha ANSI kódolású a fájlod, akkor a stringen kívül nem kell paraméterezni,
UTF-8 kódolás esetén viszont így:
htmlentities('bláblábléblé',ENT_COMPAT,'UTF-8') -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3948 üzenetére
És esetleg az, hogy már az első HTML-elem (<!DOCTYPE...>) megjelenése után kezdjük el a PHP-s ciklusok és feltétel-elágazások segítségével a kiíratást, nem befolyásolja negatív irányba a megjelenítés sebességét? Nem gyorsabb, ha már előtte "pufferelve" van az összes adat?
-
Sk8erPeter
nagyúr
Hali!
Bocsi, hogy csak most tudok válaszolni, és köszi a válaszodat!A táblakapcsolásokról a képet, amit betettél, milyen programmal generáltad?
"A parent_id mező a menü táblában saját magára mutat, így tudsz tetszőleges mélységű menüt létrehozni. "
Hmm, hogy érted, hogy magára mutat? Mármint ezt MySQL-utasítások tekintetében hogy kellene elképzelni?"A controller mezőben azt tárolom, hogy a menüponthoz milyen tartalom tartozik."
Ez igazából csak egy felsorolás, vagy egyfajta leírás magadnak, hogy mi van benne? Vagy ez az oldalon konkrétan meg is jelenik? Ez számomra most nem teljesen egyértelmű."A menu_content táblában a menüponthoz tartozó szöveges tartalom található."
Tehát ez mindenféle formázást nélkülöz? Mert én arra gondoltam, hogy magát a honlap tartalmát TinyMCE-vel (vagy más JS-es szövegszerkesztővel) lehetne szerkeszteni, és az kerülne bele az adatbázis megfelelő mezőjébe. Egyébként egy oldalamon így csináltam, és elég jól működik.
Csak ott még nem túl elegánsan, kezdőként úgy oldottam meg, hogy a következő az adattábla szerkezete:
tart_id | menupont | tartalma_hun | tartalma_eng | tartalma_pol | tartalma_rus | datum
Ez meg ugye nem túl szép, akkor már jobb lenne, ha tart_id és tartalom elsődleges kulcsok lennének, és akkor aszerint lenne rendezve. Ettől függetlenül jól működik, csak szerintem át fogom variálni, mert így szerintem hosszabb a lekérdezés ideje, amiatt, hogy olyan információ is hozzátartozik a lekérdezéshez, ami abban az esetben teljesen érdektelen (nyilván egyszerre csak egy nyelv szerint kérdezek le).Az az "url" mező mire kell? Hogy tudj a címre önhivatkozó linket készíteni?
A megoldásod, azonbelül a táblaszerkezet és a fa osztály is nagyon okos és rugalmas megoldás. Én egyelőre csak most fogom elkezdeni tanulni az OOP-t a C++-szal, szóval ez a megoldás még kicsit magas nekem, de majd ha eljutok odáig, biztosan így fogom csinálni.
Mellesleg az is eszembe jutott már, hogy simán csak fájlba kellene menteni a tartalmat, amit a felhasználó szerkeszt - vagyis a fájl tartalmát az admin felületen megnyitni, és bedobni egy textarea-ba majd módosításkor felülírni az eredeti tartalmat -, mert a tartalom várhatóan elég ritkán fog változni, így valószínűleg gyorsabb lenne a megjelenítés.
-------------------------------------------------------------------------------------------------------------------------------
(#3949) Tele von Zsinór: neked is köszi a választ.
Igen, a legutolsó módosítás adatai jelen esetben bőven elég.Verziókövetésre jelen esetben nincs szükség, mert viszonylag kevés tartalom lesz az oldalon, nővérem fotózik, és a képei megmutatására készül az oldal (szerencsére a kép feltöltése, akár több kategóriához rendelése, hozzátartozó címek megadása különböző nyelveken, módosítások, törlések, hozzátartozó kapcsolótáblák és egyéb, rendkívül időigényes mókákat már sikerült megírnom).
Hát igen, a menü viszonylag statikus lenne.
De gondoltam már arra is, hogy hozzád hasonlóan egyszerűen úgy töltögetem fel, hogy
1 | en | tartalom | dátum
1 | hu | tartalom | dátum
és így tovább...
De az is jó megoldás, amit cucka mutatott, hogy a nyelv tábla külön lenne, azok megfelelő azonosítóival, hiszen a nyelv tábla esetleg több helyen is kellhet. -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3645 üzenetére
Ezzel kapcsolatban az lenne a kérdésem, hogy eszerint úgy kérdezted le a cikkek elemeit, hogy mondjuk
SELECT * FROM tibia_news
INNER JOIN tibia_news_i18n ON tibia_news.id = tibia_news_i18n.id
AND tibia_news_i18n.culture = 'en'
WHERE tibia_news.user_id = 2 ;
?
Most így ránézésre ez jutott eszembe, korrigálj, ha nem jó.És ezzel kapcsolatban kérdeznék még:
most azt szeretném elegánsan megcsinálni, hogy egy honlap fő tartalma tetszőlegesen módosítható legyen, több nyelven is, a tartalom pedig adatbázisba kerülne, onnan hívnám le. Arra gondoltam, hogy az utolsóként módosító felhasználó nevének eltárolásakor az se gáz, ha ugyanannak a rekordnak egy oszlopában (pl. last_modified_by) lévő tartalmat írogatnám felül az aktuális legutóbb módosító felhasználó nevével.
Amit tárolni szeretnék:
oldal főcíme, nyelv, utolsó módosítás dátuma, utoljára módosító felhasználó neve (ebből mondjuk nem lenne túl sok, max. 2-3, de inkább 2)
Mivel lenne olyan max. 6 menüpont, így nem tudom, érdemes-e egyáltalán azonosítószámot rendelni az egyes menüpontokhoz, vagy elég lenne, ha mondjuk lenne két összetartozó elsődleges kulcs, mondjuk PRIMARY KEY (oldal_rovid_neve, nyelv), vagy ez már gagyibb megoldás?
Kell egyáltalán külön összerendelő tábla ilyen célra, vagy az felesleges?
Mi lenne a "legelegánsabb" módszer?
Nyilván nem az, ha egyetlen sorban, különböző oszlopokban lenne eltárolva minden, hanem akkor már elsődleges kulcsokkal.Köszi az ötleteket előre is!
-
Sk8erPeter
nagyúr
válasz
brunzwik #3941 üzenetére
A Te eredeti problémádhoz nem sok köze van, úgyhogy most nem bonyolódnék fordítgatásokba, de most letöltöttem ezt az SMF cuccost, és abból azt derült ki, hogy az alapból benne lévő menüpontokat, mint Home, Help, Search, Login, stb. a következő helyen lehet átírni:
Themes\default\index.template.php
Nyilván ez nálam azért "default" könyvtár, mert az alapértelmezett stílust használom, de létezik még "babylon", "classic", stb.
Nálad ebben a fájlban a function template_menu() részen belül gondolom nem sokat befolyásol, ha itt átírogatod a menüket, mert alapból a Subs.php fájlodból úgy néz ki, hogy a function setupMenuContext()-ben lévőket használja, ami gondolom valami külön beállításként és más template-tel kerül bele, mert az alapértelmezett csomagban nincs benne. (Nálam csak a "csupasz" verzió van meg, az alapcuccokkal.)Na, de hogy a lényegre térjek, nehéz lenne kideríteni, most konkrétan nálad melyik téma van, melyik függvények felelnek a HTML-es megjelenítésért, ahhoz látni kéne a fájlokat, ezért
inkább próbálj kerülő megoldást, aminek működnie kellene
:
-így add meg a hivatkozást:
'href' => "javascript:window.open('http://blog-skyrpg.atw.hu', '_top');",És szólj, hogy sikerült-e.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3944 üzenetére
Jaa hogy az is saját függvény, akkor még jó, hogy nem találtam...
"Épp csak annyi logika van benne, ami kell - máshogy nem is lehetne mondjuk egy táblázat sorait kiírni, vagy feltétel alapján ezeket színezni."
Én ezt mostanában úgy szoktam megoldani, hogy még a <!DOCTYPE ...> kiíratása előtt "pufferelem" egy változóba, és a megfelelő helyen már csak ezt íratom ki. Ahogy észrevettem, elég gyors.
Ez nem jó? -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3939 üzenetére
Hű, ez számomra ismét új, az echo __(...) működésével még nem vagyok tisztában. Ennek a konkrét működéséről hol tudok utánaolvasni?
Most nem találtam php.net-en.
Ez hogyan lesz többnyelvű?Vagy ez már eleve a behelyettesített szöveg?
Mondjuk az általad linkelt kódban nem csak ez az egy új dolog, de gondolom ez a slot() és url_for() függvény valami saját lehet.
Amúgy a kódban azt nem értem legfőképp, hogy arról volt szó, hogy az alkalmazáslogikát külön kell választani a megjelenítéstől. De ez itt épp, hogy ellenkezőleg van, van itt a HTML-ben foreach, feltételvizsgálat és minden egyéb. Akkor ez nincs különválasztva a megjelenítéstől... -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3937 üzenetére
Hát igen, meg a cikkben tesztelgeti azt is, hogy mi van, ha hozzáfűzünk, az is gyorsabb, mint a behelyettesítés, gondolom mert meg kell vizsgálnia, hol az eleje-vége a behelyettesített változónak, vagy valami ilyesmi.
sprintf() azt mondod, gyorsabb lenne, mint a sima echo vagy print?
Hogy érted, hogy külön kezeled a view réteget? -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3792 üzenetére
Hmm, most végül is használgatom ezt a heredoc-ot, mert kicsit átláthatóbbnak tűnik valahogy a kód, hogy látható, hogy itt az eleje, ott a vége, de meglepődve olvastam ezt a cikket, hogy kicsit lassabb vele a megjelenítés: "Karaktersorozatok sebessége" PHP-ben. Gondoltam jelzem.
Persze pont arra hívja fel a figyelmet a cikk is, hogy kis alkalmazásoknál szinte semmi észrevehető különbséget nem okoz, többet érünk pl. adatbázis-optimalizálással, de nagyobb alkalmazásoknál esetleg megfontolható lehet.
-
Sk8erPeter
nagyúr
válasz
brunzwik #3932 üzenetére
Hali!
Magának az oldalnak a <head> részébe bele tudsz nyúlkálni? Én sem ismerem ezt a portálrendszert, de ha bele tudsz helyezni a <head> részbe saját sorokat (mármint az index.php-be), akkor elvileg Javascripttel is meg tudod változtatni a target részt ([link]).
Innen szedtem az alábbi függvényeket, és kicsit átírtam a feladatodnak megfelelően, és ennek nálad is működnie kell:<script type="text/javascript">
<!--
function targetBlank(event) {
event = event ? event : window.event;
var target = event.srcElement ? event.srcElement : event.target;
while (target.nodeName.toLowerCase() != "a" && target.parentNode != null)
target = target.parentNode;
window.open(target.getAttribute("href"), "_top");
// DOM
if (event.cancelable)
event.preventDefault();
// IE
return false;
}
function targetBlankBind() {
var tags = document.getElementsByTagName("a");
for(var i=0; i<tags.length; i++)
tags[i].onclick = targetBlank;
}
if (window.attachEvent) {
// IE
window.attachEvent("onload", targetBlankBind);
} else {
// DOM
window.addEventListener("load", targetBlankBind, false);
}
// -->
</script>Persze az is lehet, hogy ha már ide bele tudsz nyúlkálni, akkor akár manuálisan is át tudnád írni az a-nak a target-jét, de egy próbát megért.
Meg ezt lehet, hogy könnyebben be tudod esetleg illeszteni.
Amúgy van egy erkölcstelen és esetleg szabályellenes módja is az ATW-n a reklámok kidobálásának
<script type="text/javascript">
<!--
if (top.location != location)
top.location.href = document.location.href;
// -->
</script> -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3927 üzenetére
Ezt én is felvetettem neki, hogy ő egy kliens oldali függvényt ellenőriz szerver oldalon... de ettől még mondjuk mennie kellene a JS-nek, hogy hülyeséget ellenőriz. Mondjuk könnyebb lenne tudni az okát, ha tudnánk, hogy vajon tényleg kijavítgatta-e a felfedezett hibákat, mert ha pl. helyenként rossz ID-kre hivatkozik, akkor könnyen lehet, hogy az a form-kiértékelő függvény mindig hülyeségeket fog adni eredményül.
-
Sk8erPeter
nagyúr
A submit() nevet már kijavítottad?
Amúgy megpróbálhatnád, hogy a submit gombhoz odateszed ezt:
onclick="alert('ez egy felugró ablak')"
és akkor látod, hogy odáig legalább eljut.(Egyébként én úgy tapasztaltam, hogy az esetek nagy többségében a JavaScript-függvények helytelen működését valami szintaktikai hiba okozza. Elég egyetlen helyen elírás, máris bukta az egész.)
-
Sk8erPeter
nagyúr
Még egy dolgot kipróbálhatnál:
pl.
var nick=document.getElementById("nick");
if(nick.value=='' || nick.value.length<4) //ha nincs kitöltve vagy a hossza kisebb 4-nél
{
//stb..
}(#3922) dany27: ehh, de miért akarsz egy kliens oldali dolgot szerver oldali nyelvvel ellenőrizni?
Inkább próbáld ki a Firefoxhoz való Firebugot, ezzel nagyon jól lehet ellenőrizni a JavaScriptes függvények hülyeségét is (ez az egyetlen, ami miatt néha használom a FF-ot, de ez nagyon hasznos). -
Sk8erPeter
nagyúr
Nézd meg a hsz.-emet még egyszer, azóta szerkesztettem is a végét...
Van benne hiba, eleve a függvény neve... Tessék, itt van, az egy JavaScript függvény: [link]. Tehát ezt a nevet (submit() ) felejtsd el.
De egyáltalán kijavítottad úgy, ahogy mutattam?
Hogy ellenőrzöd le, hogy "létezik-e a cucc", és mi mondja azt, hogy nem?(Firebug vagy mi a tököm?)
"Am azért raktam PHP-be mert alá jön majd a feldolgzó, SQL feltöltés...."
Egyrészt ne ALÁ jöjjön a feldolgozó rész, akkor már inkább még a DOCTYPE (nálad a <html> ) ELŐTT legyen egy
<?php /* ellenőrizgetés */ ?><!DOCTYPE ... ,
VAGY küldd ki egy másik feldolgozó fájlnak, majd irányítsd vissza (a hibaüzeneteket vagy sikerüzenetet meg letárolhatod SESSION változóba session_start() indítása után, és kiírathatod az eredeti oldalon), az szerintem sokkal elegánsabb, és jobban át lehet látni utólag is.Szerk.: ja, és egy jótanács: ne kapkodj, mert attól nem oldódik meg. Legalábbis a hsz.-eidet látszólag kapkodva írod, így nem lehet rájönni a hibára...
-
Sk8erPeter
nagyúr
Szerintem inkább ott lesz a hiba, hogy nem jól raktad össze az oldalt, ilyenektől a JS-függvények megőrülnek, nagyon nem díjazzák, egyszerűen nem működnek.
pl. az oldal szerkezete így néz ki alapból:
<html>
<head>
<title>Cím</title>
<meta ... />
<!-- meta tagek -->
</head>
<body>
<!-- ide jöhet a főtartalom -->
</body>
</html>Te pedig így csináltad:
<html>
<head>
<!--itt a JS-függvény -->
</head>
</html>
<!-- ide raktad a főtartalmat, amit PHP-vel generáltál -->Ebből jól látszik, hogy még azelőtt lezártad az oldalt </html>-lel, mielőtt az űrlapot kiírattad volna.
Tehát legyen egy <body> rész, és oda rakd be a form elemeit.
De teljesen felesleges ezt PHP-vel belerakni, ezzel csak lassítod a megjelenítést. Pakold bele egyszerűen HTML-ként.Ezenkívül nem szerencsés név pont a submit()-et függvénynévként választani, mivel ez eleve egy beépített függvénynév, ettől elküldi a formot.
Én a submit gombhoz szoktam inkább tenni egy onclick-be az ellenőrzést.
Ezenkívül kicsit tördeld jobban a kódodat.Áhh, de szerencsére Notepad++-ban csak pár kattintgatás átvariálni kicsit a kódot, inkább megcsináltam
Persze magát a függvényt nem ellenőriztem, abban még lehet hiba.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="hu" xml:lang="hu">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript">
<!--
function form_submit()
{
var nick=document.getElementById("nick").value;
var pass=document.getElementById("password").value;
var pass2=document.getElementById("password2").value;
var email=document.getElementById("mail").value;
document.getElementById("nick").style.backgroundColor="#FFFFFF";
document.getElementById("password").style.backgroundColor="#FFFFFF";
document.getElementById("password2").style.backgroundColor="#FFFFFF";
document.getElementById("mail").style.backgroundColor="#FFFFFF";
submit = true;
if (nick.length<4 || nick.length<40)
{
document.getElementById("nick").style.backgroundColor="#FFDDDD";
submit = false;
}
if (pass.length<6 || pass.length<40)
{
document.getElementById("pass").style.backgroundColor="#FFDDDD";
submit = false;
}
if (pass1!=pass2)
{
document.getElementById("pass").style.backgroundColor="#FFDDDD";
document.getElementById("pass2").style.backgroundColor="#FFDDDD";
submit = false;
}
if (email.length==0)
{
document.getElementById("mail").style.backgroundColor="#FFDDDD";
submit = false;
}
if(submit == false)
{
return false;
}
else
{
return true;
}
}
// -->
</script>
</head>
<body>
<center>
<h2>Regisztráció</h2>
<table align="center">
<form method="POST" action="register.php">
<tr>
<td>Nick Név</td>
<td><input type="text" name="nick" id="nick" /></td>
</tr>
<tr>
<td>Jelszó</td>
<td><input type="password" name="password" id="password" /></td>
</tr>
<tr>
<td>Jelszó ismét</td>
<td><input type="password" name="password2" id="password2" /></td>
</tr>
<tr>
<td>E-Mail</td>
<td><input type="text" name="mail" id="mail" /></td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="reset" value="Újra" />
<input type="submit" value="Regisztráció" onclick="return form_submit();" />
</td>
</tr>
</form>
</table>
</center>
</body>
</html>Egyébként ez inkább JavaScript topicba kellett volna, hogy menjen.
Szerk.:
de most nézegetem a JavaScript-függvényt, az alábbi sornak mi értelme?
if (nick.length<4 || nick.length<40)
Ezt össze lehetett volna vonni így:
if (nick.length<40)
Mivel ha a kisebb mint 4 nem teljesül, akkor átugrik a kisebb mint 40 feltételvizsgálatra.
Ha meg mindenképp kisebb, mint 4, akkor az belefér a kisebb mint 40-be...
Ugyanez vonatkozik a következő sorra, aminek emiatt szintén semmi értelme:
if (pass.length<6 || pass.length<40)Aminek megint nincs értelme:
document.getElementById("nick").style.backgroundColor="#FFFFFF";
document.getElementById("password").style.backgroundColor="#FFFFFF";
document.getElementById("password2").style.backgroundColor="#FFFFFF";
document.getElementById("mail").style.backgroundColor="#FFFFFF";
Ezek így külön tök feleslegesek, inkább pakold bele egy else ágba, mondjuk valahogy így:
if (nick.length<40)
{
document.getElementById("nick").style.backgroundColor="#FFDDDD";
submit = false;
}
else
document.getElementById("nick").style.backgroundColor="#FFFFFF";Ja, meg sokkal szebb és átláthatóbb lenne a kódod, ha egyszerűsítenéd a dolgokat, pl.:
var nick=document.getElementById("nick");
Ezután:
if (nick.value.length<40)
{
nick.style.backgroundColor="#FFDDDD";
submit = false;
}
Tehát itt egyszerűen már csak nick-kel hivatkozol rá, nincs még egy getElementById. -
Sk8erPeter
nagyúr
Tudom, hogy nem Te írtad, nem is azért mondtam, hanem csak segítő szándékból.
És most tényleg sokkal szebben mutat az oldal, sztem hagyd is így!Nem kell az a párszavas levágás az első mondatból...bőven elég a cím. Lehet, hogy az eredeti készítője valami blogmotorszerű cuccból költöztette át a kódot...
-
Sk8erPeter
nagyúr
Nekem ne köszönd, csak vakondkának, csak ő segített érdemben, én nem.
Amúgy szerintem őszintén szólva elég gagyin mutat, hogy így ki van emelve az első néhány szó a bejegyzésből. Még egy blog esetén talán érthető, de itt nem értem, miért nem elég csupán a főcím, ami ott is van. Én ezt úgy, ahogy van, kiszedném a fenébe, dehát ízlések és pofonok... -
Sk8erPeter
nagyúr
És ha mondjuk phpmyadmin felületen megnézed, akkor a szövegek helyesen szerepelnek az adattáblában?
(Mert elsőre csak a sima véletlen elírás jutott eszembe.
)
Mondjuk ha az ékezetekkel lenne valami hasonló para, akkor az könnyen megmagyarázható lenne, hogy nem stimmel a karakterkódolás, és ha UTF-8-ban van fent a szöveg, akkor ilyenkor esetleg egy mysql_query('SET NAMES utf8'); parancs segíthet, meg a doksik megfelelő karakterkódolásra állítása, stb... De így... -
Sk8erPeter
nagyúr
Hát igen, de végül is minden nyelvben lehet ronda, de működő kódot írni.
Azt még nem tudom, fogok-e valaha Perllel foglalkozni, vagy inkább érdemes-e megtanulni. Annyi nyelv van még, amire tuti, hogy szükség van...
Egyébként most olvasgatok az SQLite vs. MySQL témában, és itt azt hozzák ki, hogy "egyszálú" alkalmazások esetén az SQLite még gyorsabb is lehet.
-
Sk8erPeter
nagyúr
"Kezdjük ott, hogy abból a téves feltételezésből indulsz ki, hogy a php kizárólag weboldalak készítésére alkalmas."
Én ilyet sehol nem állítottam, és még csak nem is gondoltam... Persze lehet, hogy így tűnt abból, hogy jelen esetben a honlapszerkesztésre koncentráltam, mivel a srác korábbi hozzászólásaiból ítélve azt mertem feltételezni, hogy weblap készítésén munkálkodik. Ha nem így van, majd ő megmondja."Valójában általános scriptnyelvként is teljesen jó, például százszor inkább ebben írnám a scriptjeimet, mint mondjuk perl-ben."
És mi a gáz a Perl-lel?A válaszokat egyébként köszönöm.
-
Sk8erPeter
nagyúr
Hát ezt tudom, csak érdeklődtem, mert a legtöbb tárhely-szolgáltató biztosít MySQL-hozzáférést, ezért én eddig nem éreztem szükségét az SQLite-nak.
Mik a pro/contra érvek az SQLite mellett/ellen?
Eddig csak annyi érvet tudnék mellette felsorakoztatni, hogy talán épp amiatt, hogy lokálisan tárolódnak az adattáblák, ezért kisebb hálózati forgalmat generál, ezáltal gyorsabb lehet. De tudtommal nagyobb forgalmat már nem képes lebonyolítani. Többek közt azért, mert egyszerre csak egy felhasználó írhatja az adatbázist.
Biztonsági és egyéb szempontok?Pl. egy honlap esetén milyen esetben lehet jobban hasznát venni az SQLite-nak, mint a MySQL-nek, ha feltételezzük, hogy utóbbi szolgáltatás is hiánytalanul rendelkezésre áll?
-
Sk8erPeter
nagyúr
Konkrétan SQLite-nál ezt írják:
"In version 1.0.x of SQLite, a database is just a directory with table files in it. In versions 2.x an 3.x, the database is a single file. Unlike other relation database systems, there is no daemon managing the database, the SQLite API interprets queries and runs them against the file(s) directly. I usually create a directory /usr/local/sqlite/var and create database directories or files there as follows. SQLite database users are equivalent to unix users. Database directory and file permissions dictate what permissions a user has on the database.
mkdir -p /usr/local/sqlite/var
chown testuser /usr/local/sqlite/var
chmod 755 /usr/local/sqlite/var
"
És a következőkben már az adatbázishoz való csatlakozást írja le. Olvasd el.Amúgy hogyhogy SQLite-ot használsz, és nem MySQL-t? Csak kíváncsiságból kérdezem.
-
Sk8erPeter
nagyúr
Ha csatlakozas a függvény neve, akkor minek hozol létre benne egy új táblát is?
Még időben szokj le arról, hogy a függvényeid mást is csináljanak, mint az eredeti feladatuk...
Ráadásul ha még nincs adatbázisod, akkor nehéz lesz nem létező adatbázisban táblát létrehozni.
Amúgy olyan fél perc guglizással lehet találni oldalakat, ahol létrehoznak adatbázist és adattáblát (azt nem tudom, mennyire jók az oldalak, és nem ismerem az SQLite-ot): [link], [link], [link], [link] -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3864 üzenetére
Köszi, amint lesz időm, kipróbálom.
-
Sk8erPeter
nagyúr
És amúgy indexelve vannak valamilyen szempont szerint az egyes mezők?
Pl. cucka írta pont a másik topicban, milyen durva előnyöket nyert ő is az indexeléssel.De majd Ő vagy valaki más biztos megírja a lehetséges megoldást neked.
-
Sk8erPeter
nagyúr
Ennek örülök, szívesen.
Amúgy most látom, hogy bent maradt egy felesleges sor, ami baromságVisszanéztem az előző hsz.-eket, és onnan másoltam ki, aztán maradt benne a
$query = mysql_query("SELECT DISTINCT allatnev, datum, allapot FROM allat_tabla WHERE datum='$mai_nap' AND allatnev='$allatnev' ;")
or die ...sor, természetesen annak így kellett volna kinézni:
$query = mysql_query($query) or die ...
még az előző
$query="SELECT * FROM user_table;";sor miatt, ami az érvényes lekérés.
(Vagy lehetett volna akár röviden
$query = mysql_query("SELECT * FROM user_table;") or die ...
)De ezek szerint észrevetted, úgyhogy akkor semmi gáz.
-
Sk8erPeter
nagyúr
Vegyük azt az esetet, hogy mondjuk a "kedvezmény" mezőben mindössze négy érték szerepelhet:
0 (vagy NULL, esetleg semmi), 15, 25, 30Csak egy lehetséges (közel sem tökéletes, de szerintem működőképes) gyorsmegoldás keretében itt alább úgy csinálom, hogy hidden mezőkkel küldöm el az adott userhez és formhoz tartozó user_id-t, aminél lehet, hogy van szebb megoldás, de most hirtelen ez ugrott be.
A HTML része meg most úgy néz ki, hogy van egy nagy "kerettáblázat", és azon belül formonként külön-külön kis táblázatok, amiknek a mérete a CSS-stílusok meghatározása miatt passzol egymáshoz, így nincs gond a megjelenéssel.
De úgy döntöttem, inkább megmutatom az egészet, hogy én hogy gondoltam kezdve egészen a megjelenítéstől a feldolgozásig, így nem származhat belőle félreértés. A feldolgozó fájlhoz persze a saját szempontjaidat még hozzá kell fűznöd, és az "action"-nél be kell állítanod a feldolgozó fájl elérési útját, amennyiben nem ugyanabban a fájlban dolgozod fel, amiben meg is jeleníted (inkább szerintem küldd ki egy feldolgozó fájlnak!).Tehát maga a táblázat megjelenítése így nézne ki:
<?php
$discount_table=''; //ehhez fogjuk hozzáfűzni a tábla tartalmát, a feltételektől függően, aztán amikor a megjelenítéshez érünk (a body megfelelő részénél), ezt echo-zzuk (print-eljük) - szétválasztjuk a megjelenítést a feltételvizsgálatoktól
$query="SELECT * FROM user_table;";
$query = mysql_query("SELECT DISTINCT allatnev, datum, allapot FROM allat_tabla WHERE datum='$mai_nap' AND allatnev='$allatnev' ;")
or die ("Nem lehet lekérni az adatot a MySQL-táblából.<br />Hiba: ". mysql_errno() . ":". mysql_error() ."<br />");
while( $res = mysql_fetch_assoc($query)){
user_array[]=$res;
}
if( isset($user_array) ) //csak ha már vannak felhasználók a táblában, akkor kezdjük el az egészet
{
$user_array_size=count($user_array); //hány sor van
$discount_table='
<table width="500" border="1">
<tr>
<td>
<table class="user">
<tr>
<td class="user_name">Név</td>
<td class="status">Státusz</td>
<td class="discount">15%</td>
<td class="discount">25%</td>
<td class="discount">30%</td>
<td class="submit_col">Elküldés</td>
</tr>
</table>
';
for($i=0;$i<$user_array_size;++$i)
{
//hozzáfűzzűk a többit, itt jönnek az egyes formok (actionnek a megfelelő fájlt adjuk meg)
$discount_table .='
<form id="form_'.$i.'" name="form_'.$i.'" method="post" action="">
<table class="user">
<tr>
<td class="user_name">'.user_array[$i]['nick'].'</td>
<td class="status">'; //van már beállított kedvezmény?
if( !empty(user_array[$i]['kedvezmeny']) ) //ha már beállítottunk kedvezményt
$discount_table .= 'Ennek a usernek '.user_array[$i]['kedvezmeny'].' kedvezmény jár.';
else
$discount_table .='Még nincs beállítva kedvezmény.';
//folytatjuk
$discount_table .='
</td>
<td class="discount"><input type="radio" name="discount" value="15" /></td>
<td class="discount"><input type="radio" name="discount" value="25" /></td>
<td class="discount"><input type="radio" name="discount" value="30" /></td>
<td class="submit_col">
<input type="hidden" name="user_id" value="'.user_array[$i]['id'].'" />
<input type="submit" name="discount_submit" value="Elküldés" />
</td>
</tr>
</table>
</form>
';
}
//lezárjuk
$discount_table .='
</td>
</tr>
</table>
';
}
else //üres a tábla
$discount_table='Még nincsenek felhasználók!';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Kedvezmények megjelenítése</title>
<style type="text/css">
<!--
.user{
width:600px;
}
.user_name{
width:100px;
}
.status{
width:200px;
}
.discount{
width:40px;
}
.submit_col{
width:80px;
}
-->
</style>
</head>
<body>
<?php echo $discount_table; ?>
</body>
</html>------------------------------------
Aztán maga a feldolgozás LÉNYEGI része (még az esetleges hibaüzenetekkel és egyebekkel ki kellene egészítened, ha szükséges) meg így nézne ki:<?php
if(isset($_POST['discount_submit'])){
$query="UPDATE adatbazisod.user_table SET kedvezmeny = ".$_POST['discount']." WHERE user_id = ".$_POST['user_id']." ;";
$query = mysql_query($query)
or die ("Nem lehet lekérni az adatot a MySQL-táblából.<br />Hiba: ". mysql_errno() . ":". mysql_error() ."<br />");
//további esetleges ellenőrzések, hibaüzenetek, ha kell...
?>---------------
Remélem működni fog!
-
Sk8erPeter
nagyúr
Hali!
Csak ehhez tudni kéne, hogy mit szeretnél update-elni a submit gombbal, ha már eleve fel van töltve a táblába, hogy van-e adott usernek kedvezménye, vagy sincs, és ha igen, mennyi.
Tehát amiután lekérdezted, van-e kedvezmény, és mennyi, minek szeretnél formot elküldeni? Biztos van valami célja, csak nem írtad le.
Amúgy ezek ismeretében nem nehéz. Csak "checked" állapotúra kell állítani az adott radio buttont: [link]. -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3833 üzenetére
"A RewriteBase arra jó, hogy megmondd, a /valami könyvtárban vannak a dolgaid, és ezt vegye figyelembe a többi szabálynál."
Igen, köszi, ezt tudom, de nem épp ugyanerre való a sima HTML-es <base> tag is?Pl.:
<base href="http://akarmioldal.hu/mindenfele" />
ILLETVE
.htaccess-ben:
RewriteBase /mindenfeleA kettő nem ekvivalens egymással?
Szerk.: rájöttem, hogy valszeg hülyeséget kérdeztem, mert a RewriteBase konkrétan csak a szabályra vonatkozik, a <base> meg inkább arra, hogy pl. adott oldalon hol keresgélje a képeket, stb., amiknek relatív elérési utat adtunk meg.
De pontosítsatok, ha valamit rosszul mondok. -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3830 üzenetére
Hali!
A RewriteBase / sor nem ugyanerre való a .htaccess-ben?
Legalábbis ebben a cikkben ezt írják:
"Lényegében ezzel a sorral azt mondjuk meg, hogy a szabályaink úgy értendők, hogy a http://www.domainunk.hu/ címet tegye elé, onnantól meg majd mi megszabjuk jól, hogy mit akarunk (lásd: RewriteRule). Ha pl. azt szeretnénk, hogy a "/nevem" könyvtárra vonatkozó URL-eket vegye csak figyelembe a Rewrite, akkor természetesen "RewriteBase /nevem" a helyes megoldás (és a htaccess-t is ebbe a könyvtárba kell tennünk)."Még egy kérdés a .htaccess-ről:
Az alábbi sorra:
<IfModule mod_rewrite.c>
azt írja a cikk, hogy "Egyszerű feltétel, azaz ebben a blokkban szereplő bejegyzéseket, csak akkor szeretnénk, ha értelmezné a webszerver, ha a rewrite modul be van töltve, különben hagyja az egészet figyelmen kívül. "
De ha esetleg nincs betöltve a modul, akkor nekünk külön el kell intéznünk, hogy attól még értelmezze a címet, tehát ne legyen az, hogy a júzer beírja, hogy oldal.hu/lap/nyelv, és nem jön elő semmi, mert nem értelmezi GET értékekként. Akkor ennek ellenőrzésére ugyanúgy szét kéne bontani az URL-t az explode() függvénnyel?
Egyáltalán elő szokott fordulni olyan eset, hogy a szerveren nem tölthető be a modul, vagy ezt jellemzően nem kapcsolják ki? -
Sk8erPeter
nagyúr
Ez MySQL-lel nagyon egyszerűen megoldható.
Minden vásárlás után feltöltesz egy adattáblát a naplóval, és egy különálló táblában meg tárolhatod az eddig elért pontjait, amit minden vásárláskor egyszerűen csak növelgetsz +100-zal.
De ezt így általános nem lehet megmondani, hogy hogyan kell csinálni, kicsit hosszadalmas lenne példafeladatot írni, inkább jobb lenne, ha mutatnál egy kódrészletet, akár egy formot, amit a vásárláskor el kell küldeni, mert akkor az ott található $_POST értékekkel kell feltölteni az adatbázist.
A phpmyadmin felületen létre kell hoznod a táblát a vásárlások nyilvántartásához, meg egyet az elért pontokhoz. Ez elég egyszerű, de jó lenne, ha tudnánk, mondjuk eddig hol tartasz - pl. létrehoztad-e már az űrlapot, amivel vásárolni kell, esetleg az már működik-e rendesen, stb. -
Sk8erPeter
nagyúr
Mi az, hogy "ha minden php blokknál meghívja a self részt"?
Az if(!isset ($_POST['tipp'])) sorral ellenőrzöd, hogy elküldték-e a formot, ha még nem (tehát még nem volt tipp), akkor a kiírandó üzenet az üdvözlés. Egyéb esetben meg már elküldték a formot, és itt ellenőrzéseket végzünk (kisebb-nagyobb-egyenlő), és ennek megfelelően állítjuk be az $uzenet változó tartalmát.
A $probalkozasok változó növelgetését is ki kellene még azért egészíteni valamivel (legalább egy feltétellel), mert nem túl szép, hogy első meghíváskor (amikor még nyilván nincs beállítva a $_POST érték) egy definiálatlan változó értékét adod át, és azt próbálod növelgetni. -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3792 üzenetére
Jé tényleg, ez nem tudom, hogy kerülte el eddig a figyelmemet, köszi szépen, áttanulmányozom.
-
Sk8erPeter
nagyúr
válasz
Krszti1660 #3787 üzenetére
De mi a pontos hibaüzenet? A teljes hibaüzit másold be.
Szerk.: ja, és ha bemásolsz valami programrészletet, akkor mindenképp használd a "Programkód" gombot! Arra találták ki, hogy átláthatóbb legyen a kód!
Kijelölöd a kódrészletet, és megnyomod a Programkód gombot, ennyi a dolgod. »»»[link] -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3781 üzenetére
Egyetértek, az include-olandó cuccot az elején kell megvizsgálni, én úgy szoktam, hogy még a DOCTYPE előtt megnézem a $_GET értékét (ha épp attól teszem függővé az include-olást), és attól függően pakolom bele az elérési utat meg címet meg hasonlókat egyes változókba (pl. egy $file_to_include változóba) vagy tömbbe, amit aztán az oldalnál már a <body> részben include-olok, és itt akár lehet kapásból fájlvizsgálatot is végezni (létezik-e egyáltalán, stb.). Nem tudom, hogyan lehetne ennél szebben.
Mit csinál másként a smarty?
Most a WAMP telepítése után megnéztem az alapértelmezett index.php fájl tartalmát, ott mondjuk számomra új dolgot csinált, hogy a változókba a következőhöz hasonlóan pakolja bele fájlok tartalmát:// images
$pngFolder = <<< EOFILE
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAABhlBMVEX//v7/..................
==
EOFILE;(A sok pont helyén persze még sok-sok karakter van.)
Aztán a kép kiíratásakor csinál egy ilyet:header("Content-type: image/png");
echo base64_decode($pngFolder);
exit();Vagy a másik, ha nem képet jelenít meg, hanem az oldal tartalmát, akkor azt így csinálja:
$pageContents = <<< EOPAGE
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="en" xml:lang="en">
<head>
...........
</body>
</html>
EOPAGE;(A sok pont helyén ismét a többi tartalom)
Aztán csak simán a következő sor jön:echo $pageContents;
Nem lehet, hogy valahogy így csinálja a smarty is? Mert akkor ezzel az include parancs helyett el lehetne érni, hogy csak egy sima echo utasítást adj ki, és akkor a megjelenítést nem kevered az alkalmazáslogikával.
Egyébként erről az <<< EOFILE és <<< EOPAGE cuccokról miért nem lehet semmiféle leírást találni a php.net-en?
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3774 üzenetére
Oké.
Az igaz, hogy nem szabad keverni a kettőt, de én pl. megmondom őszintén, nem tudom, hogy PHP-vel való megoldás esetén hogy lehetne elkerülni azt, hogy pl. a <title> rész úgy változzon, hogy nincs benne legalább egy <?php echo $title; ?>, vagy ehhez hasonló...
(JavaScripttel is meg lehet oldani a címváltoztatást, és akkor nem kell belerakni, de itt most a PHP-s megoldás a kérdés.) Gondolom ez nem igazán elkerülhető. De itt nyilván arra gondoltál, hogy akkor a szükséges feltételvizsgálatokat, változók beállítgatását meg hasonlókat végezzem el még a <html> kiíratása előtt, ne a kiíratás közben, ugye? Mert akkor egyetértek, de az előbbit tényleg csak azért írtam meg úgy, ahogy, hogy látható legyen, mit miért teszek be oda, ami esetleg teljesen kezdőnek nem triviális.
Amúgy az include-olásokra vonatkozó feltételvizsgálatokat szerintem nem mindig kell elválasztani, mert adott esetben épp akkor lesz nehezebben áttekinthető a kód, nem? Legalábbis gondolom a betöltés gyorsaságán vagy a script lefutásán semmit nem javít, ha esetleg már az elején megvizsgálgatom, hogy melyiket is kéne include-olni (pl. ha egy $_GET változótól teszed függővé). De cáfolj meg, ha nem így van.
(nekem is bőven van még mit tanulnom, én is kezdő vagyok, ezért jó, ha ezeket elmondjátok)
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3758 üzenetére
Amit írsz, csak azért nem értem, mert itt semmiféle adatbázishoz, sütihez vagy ehhez hasonlóhoz való nyúlás nem történt, sessionről sem volt szó, hanem egy totálisan leegyszerűsített-lebutított megoldást mutattam, de nem értem, miért ne működne abban a formában. Az igaz, hogy a <title>-től külön kellett volna választanom az $oldal változónak való értékadást, meg akár rakhattam volna tömbbe is a kiírandó címet és a hozzátartozó oldalt is, de direkt oda is írtam, hogy ez csak hirtelen ötlet volt, ezen még lehetett volna csiszolni. De azt hiszem, maga a probléma komplexitása nem ért meg ennyit, mivel igen egyszerű feladatról volt szó... Ezenfelül az volt az oka, hogy így csináltam, hogy látható legyen, mihez mi tartozik, mea culpa...
Azt meg, hogy szándékosan kihagytam a DOCTYPE-ot, azt hittem, nem kell szájba rágni, mivel csak a struktúráját akartam megmutatni a dolognak, a nyitó <html>-től a záró </html>-ig. Ilyen alapon a meta tageket is kihagytam...
Az include részt meg pl. nem értem, Te hova tennéd... Netán azt is a fejléchez?
Ezenkívül az általad írt dolgokkal maximálisan egyetértek, de nem értem, hogy jön ez ide, ráadásul miért nekem mondod, hogy használjak template motort...Amúgy se világos, minek kéne egyszerű oldalra template motor, ha meg lehet írni sajátkezűleg is a hozzá szükséges kódot.
Kicsit olyan, mintha szerinted valami nagyon komplex kódot írtam volna meg működésképtelenre, pedig szerintem nem ez történt... -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3756 üzenetére
Na várj, úgy tűnik, késő van, de nem fogom fel, hogy kevertem a megjelenítéssel? Az igaz, hogy a címben (a title) résznél adtam értéket az $oldal változónak, meg hasonlók, de fel is hívtam a figyelmet, hogy ez egy nagyon leegyszerűsített példa, de adott esetben működhet. Akkor az jutott eszembe, nyilván nem tökéletes, de gondoltam segítségnek jó lehet. Ha ennél jobb ötleted van, akkor ne tartsd magadban, konkretizáld, írd le, mire gondoltál, ne körülírd.
-
Sk8erPeter
nagyúr
Hű, kicsit túlbonyolítod.
<html>
<head>
<title>Üdv az oldalamon! - <?php
switch ($_GET['KV'])
{
case 'kapcsolat': echo 'Kapcsolat'; $oldal='pages/contact.php'; break;
case 'rolam' : echo 'Rólam'; $oldal='pages/my.php'; break;
default : echo 'Főoldal'; $oldal='pages/home.php'; break;
}
?>
</title>
</head>
<body>
<?php
if( is_file($oldal) )
include_once($oldal);
else echo 'Nincs ilyen fájl!';
?>
</body>
</html>Még nyilván ennél van szebb megoldás, de most elsőre ez jutott eszembe.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #3743 üzenetére
NE használd a $HTTP_GET_VARS-t, helyette használd a $_GET['akarmi'] (ha GET method-ot használsz, akkor értelemszerűen ezt) és $_POST['akarmi'] változókat!
Ezenfelül
method"GET"
részből hiányzik az egyenlőségjel, helyesen:
method="GET"
de hogy XHTML szabványos legyen:
method="get"Ne csodálkozz, hogy ez nem működött.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #3740 üzenetére
Sok minden nem működik már abból, amit a "Tanuljuk meg a PHP4 használatát 24 óra alatt" c. könyvben elmondanak, ráadásul sok benne a hiba, ami miatt egyszerűen nem működnek az ott leírt programok, vagy ha igen, akkor helytelenül (persze nem jelenti azt, hogy az egész könyv minden programja hibás, mert van jópár hasznos dolog). A könyv olyan szempontból hasznos, hogy ha nincs korábbról programozói gyakorlatod, akkor elmondja az alapokat is, hogy mi az a tömb, mi az a függvény, stb., ezt elég egyszerűen, konyhanyelven elmondja, arra jó lehet. De ne onnan tanuld meg a PHP alapjait, hanem inkább nézz szét neten, php.net-et olvasgasd, Weblaboron is vannak hasznos cikkek, és még számos más helyen.
Érdemes inkább alkalmazkodni az aktuális verziókhoz, és azt tanulni, mert ha beleversz a fejedbe olyan dolgokat, amik az aktuális verziókban már nem működnek, akkor sokat szívhatsz vele. Ja, és leginkább ne olyan komolytalan helyeken próbálgasd, mint az atw.hu, ahol képtelenek már lecserélni nem tudom, mióta azt a PHP-verziót, meg még az UTF-8 támogatottság sem létezik...
A PHP-Script.hu-n mindig vannak érdekes elírások vagy helyesírási hibák, pl. nem tudom, mi értelme van annak a mondatnak, hogy "Szép elrendezésű, is szép design-ű mappalistázó."
-
Sk8erPeter
nagyúr
válasz
Speeedfire #3733 üzenetére
"mondjuk arra kiváncsi lennék h az atw milyen verziókat futtat, nem hinném ha 4.x.x verziójú php-t"
De igen, 4.3.5 verzió van fent...Elég gáz a részükről...
Készíts egy php kiterjesztésű fájlt, az alábbi tartalommal, majd töltsd fel ATW-re:
<?php echo phpversion() ?> -
Sk8erPeter
nagyúr
válasz
Speeedfire #3731 üzenetére
Ez tényleg érdekes, de konkrétan melyiknek a korábbi verziója oldotta meg? Ha pl. most PHP-ből felraksz egy későbbi változatot, akkor megint nem megy?
-
Sk8erPeter
nagyúr
válasz
Speeedfire #3726 üzenetére
Lehet, hogy érdemes lenne megpróbálnod elölről telepíteni az egészet.
Én ez alapján csináltam meg még régebben a telepítést, és semmi gond nem volt: Apache és PHP telepítése kezdőknek Windows rendszereken (Weblabor)
Mondjuk a nagy részét nem is volt türelmem elolvasni, úgyhogy aztán megcsináltam magamtól, de nem volt vele para.
Az Apache 2.2 könyvtárába, azonbelül a htdocs könyvtárba pakolászom a futtatandó dolgaimat, és ennyi. Arra már nem emlékszem, kellett-e buherálni a php.ini-ben, szerintem nem. -
Sk8erPeter
nagyúr
Szívesen! De mondjuk hozzá kell tenni, hogy ezt csak sebtiben írtam, úgyhogy bőven lehetne kiegészítgetni, csiszolni, csak valami útmutatónak szerettem volna, hogy én valahogy így csinálnám, aztán persze ötszáz másik megoldás is lehetséges.
Majd írd meg ugyanitt, ha elakadtál! -
Sk8erPeter
nagyúr
válasz
Speeedfire #3723 üzenetére
Tudom, hülye kérdésnek tűnik, de hátha esetleg elfelejtetted, szóval php kiterjesztésűek a fájlok, amiket futtatsz?
(pl. index.php és nem index.html)
-
Sk8erPeter
nagyúr
Ezt eddig is értettem...
De talán nem ártana, ha valami konkrétumot is írnál, hogy mik az eddigi elképzeléseid, milyen struktúrával alakítottad ki az adattáblákat a feladathoz, és ehhez hasonlók... Most én is írhatok "darab kódokat", amik hirtelen bevillannak, de azzal nem biztos, hogy előrébb jutsz, mert nem kötődik konkrétan a Te elképzelésedhez/kódodhoz/adatbázisodhoz...
$mai_nap = /* a mai nap */;
$allatnev = 'Pistike';
$res = mysql_query("SELECT DISTINCT allatnev, datum, allapot FROM allat_tabla WHERE datum='$mai_nap' AND allatnev='$allatnev' ;")
or die ("Nem lehet lekérni az adatot a MySQL-táblából.<br />Hiba: ". mysql_errno() . ":". mysql_error() ."<br />");
$res = mysql_fetch_assoc($query); //valszeg csak egy sor lesz, nem kell ciklus...
if( $res['allapot']=='megetetve' )
echo 'Már kapott kaját!';
else
echo 'Adj neki zabálni! :-)';Ez csak hirtelen ötlet, csak szemléltetésképp...
És a megetetést sem tudom, hogy oldod meg, ha formmal, akkor lehetne ez alapján egy letárolás...
if( isset($_POST['kaja']) )
//adatbázisba letárolás
;És így tovább.
Bocs, hogy segíteni próbáltam... -
Sk8erPeter
nagyúr
Ne csodálkozz, ha így nem megy, mert az $i változónak adod a MySQL utasítást, de lekérdezést a mysql_query() függvénnyel nem hajtasz végre.
Nem ártana tudni, mi az a "SELECT amivel le kérdezem akaját", mert akkor talán érdemben is tudnánk segíteni... Nem tudom, mit akarsz ellenőrizni ennél a résznél.''UPDATE
ez mi? két egymás utáni sima aposztróf? Mert azt is helytelen... Döntsd el, hogy macskakörmöt (") vagy aposztrófot (') akarsz használni.
Na meg egyszer ezt írod: 'kaja'+10 utána meg 'kedv+10' (az egész kifejezés aposztrófban)... Egyáltalán ez így nálad ebben a formában működik?Az sem derült ki eddig...
Kicsit próbáld meg egyértelműbben vázolni a helyzetet.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #3710 üzenetére
Hogyan kezded a php kódot?
Ha így:
<?
akkor próbáld meg ezzel:
<?php
Mert tudtommal engedélyezni kell az előbbi megoldást, lehet, hogy ez nálad nincs beállítva.
Csak első tipp. -
Sk8erPeter
nagyúr
válasz
Speeedfire #3706 üzenetére
Mit jelent az, hogy "nem mutatja megfelelően a tartalmat"? Egyáltalán fut a php? A htdocs könyvtárba pakolod a megjelenítendő cuccot?
-
Sk8erPeter
nagyúr
Olyan szó nincs, hogy "meg etet", én csak olyat ismerek, hogy "megetet" (egy szó).
Mi értelme van annak a kódnak, amit írtál? Az $i változónak megadod az 5 értéket, aztán leellenőrzöd, hogy 5-e az értéke. Nyilván az lesz, miután azzal inicializáltad...
Eleve nem értem a kérdésed. Ha a júzer megetette az állatot, akkor állításod szerint ezt el is tárolod adatbázisban, hogy aznap már etetett.
Ha leellenőrzöd az adatbázisban, hogy adott napra született-e olyan bejegyzés, miszerint már kapott kaját az állat, akkor meg is kapod a választ: ha már van ilyen bejegyzés, akkor kiírod az ennek megfelelő üzenetet ("ma már megetetted a kedvencedet"), ha nem, akkor figyelmezteted, hogy etesse meg (vagy ahogy akarod), és ha megetette, akkor ezt letárolod adatbázisban.
Elég, ha az adatbázis-műveletekkel szórakozol, és az adatbázis bejegyzéseit ellenőrizgeted, ehhez nem kell számokat beállítgatni, és azt ellenőrizni, aminek épp előtte adtál értéket. -
Sk8erPeter
nagyúr
válasz
Fecogame #3704 üzenetére
De, kell változtatni, mert hiányos volt az eredeti kód: kimaradt egy sor:
<script type="text/javascript">
function clearForms()
...
Az első sor a lényeg, anélkül nem működőképes.A <script> résztől a </script> részig másold be a kódot az oldalad forráskódjának <head> részébe, még a bezáró </head> elé.
Hátha így érthetőbb.
És aztán ahogy sonar írta, a </head> utáni résznél következik az alábbi sor:
<body onLoad="clearForms()" onUnload="clearForms()"> -
Sk8erPeter
nagyúr
válasz
akopacsi #3695 üzenetére
mysql_num_error ??
Miért nem a mysql_num_rows() függvényt használod? -
Sk8erPeter
nagyúr
válasz
misirulez #3692 üzenetére
Utóbbi kérdésre már a másik topicban válaszoltam.
-
Sk8erPeter
nagyúr
És hova menti a program a file-odat? Külső forrásból próbálsz megnyitni fájlt? Vagy nem értem az egészet, hogyan működteted. Kitömörítesz egy fájlt, lemented, és meg akarod nyitni? De nem értem, miért nem férsz hozzá később, hogy megjelenítsd a fájl tartalmát? Számomra nem világos abból, amit leírtál.
-
Sk8erPeter
nagyúr
válasz
Fecogame #3671 üzenetére
most nem tudom, ezzel mit akartál mondani, mivel konkrét kérdésed/hozzáfűznivalód nem volt, így nem tudom, világos-e, mit is kéne nagyjából csinálni. Ha nem, akkor ennél kicsit egyértelműbben jelezd.
Ha azt mondod, ez így jó, és még kiegészíted plusz egy sorral, akkor kiírja az elküldött üzenetet:
if($send_contact){
echo "We've recived your contact information";
echo $message;
} -
Sk8erPeter
nagyúr
válasz
Fecogame #3666 üzenetére
Ez egy táblázaton belüli táblázat? Mert ha nem, akkor az elejére felesleges az a <td>. Egyébként így átláthatatlan a kódod, kissé szétszedve:
<form name="form1" method="post" action="send_contact.php">
<table width="100%" cellspacing="5" cellpadding="3">
<tr>
<td>Neved:</td>
<td><input name="name" type="text" id="name" size="50"/></td>
</tr>
<tr>
<td>Email:</td>
<td><input name="customer_mail" type="text" id="customer_mail" size="50"/></td>
</tr>
<tr>
<td width="16%">Tárgy:</td>
<td width="82%"><input name="subject" type="text" id="subject" size="50"/></td>
</tr>
<tr>
<td>Üzeneted:</td>
<td><textarea name="detail" cols="50" rows="4" id="detail"></textarea></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Küldés"/></td>
</tr>
</table>
</form>Az előző hsz.-edben lévő PHP-kód működik egyáltalán?
Mert ott sehol nem látok $_POST változókat. Meg eleve értelmetlennek látszik a változók értékeinek ide-oda adogatása egy másik változónak, mint pl.
$subject ="$subject"; (ez totálisan értelmetlen),
$message="$detail";
stb.
Ehelyett elég lenne olyasmi, hogy pl.
if( !isset($_POST['subject'] ) ){
//hibaüzenetek, esetleg $_SESSION változónak átadva...
}És így tovább, aztán átirányítás az eredeti fájlba (vissza a send_contact.php fájlBÓL), $_SESSION változók ellenőrzése, ha van benne valami (isset), akkor kiíratjuk (akár a hibaüzenetet, akár a sikerességre utaló üzenetet. Nehéz általános receptet adni, mindenki másképp csinálja...
Pl. azt is lehet, hogy kiírd magát az üzenetet, hogy
if( isset( $_SESSION['success'] ) )
echo $_SESSION['message'];Persze ez csak akkor igaz, ha a $_SESSION['message'] változónak átadtad az üzenet tartalmát...
Most lehet, hogy totál érthetetlennek tűnik, amit írtam, írj, ha nem világos...
-
Sk8erPeter
nagyúr
válasz
chubby1980 #3661 üzenetére
Őszintén szólva nem értem, miért zárja ki az általad vázolt dolog a sima CSS-es megoldást, és miért kell ehhez frame-eket használni...
Bár nem is nagyon ismerem a működését a honlapodnak, de ha van egy bejelentkező felület, és ott ki lehet választani, hogy adminként vagy mezei júzerként akarsz belépni, VAGY akár felhasználónév alapján azonosítod az illetőt, hogy neki milyen jogai vannak az oldalon, akkor egyszerűen más menüt jelenítesz meg számára, azt is lehet include-olni, legfeljebb egy loginellenőrzést még külön a fájlba is raksz (amit meg lehet oldani egy sorral is, ha az ellenőrzés mondjuk egy külön függvény feladata), hogy ha valaki neadjisten közvetlenül a menü fájlját nyitná meg, abban az esetben is legyen logincheck; VAGY egyszerűen átirányítod a megfelelő oldalra, ha külön a menüfájlt nyitották meg. Na ez most jó hosszú mondat lett, de remélem érthető volt, mire akarok kilyukadni.
A Word amúgy sem honlapszerkesztésre való, sőt.
Ha az egyes böngészőkben máshogy néz ki a honlap, az csak próbálkozással deríthető ki, és adott esetben böngészőspecifikusan kell játszadozni a stíluselemekkel. Az IETesterrel egyébként a különböző IE-verziók szerinti megjelenítést tudod tesztelni, hogy ne kelljen szórakozni egyes verziók párhuzamos telepítésével vagy virtuális oprendszerrel, amin tesztelsz. Meg léteznek még módszerek bőven, amivel gyorsítható a különböző böngészők tesztelése. -
Sk8erPeter
nagyúr
válasz
chubby1980 #3654 üzenetére
Erre frame-eket használni a lehető legrosszabb megoldás, épp amiatt, amivel Te is szívtál. Amúgy is kényelmetlenül kezelhető, egyes böngészőkben sokszor máshogy jelenik meg, stb., érveket ellene bőven lehetne találni.
Akkor már használj olyan jellegű megoldást, amit mondjuk itt is látni, és NEM FRAME-ES! »» http://www.w3.org/Style/Szerk.: ja, amúgy szerintem a menüt érdemes PHP-vel include-olni, ha könnyen szerkeszthetővé és átláthatóvá akarod tenni a dolgot, esetleg több helyen is felhasználod, így szétválaszthatod az egyes tartalmakat, és hasonlóan a frame-ekhez, külön-külön tudod kezelni a fájlokat.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3645 üzenetére
Az utóbbi INSERT rész hogyhogy nem írja fölül az előzőt?
Lehet, hogy most valamit csak benézek.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3638 üzenetére
Köszi! De nem szoktam egyébként Firefox-ot használni, mert azonkívül, hogy létezik hozzá a Firebug meg egy-két hasznos addon, szerintem egy rakás sz@r.
A leglassabb és legbugosabb a jelenleg gépemen lévő böngészők közül (még az IE8-at is gyorsabbnak találom pl. indulási sebességben, az pedig már meglepő.
Chrome-ot és Operát használok, tapasztalataim szerint jelenleg ezek a leggyorsabbak és számomra legkényelmesebbek. (Persze van, aki Chrome esetében ilyenkor azzal jön, hogy rakjak rá addonokat, akkor már nem olyan gyors, dehát nem kell telepakolni, és akkor nincs ilyen baj.
)
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #3639 üzenetére
Hopp, a formcheck() függvénynél az utsó sorokat véletlenül nem tettem programkódba.
Új hozzászólás Aktív témák
Hirdetés
- EA Sports WRC '23
- OLED TV topic
- Nintendo Switch 2
- Azonnali VGA-s kérdések órája
- Stellar Blade
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Mibe tegyem a megtakarításaimat?
- A holnap határán: itt van minden új Galaxy promóképe
- Luck Dragon: Asszociációs játék. :)
- További aktív témák...
- SAMSUNG 1TB 990 PRO M.2 NVME PCI-E 4.0 x4 - Új - 7450-6900 MBs - Eladó!
- Thinkpad T14 Gen4 14" FHD+ IPS i5-1345U 16GB 256GB NVMe magyar vbill gar
- L14 Gen1 27% 14" FHD IPS Ryzen 5 4500U 16GB 256GB NVMe ujjolv új akku gar
- Thinkpad T14s Gen3 14" FHD+ IPS i5-1245U 16GB 256GB NVMe IR kam gar
- X1 Carbon 12th 14" FHD+ IPS Ultra 7 155U 32GB 512GB NVMe ujjlolv IR kam gar
- DDR3 BAZÁR! 8GB 16GB 1333MHz 1600MHz 2400MHz DDR3 memória garanciával hibátlan működéssel
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- Bomba ár! Lenovo X1 Yoga 2nd - i7-7G I 8GB I 256SSD I 14" WQHD I HDMI I W11 I CAM I Garancia!
- Okosóra felvásárlás!! Samsung Galaxy Watch 6, Samsung Galaxy Watch 7, Samsung Galaxy Watch Ultra
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest