- bambano: Bambanő háza tája
- M0ng00se: Hardvert áruhitelre?
- Luck Dragon: Asszociációs játék. :)
- Magga: PLEX: multimédia az egész lakásban
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- btz: Internet fejlesztés országosan!
- Mr Dini: Mindent a StreamSharkról!
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
Új hozzászólás Aktív témák
-
Speeedfire
félisten
válasz
Sk8erPeter #6395 üzenetére
Sk8erPeter & Tele von Zsinór: Köszönöm mindkettőtöknek, így utólag belegondolva pedig logikus és érthető is a dolog, nem értem miért nem értettem meg eddig.
Úgy néz ki nálam a hülyülés már korábban kezdődik mint kellene... -
j0k3r!
őstag
Sk8erPeter es Tele von Zsinór koszonom szepen.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6395 üzenetére
Remek leírás, szép
@j0k3r!: a __call megkapja, milyen nevű függvényt akarsz meghívni és milyen paraméterekkel - aztán függvényen belül eldöntöd, mit akarsz ezekkel az adatokkal kezdeni. Valóban el lehet érni, hogy kívülről úgy nézzen ki, mintha túlterhelted volna, de ez nem változtat azon, hogy a php nem képes overloadingra. Default paraméterekkel lehet trükközni, de a gyenge típusosság miatt (egyelőre) nincs jobb.
@Speeedfire: akkor nézzük sorról sorra:
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}Van olyan tulajdonság amit be akar állítani? Ha nincs, akkor bizony hiba, és kész vagyunk.
Van olyan függvény, hogy "tulajdonságnévLekerdezes"? Ha igen, meghívjuk, és visszaadjuk, amit visszaad. Ha pedig nincs, akkor a tömb megfelelő indexű elemét adjuk vissza.A beállítás ezzel analóg logikával működik, csak ott nem visszaad, hanem beállít, és így a call_user_func() függvénnyel paramétert is átad.
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #6395 üzenetére
Korrigálnám magam annyiból, hogy tulajdonképpen valamilyen szinten mégiscsak "létrehoz" dinamikusan függvényeket a PHP, a lényeg:
http://php.net/manual/en/language.oop5.overloading.php
"Overloading in PHP provides means to dynamically "create" properties and methods. These dynamic entities are processed via magic methods one can establish in a class for various action types.The overloading methods are invoked when interacting with properties or methods that have not been declared or are not visible in the current scope. The rest of this section will use the terms "inaccessible properties" and "inaccessible methods" to refer to this combination of declaration and visibility.
All overloading methods must be defined as public."
Mellesleg most látom, hogy tulajdonképpen Tele von Zsinór már korábban leírta tömörebben a lényeget.
Na sebaj, elmondtam másféleképpen.---
(#6396) j0k3r!: pont a fentebb linkelt oldalon mutatják be a __call használatát!
-
j0k3r!
őstag
válasz
Sk8erPeter #6395 üzenetére
ha mar belementunk az oop php-be, akkor en is kerdeznek egyet. valahol azt hallottam (olvastam), hogy a magikus __call() al lehet fuggvenyt tulterhelni (amit egyebkent a php-ban azthiszem nem lehet).
a kerdesem az, hogy ezt szoktatok-e hasznalni? egyatalan lehet-e ilyet? (vagy csak en emlekszem rosszul) -
Sk8erPeter
nagyúr
válasz
Speeedfire #6394 üzenetére
"van-e az adott néven ilyen függvény, ha van akkor meghívja ha nincs akkor elkészíti"
Nem készít el semmilyen függvényt.
Függvényt legfeljebb meghív. [call_user_func()]"Nem lenne célszerűbb már a __get() résznél megvizsgálni a dolgokat? dátum, név stb? Mert így feleslegesen dolgozik utána még a __set() is."
Másra való a kettő! A getter függvényekkel lekérdezel bizonyos attribútumokat, változóértékeket, a setter függvényekkel pedig beállítod azok értékét.Ha be akarnám állítani vagy épp le akarnám kérdezni a "pityipalko" változó értékét, akkor arra nyilván kivételt dobna, mert nincs ilyen (ha beállítottad volna a konstruktorban, akkor lenne ilyen! példa:
$this->_tulajdonsagok['pityipalko'] = null;).
De a $_tulajdonsagok tömbben létezik 'nev' és 'szuletesidatum' index is, így azokhoz tartozik egy érték, azok beállíthatók, lekérdezhetők.Amikor ezt írod:
$obj->szuletesidatum = '1985-08-27';
Akkor tulajdonképpen a "mágikus" __set függvény hívódik meg, a __set $tulajdonsagnev paramétere megkapja a 'szuletesidatum' sztringet, az $ertek pedig az '1985-08-27' értéket.Ezután az array_key_exists() függvénnyel megvizsgáljuk, hogy a $_tulajdonsagok tömbben beállítottunk-e egyáltalán 'szuletesidatum' index-szel bármit (ami a konstruktorban egyébként null értéket kapott [lásd $this->_tulajdonsagok['szuletesidatum'] = null;], de ezzel már létrejött ezen az indexen egy érték), ha nem, kivétel, ha igen, megyünk tovább.
Ezután megvizsgálja, létezik-e az osztály adott példányában ($this) $tulajdonsagnev . 'Beallitas' nevű függvény - tehát esetünkben szuletesidatumBeallitas nevű függvény (mivel konkatenálja a $tulajdonsagnev változó értékét a 'Beallitas' sztringgel, majd megvizsgálja, van-e ilyen metódus ( method_exists() függvény).
Ha létezik ilyen metódus, akkor meghívja azt, különben pedig csak simán beállítja a $tulajdonsagnev nevű indexen található értéket a $_tulajdonsagok tömbből.Remélem valamennyire érthetően mondtam el.
-
Speeedfire
félisten
válasz
Tele von Zsinór #6393 üzenetére
Igen azt én is észrevettem, hogy developer verzió, csak a hivatalos oldalon egy szó sem esik erről. Ha valóban készül akkor lehet tudni, hogy mik lesznek az újítások?
Most akkor lehet megint félreértettem valamit. Ha jól értettem akkor a függvény a __get() részben megnézni, hogy van-e az adott néven ilyen függvény, ha van akkor meghívja ha nincs akkor elkészíti ellekező esetben kivételt dob nekem.
class TulajdonsagObjektum {
private $_tulajdonsagok;
public function __construct() {
$this->_tulajdonsagok = array();
$this->_tulajdonsagok['nev'] = null;
$this->_tulajdonsagok['szuletesidatum'] = null;
}
function __get($tulajdonsagnev) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}
}
function __set($tulajdonsagnev, $ertek) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-ertek');
}
if(method_exists($this, $tulajdonsagnev . 'Beallitas')) {
return call_user_func(array($this, $tulajdonsagnev . 'Beallitas'), $ertek);
}
else {
$this-> _tulajdonsagok[$tulajdonsagnev] = $ertek;
}
}
function szuletesidatumBeallitas($szd) {
if(strtotime($szd) == false) {
throw new Exception('A szuletesi datumnak egy ervenyes naptari napnak kell lennie!');
}
else {
$this->_tulajdonsagok['szuletesidatum'] = $szd;
}
}
function koszontes() {
echo 'Szia! '.$this->nev.' vagyok! '.$this->szuletesidatum.' -an/en szulettem!<br/>';
}
}
try {
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";
$obj->szuletesidatum = '1985-08-27';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Hiba: ', $e->getMessage(), "\n";
}Ugye itt a __get() második if ágában van a vizsgálata ennek. Vagy te arra az egy db szuletesidatumBeallitasra gondoltál? Mert abban az esetben valóban van ilyen de a többi esetben nincs ilyen típusú függvény.
Viszont most megint felmerült egy kérdés a fejemben? Nem lenne célszerűbb már a __get() résznél megvizsgálni a dolgokat? dátum, név stb? Mert így feleslegesen dolgozik utána még a __set() is. Akkor már a kivételkezelés az elején végbe menne. -
Tele von Zsinór
őstag
válasz
Speeedfire #6392 üzenetére
Valószínűleg saját fordítás, mert készítik egy ideje a php6-ot. Ott is van a neve végén, hogy dev verzió.
Korábbira: az általad adott kódban pont van egy xyBeallitas példa.
-
Speeedfire
félisten
válasz
Brown ügynök #6391 üzenetére
Ez az, hogy én is csak rc-est láttam a php oldalán....5.3.6RC2 (03 Marchy 2011)
Az appserver oldalán meg ez van...
-
Brown ügynök
senior tag
válasz
Speeedfire #6388 üzenetére
Nincs még PHP 6. A hivatalos oldal szerint a következő verzió az 5.3.6. lesz.
-
shaggy
aktív tag
válasz
Sk8erPeter #6387 üzenetére
Felraktam a wampot és csodálatosan működik köszönöm mindenkinek a segítséget azt hiszem ezt fogom használni!
-
shaggy
aktív tag
válasz
Sk8erPeter #6387 üzenetére
Igen rendesen le van zárva próbáltam röviddel és hosszúval is egyik sem jó még mindig a teljes kódrészletet írja ki.
De most letörlöm és amit mondtatok azt fogom feltenni és akkor remélem megoldódik a problémám -
Speeedfire
félisten
válasz
Sk8erPeter #6387 üzenetére
Wamp-ot használok, de gondoltam meglesem ezt a appserver-t erre mit látok.
Php 6.0.0 dev. Ez mióta van, vagy mi lesz benne az újítás? Nekem ez most nagyon új infó, eddig erről nem tudom. -
Sk8erPeter
nagyúr
akkor ne a rövidet használd, tehát ne a <? nyitótagformát, hanem a <?php változatot.
Rendesen le is van zárva a kód ?> jellel?
Milyen címen próbálod elérni? Fizikailag hol van a fájl?
NE használd a PHP4-et, inkább visszafelé ne haladj az időben, maradj csak a PHP5-nél.
Egyébként ahogy a többiek is mondták, lehet, hogy inkább le kéne szedned az eddigi feltelepített Apache-ot és PHP-t, aztán felrakni sokkal egyszerűbben egyszerre, jól bekonfigolva az összes csomagot, mégpedig a WAMP vagy AppServ segítségével.
Ezek pár kattintással felmennek, viszont faszán telepít mindent, és nem kell vele szívni. Tégy vele egy próbát. -
shaggy
aktív tag
így van elé írtam a taget én a rövidet használtam és engedélyezve is volt és azt az útvonalat használtam amit leírtál igen de nekem akkor sem jó nem tudom miért csinálja ezt.
Most megpróbálom a PHP4 leszedni és a könyv alapján mert én a php5 raktam fel de nekem nem nagyon akar működni. -
Speeedfire
félisten
válasz
Tele von Zsinór #6380 üzenetére
definiál egy mágikus __set függvényt, ami akkor hívódik meg, mikor egy nem létező tulajdonságot próbálsz beállítani. Működése:
- ha a $_tulajdonsagok tagban nincs olyan kulcs, akkor hiba
- ha létezik "tulajdonságnévBeallitas" függvény, akkor meghívja
- amúgy beállítja az adott tulajdonságotEz nagyon hasznos volt. Főleg a vége, szóval beállítja az adott kérést.
Eddig csak azt tudtam, hogy a php alapból meghíva a __set() __get() függvényeket és ott keresi ha nincs meg egy adott függvény.Csak engem megzavart, hogy nem volt a példa programban olyan, hogy:
-tulajdonsagnevLekerdezes
-tulajdonsagnevBeallitas -
shaggy
aktív tag
válasz
Sk8erPeter #6376 üzenetére
de localhost nyitom meg http:/localhos akkor behozza az apache az it's work! oldalát!
De amikor a test.php próbálom akkor csak a kódot írja ki nem amit kellene és nem tudom miért. -
Tele von Zsinór
őstag
válasz
Speeedfire #6379 üzenetére
A példaprogram lényegi része:
definiál egy tulajdonságok belső változót, benne létrehozva a helyet az érvényes tulajdonságoknak
definiál egy függvényt szuletesidatumBeallitas néven, ami az adott tulajdonság beállításával foglalkozik
definiál egy mágikus __set függvényt, ami akkor hívódik meg, mikor egy nem létező tulajdonságot próbálsz beállítani. Működése:
- ha a $_tulajdonsagok tagban nincs olyan kulcs, akkor hiba
- ha létezik "tulajdonságnévBeallitas" függvény, akkor meghívja
- amúgy beállítja az adott tulajdonságotAmit megmutat: hogy lehet általános magic settert írni úgy, hogy ha egy-egy esetben mégis spec. működés kell, megoldja. A getterben ott a párja, ami "tulajdonságnévLekerdezes" nevű függvényt keres.
-
Speeedfire
félisten
válasz
PazsitZ #6355 üzenetére
Ez az, hogy a példa programban nincs olyan tulajdonság, hogy xyz beallítas vagy xyz lekerdezes. [link]
Ezért nem értem én, hogy mire akar ott hivatkozni. Vagy így automatikusan létre akarja hozni?
Sk8erPeter: Igen, én is úgy érzem, hogy kicsit túl akarja bonyolítani az elején a könyv ezt. Holott a fejezetet címe bevezetés az oop elméletbe...a következő fejezet lenne az ami a magic methodokkal foglalkozna elméletileg.... -
LW
őstag
Jó estét/hajnalt!
Hogyan lehet és érdemes megcsinálni a rövid "barátságos" url-eket? pl. http://domainem.hu/blog/egy_cikk/ => index.php?m=blog&content=egy_cikk
Rágugliztam, találtam egy pár lapot az apache mod_rewrite lehetőségéről. Holnap megnézem.
üdv. LWszerk: Gondoltam hátha tudsz valami zseniálisabb megoldást.
Ám rendben.
-
shaggy
aktív tag
válasz
Sk8erPeter #6374 üzenetére
ez az akart lenni h a test.php-t nem jeleníti meg nekem hanem ami benne van kódrész azt írja ki és nem tudom miért.
-
shaggy
aktív tag
Sziasztok!
Már elég sok helyen néztem és nekem akkor sem akar összejönni a dolog könyv alapján csináltam frissebb verzióval mint a könyvben van de nekem nem műkődni.
Szóval
felraktam a php5.3.5 és hozzá az Apace 2.2.17 és a test az (its work ) felirat be is jön.
De amikor a test php-t futtatom akkor az már nem az egész kódrészletet írja ki miért csinálja ezt?Üdv.
-
Inv1sus
addikt
válasz
Brown ügynök #6368 üzenetére
Na akkor majd kezdhetek tanulni megint.
-
jeges
senior tag
válasz
Tele von Zsinór #6364 üzenetére
igaz, csak gondoltam, hátha van tapasztalat.
kicsit teszteltem:
cca 25000 elemig (ill az alatt) az a) a nyerő, a b) a második (10000 elemnél 20% körüli a különbség), végül a b) cca 20%-ot ver a c)-re
durván 25000 felett viszont megfordul a helyzet: a b) egyre jobban lekörözi az a)-t. 100000 elem esetén már erős 20% a difi a b) javára. a c) egyértelműen a leglassabb.azaz a sorrend: a -> b -> c ha kb 25ezer és alatta vagyunk, efölött pedig b -> a -> c
szerk:
persze ez nem egy "rendes" tesztrendszer, csak amolyan koca mérés. néhányszor lefuttattam, 25000 és alatta a b) nem mutat túl stabil eredményeket, de a sorrendet nem tudja "áttörni" a szórás -
jeges
senior tag
válasz
Sk8erPeter #6367 üzenetére
"Többek közt a fent említett indokok miatt nagyon nem"
abból a szempontból teljesen mindegy, hogy a kérdés feltevésekor
1) egyáltalán nem volt try/catch, így az egész hibára futott
(úgy gondolom ez volt az alapprobléma, amit megoldottunk)
2) a dátumkezelés miatt is hibára futott
(ez is megoldódott)a fentiek ellenére/mellett már elmondtam, hogy
1) mea culpa a megtévesztő szóhasználatért
(mellesleg azt gondolom, aki nem akarja, nem érti félre)
2) (még egyszer) köszönöm a kiegészítést, hiszen a megoldás valóban kiegészítésre szorult
3) az első hibátlan futás előhozza az addig esetleg elfedett nem várt működéseket
(lehet, mással nem fordul elő, hogy egy problémára koncentrálva elsiklik egy másik felett, velem bizony előfordul)amennyiben Te is egyetértesz, továbbléphetnénk.
-
Brown ügynök
senior tag
Megújult a Symfony 2 honlapja. Holnaptól pedig tölthető a keretrendszer! Gondolom a honlap a Symfony 2-re épül, így elmondhatjuk, hogy nem kicsit gyors a rendszer.
Symfony
Check this out! -
Sk8erPeter
nagyúr
Ciklussal kapcsolatban: programozási kérdésekben az ilyen jellegű alapfogalmak elég ritkán sokértelműek, jelen esetben is egyértelmű a jelentése, és programozásnál meg főleg nem mindegy, hogy egy adott szót a tényleges jelentése alapján használsz, vagy csak saját definíciót találtál-e ki rá, képzeld el, mi lenne pl. csapatmunkánál, ha mindenki más és más értelemben használná a fogalmakat.
A Wikipédiás meghatározás a ciklusra:
Ciklus (programozás)
"A ciklus, vagy iteráció a számítógép-programozás és az algoritmusok egyik alapvető eszköze, amely az ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál. A ciklus beépítését a programba ciklusszervezésnek is nevezik. A ciklust az egyes programozási nyelvek különböző kulcsszavakkal valósítják meg, de a működési módjukat tekintve három alaptípusba sorolhatók aszerint, hogy hányszor futnak le: ezek az elöltesztelő, a hátultesztelő és a számlálós ciklus."Ne vedd kötekedésnek, nem azért mondtam, hanem csak hogy tisztázzuk.
"különösebb galibát egyébként az első esetben nem okoz"
Hát ha nincs kivétel, akkor valóban nem probléma, de ellenkező esetben elég para."az, hogy a try/catch-ben vizsgált jelenség utáni lépést a szerkezetbe vagy utána teszed, környezetfüggő."
Hát nekem most a try-catch blokkokkal kapcsolatban nem jut eszembe olyan környezet, ahol a logikának teljesen ellentmondó megoldást kéne alkalmazni.De mondj ilyet, ha van rá ötleted.
A try-catch esetén még az osztály példányosítását is a legtöbb esetben belepakolják a blokkba, mivel még a konstruktornál is történhet kivétel, ha valamiért nem sikerül a példányt létrehozni, ennek a kivételét is kezelni kell.
Az említett példában a köszöntéssel kapcsolatos függvény pont szervesen hozzátartozik a korábbiakhoz, tehát nagyon nem logikus, ha épp a try-catch blokk után teszed annak a függvénynek a meghívását, aminek a lefutása épp attól függ, hogy volt-e kivétel vagy sem.
"a példa szempontjából majdnem mindegy."
Többek közt a fent említett indokok miatt nagyon nem. -
LW
őstag
Öhm... Megvan a megoldás és ez fájt.
Mi volt az, ami eddig nem volt és a közelmúltban került a képbe? Sokadik Apache-mysql-php trió után sorra elkövettem?
A phpeditor debugja hülyítette meg ennyire az apacheot. Reggel felkeltem, raktam fel egy újabb wampot, jól ment, egészen addig, amig nem volt debugra szükségem. Beállítottam a szerkesztőt és jött a facepalm meg a Connection was reset.Azt hiszem, tanulságos volt.
-
PazsitZ
addikt
-
jeges
senior tag
nekem is lenne egy kérdésem:
a)
$out = "";
for ($i = 0; $i < 10000; $i++) {
$out .= " " . $i;
}
print $out;b)
for ($i = 0; $i < 10000; $i++) {
print " " . $i;
}c)
$ar = array();
for ($i = 0; $i < 10000; $i++) {
array_push($ar, $i);
}
print implode(" ", $ar);melyik hatékonyabb, ill. gyorsabb, ha nagyobb adattömeget szeretnék a kliensre küldeni?
(cache kezelést meg egyebeket most hagyjuk figyelmen kívül) -
jeges
senior tag
válasz
Sk8erPeter #6357 üzenetére
mindenekelőtt köszönöm a kiegészítéseket.
ciklus úgyben nem programozási struktúráról, hanem logikailag összetartozó lépések sorozatáról volt szó, ha megtévesztő számodra a megfogalmazás, elnézést.
!isset($e) részre vonatkozóan igazad (igazatok) van természetesen, itt valahonnan máshonnan vettem a kódrészletet. különösebb galibát egyébként az első esetben nem okoz, a második esetben valóban dupláz (ami nyilván kiderülne az első hibamentes futás alkalmával)
"a köszöntésnek épp a dátum után kéne lennie..." - felvetésre:
az, hogy a try/catch-ben vizsgált jelenség utáni lépést a szerkezetbe vagy utána teszed, környezetfüggő. nem néztem vissza, de emlékeim szerint itt "belefért" mindkettő. az viszont bizonyos, hogy az első hibamentes futás előhozza, ha mégsem a várt eredmény születik. a példa szempontjából majdnem mindegy. -
LW
őstag
Az adatbázis és a phpscriptek ATW-s szerveren tökéletesen működnek, egyedül localhost/phpmyadmin dobál Connection was reseteket, de már a hajamat tépem.
Segítsetek légyszi!
-
LW
őstag
Ismét haldoklik a mysql. InnoDB táblában Foreign key lehet NULL?
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6358 üzenetére
Ja tényleg, az meg a másik. Tehát magyarul ha lenne is kivételdobálás, akkor is le akarna futni az $obj->koszontes(); függvény, mert teljesülne, hogy nem létezik az $e változó.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6357 üzenetére
Arról nem is beszélve, hogy $e csak a catch blokkon belül van, amint annak vége, kikerül a scope-ból, és megsemmisül.
-
Sk8erPeter
nagyúr
"szerintem próbáld külön a köszöntésig egy ciklusba (megjegyzem, logikailag nekem egyébként is az tűnik egy teljes ciklusnak)"
Hol van itt ciklus?
try {
$obj->szuletesidatum = '1985. 08. 27.';
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();}???
a köszöntésnek épp a dátum után kéne lennie...
if (!isset($e)) {$obj->koszontes();}
Ennek meg a végén bocsi, de totál semmi értelme.
Így pont a try-catch szép logikus blokkját bontod meg.
Amennyiben kivételt dobunk, akkor úgysincs köszöntés, tehát egy tök felesleges feltételvizsgálatot tettél a végére.Meg még ezt írtad:
try {
$obj->szuletesidatum = 'piros';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();}
Főleg úgy nincs értelme, hogy amennyiben nem lenne kivétel attól, hogy beállítod "piros"-ra a változót, kétszer futna le a köszöntés. -
Sk8erPeter
nagyúr
válasz
Speeedfire #6341 üzenetére
Szerintem speciel az "1985. 08. 27." pont nem egy érvényes dátum, amit megeszik az strtotime függvény.
"1985 08 27" - ez sztem megint nem érvényes dátumformátum, így jogosan dobja a kivételt.
Mellesleg így elsőre nekem úgy tűnik, hogy a könyv az OOP-s részt kezdőknek feleslegesen elbonyolítja, mert így csak nézel, hogy mi a bré van...
Én annak idején C++-ból értettem meg elég jól az OOP-t, elsőre ilyen magic függvényekkel "varázsolni" fura lett volna, tuti nem vágtam volna elsőre, mi a pálya. Így utólag belátom, hogy ezek könnyíthetik a melót, de elsőre érdemes sztem a hagyományos módszerekkel tisztában lenni, hogy értsd, de ez mondjuk csak egyéni vélemény.Ezért fura a könyv felépítése.
-
PazsitZ
addikt
válasz
Speeedfire #6347 üzenetére
[link]
Első paraméter: array($this, $tulajdonosnev . 'Beallitas') - function név
többi paraméter(opcionális): $ertek - paraméter(ek)
Ha osztály function nevére kell hivatkoznod, mint string, azt így teheted: array(classnév,functionnév)
tehát az aktuális osztály($this), $tulajdonosnev.'Beallitas' sztringösszefűzés adta functiont hívod meg.A __set(), __get() magic methodok a nem definiált tagváltozókat fogadják és szimulálják za általad implementált módon, ilyen formában nincs köze a call_user_func() fgv.-hez.
-
jeges
senior tag
válasz
Speeedfire #6350 üzenetére
nem biztos, hogy jól értelek, de a függvények szempontjából nem is értelmezhető. a call_user_func() egy felhasználó által definiált függvényt/eljárást hív meg, a meghívott függvény/eljárás paramétereivel. mivel jelen esetben objektum eljárásáról van szó, az eljárás paramétere lehet mindkét string. ha jól gondolom, az egész példa arra jó, hogy bemutassa, hogy lehet előre nem definiált tulajdonságú osztályokat kezelni.
-
Speeedfire
félisten
-
jeges
senior tag
válasz
Speeedfire #6347 üzenetére
ezt így "látatlanba' " nem könnyű megmondani.
az első valamely class egy példányának (ő lenne a $this) a "$tulajdonosnev" metódusát hívja meg a "Beallítas" paraméterrel. Feltételezem, hogy a tulajdonosnév eljárás machinálására szolgál, és az adott paraméterrel a tulajdonosnév beállítása történik meg. A második hasonló. (nincs elírva az első soron a tulajdonos? inkább tulajdonság lehet, nem?)joker: #6325-ben a válasz
-
j0k3r!
őstag
válasz
Speeedfire #6339 üzenetére
melyik konyv ez?
-
Speeedfire
félisten
Akkor a könyvben nem értem miért így volt.
Illetve ezt sem pontosan értem:
return call_user_func(array($this, $tulajdonosnev . 'Beallitas'), $ertek);
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));Itt a Beallitas és Lekerdezes sztingeket mire használja?
-
jeges
senior tag
válasz
Speeedfire #6345 üzenetére
a php számára ez nem dátum, hanem egy "sima" string. bizonyos formátumokat felismer, másokat Neked kell megmutatni a programnak. php manual-ban le van írva, bár nem a legvilágosabb része a dokumentációnak. a yyyy-mm-dd formátum jó szokott lenni.
-
jeges
senior tag
válasz
Speeedfire #6343 üzenetére
próbáld meg a dátumot így: 1985-06-27
és írd vissza false-ra, mer' az strtotime() == false a hibás
(azaz szerintem nem volt jó true-val, csak nem dobott hibát - ez a kettő jelen esetben nem ugyanaz) -
Speeedfire
félisten
A könyv végére sírni fogok ezektől a dolgoktól...
Kivettem a piros részt is és így it hibát ír ki, szóval máshol lesz a gond szerintem. Heggesztem még a kódot, de így kicsit ciki ha már a könyvben sem jól van írva...
Ha ezt átírtam true-ra akkor jó volt.
if(strtotime($szd) == false) { -
jeges
senior tag
válasz
Speeedfire #6341 üzenetére
szerintem próbáld külön a köszöntésig egy ciklusba (megjegyzem, logikailag nekem egyébként is az tűnik egy teljes ciklusnak), meg a végét (ami hibás) egy másik try-catch-be
szerk: így valahogy:
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";try {
$obj->szuletesidatum = '1985. 08. 27.';
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();}try {
$obj->szuletesidatum = 'piros';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();} -
Speeedfire
félisten
Akkor már tudom Sk8erPeter mire célzott a gányolt kóddal...
Így módosítottam a végét, de csak a hibát írja ki. A helyes részt nem, pedig az 1985.08.27. helyes dátum formátum elvileg.
try {
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";
$obj->szuletesidatum = '1985. 08. 27.';
$obj->koszontes();
$obj->szuletesidatum = 'piros';
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}Caught exception: A szuletesi datumnak egy ervenyes naptari napnak kell lennie!
-
jeges
senior tag
válasz
Speeedfire #6339 üzenetére
uncaught exception -> nincs try/catch, ami elkapja
szerk: nézd meg itt
-
Speeedfire
félisten
Ismét egy kis oop kérdés lenne. A könyvben adott egy kódrész:
class TulajdonsagObjektum {
private $_tulajdonsagok = array (
'nev' => null,
'szuletesidatum' => null
);
function __get($tulajdonsagnev) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}
}
function __set($tulajdonosnev, $ertek) {
if(!array_key_exists($tulajdonosnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-ertek');
}
if(method_exists($this, $tulajdonosnev . 'Beallitas')) {
return call_user_func(array($this, $tulajdonosnev . 'Beallitas'), $ertek);
}
else {
$this-> _tulajdonsagok[$tulajdonosnev] = $ertek;
}
}
function szuletesidatumBeallitas($szd) {
if(strtotime($szd) == false) {
throw new Exception('A szuletesi datumnak egy ervenyes naptari napnak kell lennie!');
}
else {
$this->_tulajdonsagok['szuletesidatum'] = $szd;
}
}
function koszontes() {
echo 'Szia! '.$this->nev.' vagyok! '.$this->szuletesidatum.' -an/en szulettem';
}
}
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";
$obj->szuletesidatum = '1985. 08. 27.';
$obj->koszontes();
$obj->szuletesidatum = 'piros';A könyv szerint ki kellene írni a Szabit és a születési dátumot és utána egy hibaüzenetet, hogy a piros nem megfelelő dátum.
Ehelyett az egészet egy errorba rakja nekem.Fatal error: Uncaught exception 'Exception' with message 'A szuletesi datumnak egy ervenyes naptari napnak kell lennie!' in D:\munka\web\!!!oop\index.php:80 Stack trace: #0 [internal function]: TulajdonsagObjektum->szuletesidatumBeallitas('1985. 08. 27.') #1 D:\munka\web\!!!oop\index.php(71): call_user_func(Array, '1985. 08. 27.') #2 D:\munka\web\!!!oop\index.php(94): TulajdonsagObjektum->__set('szuletesidatum', '1985. 08. 27.') #3 {main} thrown in D:\munka\web\!!!oop\index.php on line 80
php 5.3.0 van fent.
-
Siriusb
veterán
válasz
Tele von Zsinór #6337 üzenetére
Persze, de más böngészőnél, pl. chrome nem így működik, a böngésző bezárásával törlődik a süti. Lehet ezt valahogy kényszeríteni ff-nél is?
-
jeges
senior tag
-
Siriusb
veterán
Keresztkérdés:
Firefox-ban, ha úgyzárom be a böngészőt, hogy egy fülön az adott oldal nyitva van, s a böngésző következő indításakor (annak beállítása folytán) szintén ott figyel az említett oldal, a sütik, melyek csak a munkamenet végéig lettek volna érvényesek, nincsenek törölve, csak kacarásznak egyenesen a képembe. Mi erre a megoldás? -
LW
őstag
Sziasztok.
Egy érdekes anomália jött elő az este és már kezdhangulatom lenni.
Egész eddig wampot használtam békében, nyugalomban. Kis keretrendszeremet fejlesztgettem és azt kezdtem észrevenni, hogy bizonyos táblákat(14ből 2) nem tudok megnézni phpmyadminban, Böngészőm fejemhez vágta, hogy Connection was reset.
Gondoltam én, velem nem szórakozik semmi, rakok fel egy EasyPHP-t is. Beállítom, működik is. Nem kelik el 2 perc, ugyan azt tapasztalom. Ugyanakkor PHPból kiadott lekérdezések probléma nélkül futnak.
A Connection was reset rendszerint akkor jön elő phpMyAdmin esetében, ha egymás után két lekérdezést(lapot váltok) hajtok végre gyorsan.
Találkozott valaki efélével?
üdv. LW -
Sk8erPeter
nagyúr
Ja, most a szintaktikai hibát pont nem a kapcsos zárójeles megoldásra értettem.
Persze, nem feltétlenül pont a kiíratás milyenségén kell lefaragni, de ahol lehet sebességet növelni, ott sosem árt, főleg, ha a kényelmi szempontokat nem rontja (jelentősen).
Pl. lehet, hogy csúnya, de a kódomban sokszor keverem a statikus HTML-megjelenítési formákat a PHP-vel, pusztán sebességbeli megfontolásokból (bár lehet, hogy nem dob sokat, nem mértem), hirtelen példaként (alternatív szintaktikával):
<?php
// .....
foreach($valami as $key => $value) :
?>
<div>blabla sokszor: <?php echo $value;?>
................
</div>
<?php
endforeach;
?>Persze ezt csak akkor, ha nagyon muszáj (pl. nagyon sok kiírandó HTML-kód van), mert különben gány lesz a kód.
Nyilván mindent egybevéve kell a sebességen javítani, ahol lehet, de olykor apróságok is számíthatnak sok kicsi sokra megy alapon.Az, hogy a kiíratást valaki kapcsos zárójellel vagy egyéb módon csinálja, tényleg csak ízlés kérdése.
-
rt06
veterán
válasz
Sk8erPeter #6330 üzenetére
"Ráadásul tömbindexelésnél vagy egyéb esetben is szintaktikai hiba lehet belőle, az összefűzögetésnél könnyebb elkerülni (számomra)."
a kapcsolszarojeles megoldasnal nem - az alabbi pl szintaktikailag helyes (raadasul szamomra sokkal atlathatobb, mint a ponttal torteno konkatenacio, de ez mar izles dolga
$str = "valami{$valtozo["index"][$masikindex]}megvalami";
a vesszovel elvalasztast nem igen hasznalom (echo-t sem, print-elni szoktam, de ez leginkabb megszokas miatt van csak), sot, mostanaban egyre inkabb szokok ra a printf, sprintf hasznalatara
a sebessegrol meg annyit, hogy szerintem ugysem ezen a (talan) par tizezredasodpercen fog mulni a dolog, sokkal inkabb az adatbazislekereseken, egyeb muveleteken (es ez meg mindig sehol nincs a http kapcsolaton keresztuli kommunikacio lassusagahoz)
ha javitani akarok a kodom sebessegen, nem a kiiratas lesz az elso (sokkal inkabb az utolsok kozt), aminek nekiesek -
Siriusb
veterán
válasz
Sk8erPeter #6330 üzenetére
Na igen, ebben egyetértek, a fejlesztőkörnyezetben az általad említett módszerrel sokkal áttekinthetőbb a kód.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6327 üzenetére
Ha sok HTML-kód kerül az outputra, nem is árt, ha az aposztrófos megoldást választod.
(Jó fárasztó és csúnya escape-elni a sok idézőjelet az attribútumoknál.)
(#6329) Siriusb: állítólag az aposztrófos megoldás a kiértékelés szükségességének hiánya miatt (de jól hangzott) gyorsabb lehet, mások szerint urban legend.
Személy szerint jobban szeretem inkább összefűzögetni, és aposztrófot használni, részben a fenti okok miatt (pl. esetleges sebességkülönbség plusz HTML-kód kiíratása), részben meg amiatt, hogy így szerintem sokkal jobban elkülöníthető a kód, ha böngészgetem a kódot - még ha a fejlesztőkörnyezet ki is emeli az idézőjelben elhelyezett kiértékelendő változót, akkor is sokkal inkább egybefolyik a többi kóddal. Ráadásul tömbindexelésnél vagy egyéb esetben is szintaktikai hiba lehet belőle, az összefűzögetésnél könnyebb elkerülni (számomra).Többiektől kérdezném, ha már erről van szó:
echo-zásnál mennyire használjátok azt a változatot, hogy vesszővel elválasztva íratjátok ki a különböző változókat, sztringeket, és nem konkatenálva?
Eszerint itt is lehet sebességbeli különbség, mégpedig a vesszővel elválasztott módszer javára.
Lehet, hogy értelmesebb, mint az állítólag lassúnak számító sztring-összefűzögetés, és érdemes lenne esetleg erre a módszerre átszokni. -
M.Úr
tag
válasz
Speeedfire #6327 üzenetére
Hát igen, ez ízlés és megszokás dolga. Én pl. tök logikátlanul (de legalább konzisztensen) így használom:
print "A valtozo_1 tartalma: ".$valtozo_1."<br />"; -
Speeedfire
félisten
Még most sem jöttem rá pontosan mi az a {}, ellenben anélkül megy rendesen.
echo 'Szia '.$this->nevLekerdezes().'!<br />';A könyvben csak az első sor van, ellenben én nem így szoktam az echo-t print-et használni:
echo ""; print "";
hanem csak sima aposztrófokkal
echo ''; print '';Megszoktam már ezt a szintaktikát.
-
M.Úr
tag
válasz
Speeedfire #6325 üzenetére
Ez nem OOP gond. A sztringben található { } szerepéről itt olvashatsz bővebben:
PHP Manual: Strings (complex syntax)szerk.:
A második sorba nem kell a { }. A könyv hibája... sajnos neves könyvekben is előfordulnak hibák. Néha egész súlyosak (pl. a Sam's Advanced PHP Programming egy komplett fejezete...). -
Speeedfire
félisten
Üdv!
Kis oop gondom van. Jelenleg a bevezetés a php5 programozásba könyvet forgatom a kezeim között, adott egy ilyen sor egy osztályon belül:
echo "Szia {$this->nevLekerdezes()}!<br />";
echo 'Szia '.{$this->nevLekerdezes()}.'!<br />';Az első sor szintaktikaileg helyes, de a másik már nem. Mi a gond vele? Illetve a {} mire való itt? A könyv erre nem tér ki...
-
Siriusb
veterán
válasz
DeltaPower #6322 üzenetére
Köszönöm a választ mindkettőtöknek.
-
PazsitZ
addikt
válasz
DeltaPower #6322 üzenetére
vagy ahelyett:
list($this->valtozo1,$this->valtozo2,$this->valtozo3) = mysql_fetch_array($qry); -
DeltaPower
addikt
válasz
Siriusb #6321 üzenetére
kb ez a különbség, amit írtál.
bind_result kódtömörítésre hasznos, pl egy objektum értékeinek feltöltésénél ehelyett$tomb=mysql_fetch_array($qry);
$this->valtozo1=$tomb[0];
$this->valtozo2=$tomb[1];
$this->valtozo3=$tomb[2];ennyit írsz:
mysqli_stmt_bind_result($qry, $this->valtozo1, $this->valtozo2, $this->valtozo3);
-
Siriusb
veterán
Sziasztok!
Néhány kérdés:mysqli_query + mysqli_fetch_array -t érdemesebb használni, vagy a
mysqli_stmt class-t? Miért?A mysqli_stmt_bind_result - nál ha SELECT * -gal dolgoznék, tényleg minden mezőnek be kell írnom egy változót, vagy bele lehet egy tömbbre rakni az eredményt?
Esetleg épp ez az - egyik - fő különbség a két módszer között, hogy itt egyenként kell definiálni a változókat a mezőknek, így csakis azokkal az adatokkal dolgozunk, amire épp szükség van?Szerk:
csak azért, mert lustaság szempontjából az első módszer az előnyösebb -
LW
őstag
Köszönöm.
Így már minden tisztább. Nem kicsit túl akartam bonyolítani.
Adatmegmentős dolog lehet esetleg még az, ha nem létezik munkamenet a cikk beküldésekor, akkor a login oldalnak átadja a kéréssel jött cuccokat és sikeres belépés után egyből visszadobja a POST tartalmával együtt.
Zöldfülű vagyok még, de első guglizással cURL lesz hozzá a barátom.
Na irány az iskola, köszi még egyszer.
üdv. LW -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6318 üzenetére
Ja, az ötleted jó a noscript áthelyezésére, pl. milyen jó lenne erre JavaScript használata.
Igen, én is úgy csinálom, hogy megírom először teljesen JS nélkül működőképesre az oldalt, és csak azután módosítgatom az oldalt úgy, hogy AJAX-szal is működjön. Természetesen pluszmunka, de szerintem a használhatóság miatt megéri. Pl. amikor egy form-ot küldök el, akkor engem felhasználói szemmel nagyon szokott zavarni a teljes oldal-újratöltődés. Minek, amikor csak pár adatot küldök át (ha épp nem fájlfeltöltésről beszélünk, ott felőlem lehet újratöltődés, bár a Flash-es vagy iframe-es megoldás itt is sokkal szebb) - az adatok fogadásáig meg megjelenítek egy forgolódó kis ikont, hogy a felhasználó azért tudjon róla, hogy valami tényleg történik a háttérben.
Tipikus példa lehet akár a stack overflow.Tele van JavaScriptes, AJAX-os megoldásokkal, és épp ezért kényelmes a használata. Ezért mondom azt, hogy manapság az igazán modern honlapok esetén elkerülhetetlen, vagyis inkább szükséges az AJAX használata - pusztán a felhasználói élmények növelése érdekében.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6316 üzenetére
Lehet valamennyire trükközni a noscript tag stílusával, hogy bár a domban hátul van, előrébb jelenik meg, vagy egyéb mód növeled a hangsúlyát.
A másik hozzászólásodhoz: örülök, hogy nem csak én vagyok rendszeres stack overflow felhasználó
Egy jól összerakott oldalnál az ajax megoldás nem egyszerűsít, inkább némi többletmunkát jelent - a plusz javascript, meg annak eldöntése, a szűk tartalmat akarja-e csak a user, vagy azt az egész layouttal dekorálva. És a fejlesztés úgy történik, hogy először megírod, aztán belenyúlsz egy kicsit, hogy ajax-szal működjön. Amennyire csak lehetséges, az oldalaimon törekszem a javascript nélküli használhatóságra. -
Sk8erPeter
nagyúr
Előző kommentekhez hozzáfűzve:
ha már JS-függő site, és cikkírások, akkor érdemes megfontolni azt a megoldást is, amit a Gmail és pl. akár a stackoverflow is alkalmaz: levél/hozzászólás/... írása esetén időszakos mentéseket készít az addigi piszkozatról, így nem vész el az irományod. Gmailnél mondjuk meg is marad véglegesen. Felhasználóhöz kötve tehát érdemes lehet piszkozatot is készíteni bizonyos cikkekről, így később is folytatható, valamint nem vész el - legalábbis nem teljesen, ha közben lejár a munkamenet. Természetesen a legjobb megoldás az, amit mostanában Neptunnál is alkalmaznak végre, hogy a munkamenet lejárta előtt figyelmeztet annak lehetséges megújítására - ha 1 percen belül nem kattintasz arra a gombra, ami ezt elintézi neked, akkor kiléptet; na, a kiléptetés előtt lehetne közvetlenül piszkozatként elmenteni a cikket.
Manapság az AJAX-os megoldások szerintem elkerülhetetlenek, nagyságrendekkel felhasználóbarátabbá és akár programozói szempontból is kényelmesebbé tehetik az oldalakat (a programozói szopásoktól most eltekintve).
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6315 üzenetére
"cserébe ne feledd figyelmeztetni az ilyenre a felhasználót egy jól elhelyezett noscript taggal."
Pont ezt alkalmazom az egyik egyelőre csak tesztoldalamon, de időközben az jutott eszembe, hogy akkor esetleg ezt is indexeli a Google, az meg furcsán mutathat a találatoknál, hogy szerepel rajta egy figyelmeztetés arról, hogy be kéne kapcsolni a JavaScriptet, vagy olyan böngészőt használni, ami támogatja azt.
Mi a véleményetek erről? -
Tele von Zsinór
őstag
Ahogy előttem is írták: a munkamenet hosszát az alkalmazás határozza meg - komolyabb biztonságnál egyértelműen rövidebbre érdemes venni, a php alapbeállítása (1440 másodperc - 24 perc) egy elég jó arany középút. Ritkán tartom szükségesnek állítani.
Az "emlékezz rám" megoldások nem a session idő megnövelésével működnek, hanem plusz egy sütivel, ami mondjuk él egy hétig, és egyértelműen köthető egy felhasználóhoz. Az egyszerű megoldás az, ha ennek meglétét a bejelentkező oldal vizsgálja, ha létezik és érvényes, akkor rögtön továbbít is anélkül, hogy látnád a login formot.
Előfordulhat olyan helyzet, hogy egyetlen oldalon (vagy egy páron - az alkalmazásod méretéhez képest kevés helyen) kell hosszabb munkamenet, erre egy kerülőút: egy, csak azokon az oldalakon behúzott javascript, ami párpercenként egy ajax kéréssel a háttérben életben tartja a sessiont, mondjuk ötpercenként egy kéréssel legfeljebb 12 alkalommal, az plusz egy óra. Például az említett cikkírós oldalra jól jöhet, cserébe innentől JS-függő az alkalmazásod. Mai világban nem tragédia, cserébe ne feledd figyelmeztetni az ilyenre a felhasználót egy jól elhelyezett noscript taggal.
Adatbázisban tárolás, erről megoszlanak a vélemények, kap hideget is, meleget is. Akkor tagadhatatlanul hasznos, ha több gépen elosztva van az alkalmazás egy load balancer mögött, ilyenkor kénytelen vagy valami központi megoldást használni, amúgy bőven jó a php.ini-ben beállított, általában fileban történő mentés.
IP, useragent ellenőrzés. Ismét azt mondom, hogy a szükséges biztonsági szint a fő meghatározó, de: a useragent ritkán változik, az ipvel viszont vigyázz: az országban is több szolgáltató van, aminél több user van egy ip mögött, esetleg bonyolítva azzal, hogy egy user ipje is változik kérésről kérésre attól függően, melyik proxy épp van legkevésbé terhelve.
Saját hash generálás felesleges, de amikor változik az authentikációs szint (be- és kijelentkezés, plusz jog kiadása vagy annak elvétele) érdemes egy session_regenerate_id() hívást intézni, ez elég jó védelem a session fixation támadások ellen.
-
RedSign
tag
Szia!
Hát a fő kérdés szerintem, hogy mi az oldal célja és mekkora szintű biztonságra van szükséged? (minél nagyobb annál kisebb időre és annál gyakoribb megújításra). Sok trükköt lehet alkalmazni, a kérdés, hogy szükséges-e az adott oldalhoz?
Persze nem tagadom minél biztonságosabb valami annál jobb...
Üdv,
RedSign -
LW
őstag
Sziasztok.
Épp a sessionkezelést (újra) nézegettem és érdekelne, hogyan érdemes megoldani azt, hogy ha a felhasználó úgy kívánja, akkor maradjon bejelentkezve(tartsa meg a munkamenetet) a webhelyen.Példához nem kell messzire menni, itt a prohardveren is élő funkció.
Mennyire érdemes állítani a munkamenet élettartamát?
40 perc sok lenne, de ha valaki belelendül a (pl.)cikkírásba, akkor elég sok adat veszhet el, ha már nem létezik a munkamenet.
Olvastam, hogy érdemes két határt bevezetni. Egyiknél a munkamenet még létezik, de x perc inaktivitás után megerősítés gyanánt újra elkérem a jelszót és ott folytatódik, ahol abba lett hagyva. A második határ értelemszerűen a session végső lejárata.Munkamenetekről lévén szó, a biztonság nem utolsó. Minden munkamenetet SQL táblában nyilvántartok, ahol REMOTE_ADDR és HTTP_USER_AGENT tárolva vannak, ha bármelyikben eltérés van, akkor érvénytelen a munkamenet.
Mennyire érdemes még ezt bonyolítani saját session.hash generállással vagy egyébbel?A lejárt és session-ös táblában ragadt rekordokat hogyan érdemes pucolni?
Minden új bejegyzéskor egy takarítólekérdezéssel vagy van kifinomultabb módja is?üdv. LW
-
fordfairlane
veterán
válasz
Tele von Zsinór #6236 üzenetére
Igazad van, sokkal korrektebben írtad le nálam.
Mindenesetre nekem a fejemben a PDO és a prepared statement szinte fixen kapcsolódott össze, írtam is rá osztályt. -
ArchElf
addikt
válasz
TonTomika #6305 üzenetére
Ha van programozási előképzettséged (és nem akarsz gép nélkül tanulni), akkor én a helyedben nem vennék könyvet: neten példakódból van elég, a php.net-en található leírások pedig szerintem bőven elegendők - főleg, hogy a community kommentek néha hasznosabbak, mint maga a leírás.
Ha nincs előképzettséged, akkor szerintem inkább vegyél egy nem nyelv specifikus könyvet (programozási alapismeretek) és próbáld meg abból elsajátítani az alapokat, majd utána az elméleti tudásra építve indulj el a netes példák és a hivatalos specifikáció alapján.AE
-
TonTomika
aktív tag
Sziasztok!
Elhatároztam, hogy a HTML+CSS mellé nagyon nem ártana, ha megtanulnám a PHP+MySQL kombót is, mert rengeteg jó dolgot lehetne csinálni benne, csak nem tudom, hogy hogyan.
Ehhez keresnék egy megfelelő könyvet (átnéztem a kezdőposztban lévő felsorolást is), megfelelő alatt azt értem, ami lehetőleg friss, releváns kiadvány, egy abszolút kezdő is megtanulhat belőle annyit, hogy utána magától is elboldoguljon és képes legyen önállóan felépíteni egy webes programot, pl tartalomkezelő rendszert vagy akár egy hírlevélküldő alkalmazást. Persze azt gondolom hogy egyetlen könyvből ennyi mindent nem lehet elsajátítani, viszont szeretnék egy képet kapni, hogy mégis milyen könyveken kéne átrágnom magamat.
Könyvből amit ajánlottak nekem az az Agyhullám: PHP és MySQL és a PHP5 24 óra alatt című kiadvány, bár erről hallottam már pár embertől, hogy annyira nem jó. (Pl hibás mintakódok.)
Gondolkodok tanfolyamon is, noha ez egy nagyobb befektetés, éppen ezért szerintem ennek úgy van értelme, ha az alapokkal már tisztában van az ember, akkor a komolyabb feladatokat már egy tanfolyam keretében tanulhatná meg. Ismer valaki ilyen helyet? Ahol tanítanak is (tudást adnak át) a pénzemért és nem csak a lehúzás megy?
Előre is köszönöm a segítséget!
-
Sk8erPeter
nagyúr
Szerintem elég gányolós megoldás kiíratni a hozzászólást egy fórum esetén <pre> tagekkel ellátva, és ennek a stílusát megváltoztatni CSS-sel utólag, hogy ne az alapértelmezett betűtípussal jelenjen meg. Tök másra való a <pre>, nem véletlenül más a betűtípusa sem, és nem véletlenül nem ezt szokták használni ilyen esetben - a JS-alapú szövegszerkesztők (lásd TinyMCE) is általában <br /> sortörésre alakítják a szöveget Shift+Enternél, vagy új bekezdést (<p>) hoznak létre sima Enternél. Nyilván jelen esetben az elsődleges cél a(z) (X)HTML-ben való megjelenítés, akkor ennek megfelelően is tároljuk el, és ne utólag gányoljunk a szöveggel. Szerintem.
-
zka67
őstag
válasz
Sk8erPeter #6301 üzenetére
Nem arról beszélek. A textarea-nak is ugyanaz az alapértelmezett fontja mint a pre-nek. Magyarul amikor beírja, ugyanúgy látja mint ha pre-vel íratná ki.
De nem tart semeddig se megváltoztatni a stílust. Azt kérte az illető, hogy ugyanúgy nézzen ki neki a szöveg, mint amikor beírja, erre pedig a pre a megfelelő megoldás.
Új hozzászólás Aktív témák
Hirdetés
- A Bosch szerint Európának nem kellene az AI-t a halálba szabályozni
- Hitelkártyák használata, hitelkártya visszatérítés
- Kecskemét és környéke adok-veszek-beszélgetek
- Star Trek
- LEGO klub
- Eredeti játékok OFF topik
- Okosóra és okoskiegészítő topik
- CMF Buds Pro 2 - feltekerheted a hangerőt
- EAFC 25
- Javít a szinkronizációs modelljén a Vulkan
- További aktív témák...
- Bomba ár! Dell Latitude 5400 - i5-8GEN I 16GB I 512SSD I 14" HD I HDMI I Cam I W11 I Gari!
- Csere-Beszámítás! AMD Ryzen 7 7800X3D Processzor!
- Újra Akcióban!!! Ducky One 2 Mini és SF billentyűzetek a bolti ár töredékéért! Számla+Gari
- Samsung Galaxy A54 5G , 8/128 GB , Kártyafüggetlen
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest