- Samsung Galaxy Watch7 - kötelező kör
- Google Pixel 8a - kis telefon kis késéssel
- Yettel topik
- iPhone topik
- Samsung Galaxy S23 Ultra - non plus ultra
- Csak semmi szimmetria: flegma dizájnnal készül a Nothing Phone (3)
- Xiaomi 15 - kicsi telefon nagy energiával
- Motorola Edge 60 és Edge 60 Pro - és a vas?
- Magisk
- Hat év támogatást csomagolt fém házba a OnePlus Nord 4
Új hozzászólás Aktív témák
-
Peter Kiss
őstag
Kódoltam egy keveset, szerintem erre gondoltál: http://pastebin.com/mc8eJwfQ
(Hiba lehet benne [Notepad teszt nélkül].)
-
Peter Kiss
őstag
-
Peter Kiss
őstag
válasz
pvt.peter #11767 üzenetére
Alapötletként ezt tudnám javasolni:
<?php
class View {
private $_file;
public $Data;
public function __construct($viewFile, array $data) {
$this->_file = $viewFile();
$this->Data = $data;
}
public function Render() {
require $this->_file;
}
}Ebben az esetben, a view fájljában hozzáférsz a $this-hez, így eléred a $Data-t is benne:
<ul>
<?php
foreach ($this->Data["rows"] as $object) {
echo "<li>";
echo $object->Name;
echo "</li>";
}
?>
</ul>Nehogy sima query result-ot adj a view-nak! Csak sima bejárható kollekciókkal szabad dolgoznia, amelyekben objektumok vannak.
Ne használd a mysql_ cuccokat. Válaszd a mysqli_-t vagy inkább PDO-t. -
Peter Kiss
őstag
válasz
Sk8erPeter #11755 üzenetére
E_STRICT-et szerettem volna.
-
Peter Kiss
őstag
válasz
tomchy #11745 üzenetére
Az első fájlban nem mysql_fetch_array-t, hanem mysql_fetch_assoc-t kell használni.
A másodikban az UPDATE id alapján frissítene, de a $id változód nem is létezik gyakorlatilag.
Minden fájlod elejébe nagyon gyorsan:
error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors', 1);---
És melyik iskolában garázdálkodnak mysql_ cuccokkal plusz escape-eléssel?
A gányos megoldásról nem is beszélve.
-
Peter Kiss
őstag
válasz
Speeedfire #11679 üzenetére
Ékezetekbe akad bele, próbálj kódolást állítani az adatokon (most itt gyakorlatilag a fájlod játszhat és a fotó encode). A json_encode() csak UTF-8-cal működik.
-
Peter Kiss
őstag
válasz
Speeedfire #11677 üzenetére
Így hirtelen nem tudom, de az array_push-t felejtsd már el (lassú sz.r).
$ajaxResult = array(
array('ment'=>'Sikeresen mentve a hozzászólás!'),
array('error'=>0)
);
/*
vagy
$ajaxResult = array();
$ajaxResult[] = array('ment'=>'Sikeresen mentve a hozzászólás!');
$ajaxResult[] = array('error'=>0);
*/
echo '<pre>'.json_encode($ajaxResult).'</pre>'; -
Peter Kiss
őstag
válasz
Sk8erPeter #11658 üzenetére
Mindkettőt kell használnia, de még az sem biztos, hogy így fog menni (PHP fordítási opciótól is függ).
-
Peter Kiss
őstag
-
Peter Kiss
őstag
válasz
Sk8erPeter #11590 üzenetére
Resource-öket mindig NULL-ként exportálja, ami által hülyeséget láthat a fejlesztő, miközben hibát keres, a print_r()-rel és a var_dump()-pal nem fordul elő ilyen.
-
Peter Kiss
őstag
substr-rel biztosan gyorsabb a másolás, de egyébként arra kellene törekedni, hogy ki lehessen zárni egyes részeket (valahogyan részekre bontani [pl. sorok], és azokban keresni dolgokat előbb, teszem azt, ha nincs benne 'y' betű, akkor nemérdekel többé). Esetleg mixelni az SQL-es megoldással, amit már említettem. Lehetne használni reguláris kifejezéseket is egyes helyeken.
-
Peter Kiss
őstag
Azért az tényleg fontos lenne, hogy hogyan keres, illetve, mi a cél (elég, ha egy szó megtalálható például, mert akkor nem strstr, hanem strpos-t kell használni, ilyenek).
Egyébként lennék annyira kretén, hogy a HTML-t betolnám egy FULLTEXT indexes adatbázisba, és azzal kerestetném.
Ha nagy az anyag, akkor szétdarabolom, és akkor máris tud több szálon dolgozni (FULLTEXT helyett jó lehet a LIKE).
-
Peter Kiss
őstag
Használhatsz AJAX-ot erre, először lemarod a HTML-t valamibe, aztán X darab soronként keregélsz benne, ez azt jelenti, hogy összes_sor/X darab AJAX lekérdezésed lesz. Egyébként szerintem keresni kellene valami értelmesebb megoldást, vagy gyorsítani a keresésen.
Tényleg, hogyan keresel?
-
Peter Kiss
őstag
válasz
Speeedfire #11546 üzenetére
Attól még ilyen adatot nem mentünk sessionbe.
-
Peter Kiss
őstag
válasz
trisztan94 #11499 üzenetére
Prepared statement-et kell használni, ahogyan azt már kb. egymilliószor elmondtuk.
-
Peter Kiss
őstag
válasz
Sk8erPeter #11467 üzenetére
Kohana-t nem ismerem, így azt sem, mennyire van kötve a $_FILES-hoz a saját feltöltője.
-
Peter Kiss
őstag
válasz
Speeedfire #11434 üzenetére
Ha így van összeállítva a query, akkor az escape mit sem ér aposztróf nélkül, támadható lenne a cuccos.
Mondjuk számtípusoknál én cast-olnék vagy filtereznék, nem escape-elnék.
-
Peter Kiss
őstag
válasz
Sk8erPeter #11417 üzenetére
Ezt csak tudom. 5.3 alatt nem nyúlok PHP-hoz.
-
Peter Kiss
őstag
válasz
Sk8erPeter #11413 üzenetére
5.3 alatt mondhatni, hogy nincs normális GC, ezért pl. a self references (internal handler) megöli, mert nem képes felszabadítani semmilyen memóriát, pl. a tiéd lehet, hogy elmenne 1 GB-ig is. Válts PHP verziót, minden megoldódik.
-
Peter Kiss
őstag
válasz
Sk8erPeter #11390 üzenetére
PHP 5.3 előtti?
-
Peter Kiss
őstag
válasz
Speeedfire #11298 üzenetére
Itt a timespan() függvényt bányásznám elő.
-
Peter Kiss
őstag
válasz
Lacces #11264 üzenetére
A dependency injection-ben semmi sötét mágia nincs, annyiról szól, hogy egyértelműen megmondod, mi kell az adott objektumot létrejöttéhez/működéséhez, vagy épp egy metódus működéséhez ahelyett, hogy valami kiskaput válassz: ez lehet a new operátor (pfuj
) vagy épp az említett singleton vagy singleton-jellegű global object. Constructor-okban lehet sokszor olyat látni, hogy a paraméterlistája tök üres, de van benne vagy 5-ször valamilyen példányosítás new-val vagy mással (ez egyébként amiatt is bukta megoldás, hogy a ctor-okban nem végzünk semmilyen műveletet gyakorlatilag [példányosítás, adatbázishoz kapcsolódás, bármi ilyesmi]).
A container ezen csak annyit segít, hogy ne kelljen annyit írnod, hogy egészen egyszerű legyek. Ha lenne egy olyan osztályod, aminek a ctor-a kérnek másik 3 objektumot, akkor nem szívesen írnál ilyeneket mindenhol, ahol kellene:
new (new (), new (), new ())
A container-ek ezen tudnak segíteni: az adott megoldás leírását használva felépíted, hogy, ha valaki X objektumot kér, akkor annak a függőségeit hogyan oldja fel, és utána csak ennyit kell írnod:
container.GetService(type)
Általában a container-ekhez járnak különböző lifetime service-ek (vagy írhatsz sajátot), ilyennel tudsz singleton-féle működést előidézni.
---
Az a final indoklás nem győzött meg, teljes osztályt szerintem a legritkább esetben kell lezárni. Ha azt szeretnéd, hogy valami az öröklődés ellenére is változatlan maradjon, azt rakd private-re vagy final-re, és kész.
-
Peter Kiss
őstag
válasz
Lacces #11262 üzenetére
Azt, hogy mit zársz le, és mit nem, nehéz kérdés, általában érdemes arra törekedni, hogy kiterjeszthető legyen majdnem minden osztály, de a kötelező dolgokat ne ronthassa el senki sem.
A singleton faszság, azért.
Ha singleton-szerű működést akarsz, akkor használj dependency injection container-t (de egyébként is érdemes).
---
Egyébként a válaszoló is csinál érdekeset, a beállítások betolásának biztosan nem így kellene lennie (parse_ini_file-os történetre gondolok), illetve szerintem ctor-ban nem szabad kapcsolódni az adatbázishoz (én is csinálok ilyeneket, de fokozatosan jövök le a cuccról).
-
Peter Kiss
őstag
Bárkinek érdekes lehet: PHP Authentication Class
A kérdés megválaszolója mondhatom, hogy a szívemből szólt.
-
Peter Kiss
őstag
válasz
Brown ügynök #11256 üzenetére
Adatbázist használva is van serialization, disk művelet, de még a remote call is befigyel, szóval gyorsabb nem lesz.
---
A session-kezelést illene szétválasztani:
"Adott felhasználó bejelentkezve tartása"
AdattárolásAz elsőhöz először az kell, hogy párhuzamosan menjen adatbázisban és cookie-ban is a session-kulcs kezelése:
Adatbázisban: session-kulcs, user ID, valamilyen gépazonosító (IP, user agent), létrehozás dátuma, lejárat dátuma, perzisztens-e
Sütibe: egyedül a kulcsot kell leküldeni (megfelelő lejárati dátummal, HTTP only, miegymás)Kulcsnak teljesen mindegy, ki mit használ, annyit kell csak figyelembe venni, hogy az adott környezetben lehetőleg egyedi legyen, pl. egy V4-es GUID teljesen jó.
Ennek cseréjét mindenképpen meg kell oldani, hiszen van 2 pont, ahol mindenképp kell: bejelentkezés és a kijelentkezés.Az adatbázisban a session lejárati idejét változtatni kell, amennyiben a session nem perzisztens: mindig ki kell tolni annyival a lejárati időt, amennyivel akarjuk (mondjuk 20 perc), minél hosszabb ez az idő, annál nagyobb a biztonsági kockázat (esetleg pl. akkor, mikor úgy jön a kérés, hogy már csak 1 perc van hátra a lejáratból, akkor cserélünk egy session id-t is).
Az adatok mentése már egy más dolog, ott annyit kell tennünk, hogy meg kell felelni az adott PHP elvárásainak (5.4-ben megjelent interface már említve lett), ez pl. adatbázisba mentés esetén azt jelenti, hogy meg kell oldanunk az adatok serialization-jét és az adatbázisba való benyomását (pl. egy TEXT típusú mezőbe a session id-hoz kötve).
Ha valaki ki akarja védeni a man-in-the-middle támadást, akkor használjon SSL-t.
-
Peter Kiss
őstag
Nekem bűzlik ez a példa, mert ránézve hard code-olt az egész.
Maga a configuration injection is elég nehézkes, de itt főleg, gyakorlatilag tesztelhetetlen configfájl nélkül. Biztosan nem tenném bele a Settings::getInstance(); hívást, hagyni kell a getFactorynak (vagy másnak) egy olyan pontot, ahol kódból bele tudom tolni az aktuális lehetséges válaszokat. (Ez a Settings cucc azért nincs itt, mert a factory-k mellett nincs nagy jelentősége, minden látható, ami kell belőle.) A másik, ami problémás lehet, az a switch-case; ha valaki ilyet lát, akkor gondolkodjon el azon, hogy ezt biztosan lehet máshogyan is.
Például, ha én csinálnám, akkor valószínűleg egy Activator vagy valamilyen más osztályt írnék, ami a konfigurációban szereplő adatok alapján tudna létrehozni objektumokat, nem pedig így hard code-olva switch-case-zel, ezt nagyon nehéz módosítani.
Factory se static lenne szerintem, hanem egy DI container-től el tudnám kérni az összes elemet, ami kellene.
DB_Abstraction_AbstractFactory-nak private constructor-t rak, de ennek ellenére pár sorral lejjebb példányosítja, aha.
A require hívásokról ne is beszéljünk...
-
Peter Kiss
őstag
válasz
19.Norbika #11183 üzenetére
Használható lenne ott, ahol azt mondtam, hogy a Render()-nek paraméterként át kellene adni valamit, ami HTML-t állít elő.
-
Peter Kiss
őstag
válasz
SektorFlop #11139 üzenetére
A kliensfelé a kódolást hogyan adod meg? Meta tagben vagy kiküldöd headerben? Utóbbi ajánlott.
-
Peter Kiss
őstag
válasz
CSorBA #11131 üzenetére
A kérdésedet már megválaszoltad: teljes útvonallal
A csavar csak annyi, hogy az első még nem teljes útvonal, vizsgáld meg mondjuk a $_SERVER tömb tartalmát, utána össze tudod rakni a teljes útvonalat, és nem lesz elérési problémád.
Egyébként, ami még jó megoldás lehet, hogy építesz egy autoloader-t, nem nehéz. Ha ez megvan, nem kell manuálisan include/require hívásokat kiadni.
-
Peter Kiss
őstag
-
Peter Kiss
őstag
válasz
pvt.peter #11093 üzenetére
Lehetne, hogy egybe rakd őket, csak akkor rugalmatlanabb a kód. Ha mondjuk most megcsinálod, amit szeretnél, és később az alkalmazásod egy másik részén is szeretnél hasonlót, de mégis kicsit más lenne pl. a body rész (akár teljesen üres, bár ennek most nem sok értelme lenne), akkor az új leszármazott osztályodban csak a _renderBody() metódust kell újraírni, minden más maradhat a helyén, feltéve, hogy nem szükséges még valami plusz hozzáadása.
Ha egybe raknád (mondjuk a Render()-be), akkor a bővítés úgy történne nagy valószínűséggel, hogy az új osztályodba bemásolnád a régi Render() kódját, és módosítgatnád pár ponton, ez nagy méretű duplikáció.
Ettől nagyobb fokú rugalmasságot pedig úgy érheted el, ha megoldod azt, amit a Render()-hez írtam a kommentbe.
-
Peter Kiss
őstag
válasz
trisztan94 #11088 üzenetére
Ha ez webboltos kosár, akkor simán session-be kell rakni, hiszen felhasználója nem mindenkinek van, aki már használja a kosarat, plusz felesleges is elrakni a táblába.
-
Peter Kiss
őstag
válasz
j0k3r! #11086 üzenetére
Egész jó, kissé zárt a final és a private dolgok miatt, plusz nem tud rekurzívan működni, ha jól látom, a HtmlBuilder-t pedig paraméterként adnám át az elemeknek (a render-ek paramétereként), hogy az építse meg a tag-eket, attribútumokat bele, ilyesmiket, ne az aktuális HtmlElement. (Az az egy NULL ellenőrzés nem kell, mert, ha jól emlékszem, NULL paraméternél, ha default-nak nincs megadva NULL, akkor eldobja magát a PHP.)
-
Peter Kiss
őstag
válasz
Sk8erPeter #11079 üzenetére
Szóval végül is igazam volt, csak megint belekevered a költő lelki állapotát mindenbe.
-
Peter Kiss
őstag
válasz
SektorFlop #11072 üzenetére
Nem státuszt kell jelölni, hanem vizsgálni kell az utolsó aktivitás időpontját egy kis időablakot hagyva az "aktív" besorolásnak (aki még 5 percen belül kattintott, az aktív).
-
Peter Kiss
őstag
válasz
Sk8erPeter #11061 üzenetére
Inkább örültél volna, hogy még megoldásnak neveztem a tiéd. Soakot leszólod azért, mert sántít az OO látásmódja, de a tiéd sem jobb. Azt mondod:
public function addNewTab(tabId, tabLabel, htmlContentOfTab)
Első körben syntax error, második körben pontosan tudod, hogy egy Tab-ot akarsz hozzáadni, akkor adj hozzá egy Tab-ot, ne pedig egy metódusban hozz létre raw adatból újat, és azt add hozzá. Single responsibility mond valamit? Nem hiszem.
$tabs = array(
'fragment-1' => array(
'label' => 'One',
'content' => '<p>tartalom egy.............</p>'
)
);Ezt meg hol tanultad? Tömb mire való? Azonos elemek (néha a végletekig leeegyszerűsítve (pl. valami alap osztály)) tárolására, nem arra, hogy újabb olyan tömböket rakjunk bele, amelyek inkább szótárak, így az azokban lévő KeyValuePair-ok csak úgy lógnak a levegőben.
private $tabs = array();
Miért private? Mi van, ha később hozzá kell férni egy leszármazott osztályban? Vagy ilyet nem lehet, annyira egységbe zársz?
Soak kódját nem magasztaltam, az ő megoldása PHP-san ronda és finom, egyedül kiemeltem benne egy jó elgondolást, de az is igaz, hogy az övé több és jobb, mint a te általad berakott pár gondolat, ráadásul te csak leszaroztad, ahelyett, hogy megpróbáltad volna megfogni benne a jót, esetleg a jó útra terelni. Sőt, azt mondtad, hogy a public field-ek miatt akármit berakhat oda bárki, miért, a tiédbe talán nem?
Ráadásul az egyszerű megoldást emeled ki, szerintem a te általad folytatott sokkal bonyolultabb azzal, hogy gyakorlatilag egy helyen intézel mindent.
És még egyszer ne add be senkinek, hogy nekem könnyebb volt a rövid beszélgetések után összehozni azt, amit.
-
Peter Kiss
őstag
válasz
pvt.peter #11049 üzenetére
Valami ilyesmire gondoltam, ehhez hasonló irányt nagyobb versenyzők is követtek, nem véletlenül. Hiba lehet benne, nem próbáltam ki, igazából egy sornyi megvalósítást se akartam írni, de így talán egyértelműbb.
---
#11050, Sk8erPeter, ezt hívják ocsmány megoldásnak, no offense.
---
#11051, Soak, az OO-val még nem kerültél közelebbi barátságba, de nagy pirospont a külön header és tab-ok legyártásáért, innen már csak egy lépés a NVI (non virtual interface, én is ezt használtam).
-
Peter Kiss
őstag
válasz
SektorFlop #10999 üzenetére
Linkkel főleg nem törlünk semmit.
Ha linket használsz, akkor készíthetsz valamilyen Javascript megoldást, ami indít egy POST kérést (maga a link nem valódi), vagy a link egy megersőítő oldalra mutat, ahol be van iktatva egy POST form.
-
Peter Kiss
őstag
válasz
Speeedfire #10961 üzenetére
Azért, mert a DateTime gyakorlatilag valuetype-ként működik.
$date->setTime(00, 00, 00);
Ez a hívás nem módosítja a $date instance-t, hanem visszaad egy újat a módosított értékkel. PHP dokumentációja segíthet.
-
Peter Kiss
őstag
A következő újraírás lehetne már olyan, mintha tizedjére csinálnád.
A te megoldásodból akartam épp példát hegeszteni a Logout-ra, de leszavaztad.
Egyébként challenge accepted, ha valakinek nem megy valami, vagy esetleg szeretne más megoldást látni, írjon bátran (úgyse fog senki), hátha tudok valami érdekeset mutatni (saját cuccokból nehéz meríteni, mert design szempontjából tűrhető, amit csinálok, megoldásilag meg úgyis publikus lesz, amint elkészülök egy olyan verzióval, amit kb. bárki használhat).
-
Peter Kiss
őstag
Az ObjectFetcher-rel tudok egy \PDOStatement eredményhalmazából konkrét objektumokat csinálni. Az eredmény kétféle lehet: vagy egy tök semmilyen névtelen objektum lesz minden egyes sor, vagy egy sokkal combosabb variáns: egy base EntityObject-ből származó objektum, aminek ismerem minden property-jét, és mindezt felhasználva azon ColumnAttribute-ok segítségével, amelyek implementálják az IValueProviderColumn interface-t, képes vagyok a raw SQL típusból pl. PHP objektumokat készíteni, hogy csak egyet mondjak: SQL DateTime oszloptípusból PHP DateTime objektumot (alapból string-ként jön vissza). Az eredményhalmaz minden esetben \SplFixedArray lesz függetlenül attól, hogy néhány adatbázisnál kénytelen lehetek előbb siman array-t használni (ezt az aktuális IDbProvider mondja meg).
És az mindenképp baj, hogy már most bonyolultabb megoldásként gondolsz a valódi OO kódokra.
-
Peter Kiss
őstag
válasz
Speeedfire #10943 üzenetére
Megfelelő adattípusok, hasznos indexek, ilyesmi.
-
Peter Kiss
őstag
válasz
Speeedfire #10939 üzenetére
A kiépítés egy dolog, az optimalizálás a másik.
-
Peter Kiss
őstag
Azért nem jó, mert a levegőbe lóg mindened, csak azt nehéz lehet meglátni, ha van ilyen könnyű megoldás is, ezért lenne érdemes a saját feladatodon bemutatni (pl. nem is írnék teljes megvalósítást mindenhová).
Mutatok egy kicsi példát:
class PhotoRepository {
public function __construct(DbContext $db) {//akár egy \PDO is lehet, de még kevés lenne
}
public function FindThreeById($pictureId, $userId) {
}
}
Nem beszélve a visszatérési értékekről, sok más objektumról, pl. ahol a PDO dolgot írtam, ott nálam a teljesség igénye nélkül ilyen objektumok játszanak: DataContext, Query, ColumnAttribute, SqlParameter, ObjectFetcher, PDO
-
Peter Kiss
őstag
válasz
Speeedfire #10936 üzenetére
Ha szar az adatbázis és/vagy rossz az adatbázisszerver beállítása vagy agyonterhelt, akkor elképzelhető, hogy lassú lenne, egyébként kicsi időt vesz igénybe. (Sokkal nagyobb és bonyolultabb lekérdezéseink vannak cégnél, de mivel minden faja, villámgyorsak. Ez pl. egy rettentő kicsi valamit jelent, de pl. PHP-val mindent összelegózni sokkal lassabb lenne, nem ismerem, pontosan mit kell csinálni, de biztos vagyok benne, hogy egy stored procedure-t írnér rá, ami 1:1-ben kiköpné a végső adatokat.)
-
Peter Kiss
őstag
Elvileg OO módon akarsz programozni, de azon túl, hogy osztályokba rendezed a kódod, nem sok mindent teszel az ügy érdekében, inkább ellene dolgozol. Ha van olyan része a kódodnak, ami nem gáz, ha kimegy publicra, akkor küldd el nekem, és megmutatom (Logout bejegyzés formájában), mit hogyan lehetne szebben, értelmesebb csinálni.
-
Peter Kiss
őstag
válasz
Speeedfire #10928 üzenetére
Ez egy nagyon egyszerű SQL lekérdezés, semmit több.
1. kiszeded a kiemelés táblából az érvényeseket, de nem minden oszlopot (id, user_id, hely_erteke AS sorrend, 1 AS priority)
2. UNION hirdetes_tabla-ból kiszeded azokat, amelyek ki vannak épp emelve (ha ki kell ezeket egyáltalán), minden oszlop plusz egy darab: 0 as priority
3. egy megfelelő ORDER BY a végére, és kész is. -
Peter Kiss
őstag
válasz
SektorFlop #10866 üzenetére
Valóban, de ettől még illik tisztán dolgozni.
-
Peter Kiss
őstag
válasz
SektorFlop #10864 üzenetére
Erre gondoltam, hogy csak így be vannak tolva, aztán majdcsak lesz velük valami.
-
Peter Kiss
őstag
válasz
SektorFlop #10856 üzenetére
A megközelítés jó, a megvalósítás nem az igazi, mert, ha jól értem, gyakorlatilag a levegőbe lógnak különféle változóid, amelyeknek aztán értéket adsz, illetve arra is kíváncsi lennék, hogyan is épül fel a teljes mutatvány (nem csak a megjelenítés része, hanem minden). Én is ilyen megoldást használok, de olyan módon, ahogyan az ASP.NET/Razor view engine teszi .NET-ben.
-
Peter Kiss
őstag
válasz
SektorFlop #10811 üzenetére
Valóban rosszul emlékeztem, mert ilyenkor a PHP nem NULL-ra, hanem üres string-re húzza az érték nélküli paramétereket, amire az isset() már jól reagál, de ettől függetlenül is értelmesebb értékkel együtt használni.
-
Peter Kiss
őstag
válasz
SektorFlop #10804 üzenetére
Valóban hibás a HTML kód, de ezzel a megoldással ez:
if(isset($_GET['edit'])){
betöltendő tartalom...
}nyilván nem fog menni.
A page.php?menu=akarmi&edit meghívása a $_GET tömbben ezt fogja eredményezni:
"menu" => "akarmi", edit => NULL
Az isset alkalmazása itt helytelen, mert helyesen FALSE-t ad vissza, magyarázat, megoldás itt. Az array_key_exists() mellett a megoldást az jelentheti, ha az edit-nek adsz valami értéket (ne 0-át):
page.php?menu=akarmi&edit=1
-
Peter Kiss
őstag
A PDO annyiból jó, hogy csak egy drivert kell megtanulni több adatbázisszerverhez, így a kód mobilisebb lehet. ORM-nél nem a model számít, hanem az, hogy a change tracking és a kapcsolatok kezelése jól működjön (a model-ben majdnem csak a különböző adatagok lehetnek [POPO class-hoz közelebb kell lennie, mint akármilyen BC-hoz]).
-
Peter Kiss
őstag
válasz
#68216320 #10605 üzenetére
Használni kellene a helyes mime type-ot, mert a force-download nem szabványos, nem definiált a működése, gyakorlatilag azt is írhatnád, hogy application/the-dark-knight-rises. Jobb híján:
header('Content-Type: application/octet-stream');A PHP ad támogatást a mime kiderítéséhez, ha valamiért ez nem sikerül, akkor használd az application/octet-stream-et, én legalábbis így gondolkodtam a fenti kód összerakásánál.
-
Peter Kiss
őstag
válasz
#68216320 #10603 üzenetére
$httpContext->AddHeader('Content-Description: File Transfer');
$httpContext->AddHeader('Content-type: ' . $this->_fileInfo->MimeType(true));
$httpContext->AddHeader('Content-disposition: attachment; filename=' . \System\IO\Path::GetFileName($this->_fileInfo->FullPath()));
$httpContext->AddHeader('Content-Transfer-Encoding: binary');
$httpContext->AddHeader('Expires: 0');
$httpContext->AddHeader('Cache-Control: must-revalidate');
$httpContext->AddHeader('Pragma: public');
$httpContext->AddHeader('Content-Length: ' . $this->_fileInfo->Size());
$httpContext->TransmitFile($this->_fileInfo->FullPath());
$httpContext->FlushResponse();Content-disposition header-ben adhatsz meg fájlnevet (nyilván az összes infót állítsd be magadnak a header() függvénnyel, mert ez egy saját rendszerből szedett kód, de alapvetően így kell csinálni).
-
Peter Kiss
őstag
PHP-t tanulóknak, használóknak mutatnám az alábbi könyvet:
PHP Master: Write Cutting-Edge CodeSzerintem elég használható darab, és még ráadásul up-to-date is.
-
Peter Kiss
őstag
válasz
trisztan94 #10390 üzenetére
Netbeans?
-
Peter Kiss
őstag
válasz
trisztan94 #10375 üzenetére
$datum indexelése biztosan rossz.
-
Peter Kiss
őstag
Az MVC-ben gyakorlatilag a Controller mindig a legvékonyabb elem.
Egyébként a dátumos mizériának az egyetlen használható feloldása szerintem, ha használjuk a PHP DateTime osztályát, esetleg ezt felhasználva írunk egy használhatóbbat. Mikor fetcheljük az adatokat, már akkor érdemes egy ilyen objektumpéldányt létrehozni az egyes dátumoknak, és utána könnyű dolgunk lesz velük, bárhol is akarjuk mókolni.
-
Peter Kiss
őstag
Most 2 query-t intézel az adatbázis felé, az egyik egy nagy halom felesleges rekordot is visszaad, míg a másik (find_all_friends) jó eséllyel felesleges oszlopokat is lekérdez.
A megoldást egy tárolt eljárás jelentené, ami paraméterben megkapja a $_SESSION['user_id']-t, majd visszaadja csak azt, amit kell. A logikát már leírtad, SQL-ben sem lesz nehéz megfogalmazni, mit is szeretnél. Ha ezt így összehozod, akkor egyetlen felesleges műveletet sem fogsz végezni.
-
Peter Kiss
őstag
válasz
trisztan94 #10305 üzenetére
Nincs lezárva az első if-ed.
Új hozzászólás Aktív témák
Hirdetés
- LAMZU Maya X 8K - Fekete + Artisan MIZUGUMO FUTAE P8 Gari: Mysoft.hu 2027.03.08 -ig - Ár alatt!
- MAGYAR Larousse Enciklopédia 1-2-3 egyben 2999 ft
- Napirajz könyv
- Erdély története I-II-III egyben 3990 ft
- Samsung Galaxy s23 256GB (Snapdragon Gen 2-es SOC) Cream színű gyári garanciás + carbon szálas tok.
- Telefon felvásárlás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- ÁRGARANCIA!Épített KomPhone i5 13400F 16/32/64GB RAM RX 7700 XT 12GB GAMER PC termékbeszámítással
- Azonnali A320 B350 X370 B450 X470 A520 B550 X570 chipset alaplap felvásárlás személyes/csomagküldés
- AKCIÓ! HP USB C G5 Essential (5TW10AA) dokkoló hibátlan működéssel garanciával
- Okosóra felvásárlás!! Samsung Galaxy Watch 5 Pro, Samsung Galaxy Watch 6 Classic
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest