- Xiaomi 15 Ultra - kamera, telefon
- Yettel topik
- Google Pixel topik
- Poco X6 Pro - ötös alá
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Google Pixel 10 és 10 Pro összehasonlító gyorsteszt
- Xiaomi 14T Pro - teljes a család?
- iOS alkalmazások
- iPhone topik
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
Új hozzászólás Aktív témák
-
fordfairlane
veterán
válasz
szcsaba1994 #16826 üzenetére
Bármi lehet a gond, mivel ezek csak kódrészletek.
-
fordfairlane
veterán
válasz
honda 1993 #16809 üzenetére
Ebbe már én is belefutottam wamp installáláskor, de már nem emlékszem, hogy mi volt a megoldás. A XAMPP-nál ilyen nincs, azt egyszerűbb feltelepíteni.
-
fordfairlane
veterán
válasz
peterfihugo #16747 üzenetére
Ez egy Ruby on Rails alkalmazás. Az ERB kiterjesztésű az Embedded Ruby fileok. Ezek többnyire nézetfileok, amik vegyesen tartalmaznak Ruby és HTML kódot.
-
fordfairlane
veterán
válasz
#68216320 #16730 üzenetére
Nem tudom mik ezek, de a httpd-sni.conf-ból lestem ki.
Az AllowOverride valami olyasmi, hogy engedélyezheted, hogy .htaccess-ből milyen webszerver-direktívát írhatsz felül.
Most hogy jobban megnéztem a httpd.conf-ot, két AllowOverride is van benne. Egy általános jellegű, és egy a webroot directoryjára. Elég az utóbbinál engedélyezni a .htaccess-t. Illetve az "All" sem feltétlen szükséges, le lehet szűkíteni a felülírható direktívák körét a megfelelő kulcsszóval. Persze ha dev szerverről van szó, akkor nem érdemes ennyire belemenni a részletekbe.
Ez nyilván biztonsági megfontolásokból van így beállítva, hogyha egy támadó valami hiba folytán .htaccess fájlt tud létrehozni a szerveren, azzal ne tudja a webszervert átkonfigurálni.
-
fordfairlane
veterán
válasz
PumpkinSeed #16705 üzenetére
Ez azért érdekelt engem, mert $valami['asd'][1] így hivatkoztam az asszociatív tömbbe helyezett elemekre és nem akart értéket visszaadni semmilyen módon.
A while($row = mysql_fetch_assoc()) egyszerre egy rekordot olvas be, és tárol el egy $row nevű változóban. A $row-ban az aktuális rekord egyes mezőit éred el, pl. a $row["img_path"]-ban megkapod az aktuális sor img_path nevű mezőjének értékét, de amint a ciklus újra lefut, a $row tömb új értéket kap, az előtte levő sor adata felülíródik.
Ha te a rekordokat össze akarod gyűjteni, mert további műveleteket akarsz vele végrehajtani (rendezni, csoportosítani pl.), akkor azt kb. így lehet:
$recordset = array();
while($row = mysql_fetch_assoc()) {
$recordset[] = $row;
}Ezután kapsz egy recordset nevű tömböt, ami n darab asszociatív tömböt fog tartalmazni, épp annyit, amennyi rekordot beolvastál a while-ban.
-
fordfairlane
veterán
válasz
PumpkinSeed #16698 üzenetére
A fetch_assoc és fetch_* társai egyszerre egy sort olvasnak be, tehát ha a sorrenden szeretnél változtatni valahogy, akkor vagy az adatbázis-lekérdezésedet kellene módosítani, hogy a PHP a megfelelő sorrendben kapja a recordsetet, vagy pedig be kell olvasni az összes sort egy PHP tömbbe, majd a PHP-ban végrehajtani a rendezést. A fetch_assoc egy rekordot tömbbe olvas be, de ez csak egy asszociatív tömb, aminek az elemei az aktuálisan beolvasott egyetlen rekord mezőit tartalmazzák.
Ha az adatbázis-lekérdezésnél nincsen rendezés-klauza (ORDER BY), akkor a kapott sorrend nem garantált. Sok esetben egyszerűen abban a sorrendben kapod meg a rekordokat, ahogy fizikailag egymás után helyezkednek el a háttértáron.
Esetben, ha jól értem, célszerű lenne felvenni egy plusz mezőt az adattáblába, amely eltárolná a feltöltés dátumát, és erre már lehetne növekvő vagy csökkenő sorrendű lekérdezést végrehajtani. Mysql-ben ezt egyszerű megoldani (TIMESTAMP DEFAULT CURRENT_TIME()), és ezt a mezőt a Mysql automatikusan be fogja állítani az aktuális időre a rekord létrejöttének pillanatában, a PHP kódban a rekordbeszúrásnál ezzel a mezővel nem is kell törődni.
Ha ez valamiért nem járható út, de a táblának van egy autoinkrement kulcsmezője, akkor arra is lehet rendezést végrehajtani.
HA ez sem jó valamiért, akkor csak az az út marad, hogy beolvasod az összes rekordot egy tömbbe, majd megfordítod az elemek sorrendjét (tán array_reverse(), vagy valami hasonló), majd végigmenve a tömbön, elvégzed a kiírást.
-
fordfairlane
veterán
válasz
DNReNTi #16668 üzenetére
Szerintem erre nincs általános megoldás. A behúzott fájl az adott function scope-jába importálódik. Ha azt akarod, hogy akár globálisan, akár függvényből vagy metódusból be lehessen húzni egy programrészt, akkor vagy a $GLOBALS tömböt használd, vagy egyáltalán ne használj globális változókat. Ha az includeolt fájlban csak függvény vagy osztálydeklaráció van, akkor nincs scope probléma.
-
fordfairlane
veterán
válasz
tothjozsi96 #16655 üzenetére
Jó akkor úgy írom, hogy szétebbenválasztani. A nézetet széttebben szokták választani, neadjisten külön templatekbe teszik, hogy jól meg lehessen különböztetni az alkalmazás- vagy megjelenítási logika imperatív PHP kódrészét a megjelenítést szemantikusan deklaráló HTML résztől. És külön szokták rakni a stílusleíró CSS-t, az alkalmazás kliensoldali logikáját kezelő javascript kódot, stb, stb.. még akkor is, ha akár be is ágyazhatnák azt a HTML forrásba.
Alapvetően a különféle domain specifikus programnyelveket a fejlesztők általában igyekeznek egymástól elszeparálni.
-
fordfairlane
veterán
válasz
PumpkinSeed #16646 üzenetére
Igazából én külön választanám a PHP-t és a HTML-t bár ez szerintem csak nekem jó, lehet más máshogy csinálja de én így szoktam a jobb átláthatóság érdekében:
Itt mondjuk pont nem választottad külön a html-t és a PHP-t. Akkor lenne különválasztva, ha külön fájlban lenne.
-
fordfairlane
veterán
válasz
honda 1993 #16633 üzenetére
A config.php-ban jelzi a hibát.
-
fordfairlane
veterán
válasz
honda 1993 #16625 üzenetére
Miért nem a komplett forrást rakod be? (Ha ez a komplett forrás, akkor hiányzik a php escape tag: <?php ) Miért nem formázod a programkódot a programkód formázással, hogy ne folyjon ki a szeme annak, aki esetleg segíteni akar? Mit jelent az, hogy "nem működik"? Nem rakja ki a formot, vagy a form submit nem megy?
Legalább értelmesen kérdezni tudnátok, de még a magyar sem megy, nemhogy a PHP.
-
fordfairlane
veterán
válasz
CSorBA #16623 üzenetére
Ja igen. Mondjuk nem ez a kulcsa a lényegnek, ez inkább egyfajta jellemző implementálási részlet, vagy ha úgy tetszik, design pattern.
Ez az ún. "Post/Redirect/Get" módszer, ami pont ennek a fajta hibának, vagy inkább protokoll-hiányosságnak a kiküszöbölésére született módszer.
-
fordfairlane
veterán
válasz
tothjozsi96 #16614 üzenetére
Értem, de nekem ez így elsőre eléggé furcsának tűnik.
Az is, de egyelőre fogadd el, hogy a sebesség miatt így van megoldva. (az átlapolódó konkurrens tranzakciókezelés gyorsítása miatt a memóriában tárolja az InnoDB az autoincrement számlálót, úgyseérted
).
Először indíts egy tranzakciót, kérdezd le, hgy van-e olyan érték az adatbázisban, és ha nincs, akkor hajtsd végre az INSERT-et. Majd tranzakció kommit.
-
fordfairlane
veterán
válasz
PumpkinSeed #16567 üzenetére
Pedig én ezt jól bírom, de most valami eltört bennem.
-
fordfairlane
veterán
Ha a PHP topik ilyen szinten marad a továbbikban, öngyi leszek.
-
fordfairlane
veterán
válasz
DNReNTi #16508 üzenetére
Van azon a string mezőn index?
Egyébként meg a biztonsági vitához: Szerintem egy kezdő ne akarjon ilyenbe belemenni, elég volna, ha a beépített sessionkezelőt használja. Ez még mindig sokkal jobb opció, mint ahogy eredetileg akarta, hogy majd nekiáll cookieba menteni házibarkács hash-adatokat meg jelszót. Nem is értem, hogy miért erőlteti ezt a dolgot, amikor alapvető dolgokkal nincs tisztában.
-
fordfairlane
veterán
válasz
tothjozsi96 #16483 üzenetére
Bocs, de ez marhaság.
-
fordfairlane
veterán
válasz
tothjozsi96 #16479 üzenetére
Ha a felhasználó munkamenetével kapcsolatos adatokat akarsz tárolni, akkor az általánosan bevett megoldás az, hogy a kliensnél egy egyedi, véletlengenerált azonosítót tárolsz, pl. hash formájában, minden más adatot a szerveren. A hash azonosítja a klienst minden egyes requestnél, így a többi adat hozzárendelése szerveroldalon könnyedén megoldható. PHP-ban erre való a beépített session-kezelő.
-
fordfairlane
veterán
válasz
Sk8erPeter #16470 üzenetére
akkor már legyen a webalkalmazáshoz képest relatív
Vagy pedig használhatja a $_SERVER["DOCUMENT_ROOT"] -ot.
-
fordfairlane
veterán
válasz
tothjozsi96 #16460 üzenetére
-
fordfairlane
veterán
válasz
PumpkinSeed #16447 üzenetére
Maga az MVC csak nagy vonalakban ad iránymutatást arra nézve, hogy miféle nyelvi elemeket keverhetsz a kódodban. Az nagyjából oké, hogy a html a megjelenítéshez kapcsolódik, de az adott nézetnek számos egyéb funkciója is lehet.
A manapság bevett gyakorlat nagyjából annyi, hogy az oldal szerkezetét leíró html kód többnyire egy template fájlba kerül, amibe csak a legegyszerűbb php, vagy az adott template kezelő nyelvi elemei kerülnek bele. Pl. blokkdefiniálás, iteráció (foreach), beágyazás (include), csak a legegyszerűbb vezérlési szerkezetek. A többi, az adott nézethez kapcsolódó kódrészek mondjuk egy View objectben kaphatnak helyet, ami tisztán csak php utasításokat tartalmaz.
Én úgy szoktam csinálni, ha az adott rendszerben nincs template kezelő, hogy a nézetben a PHP alternatív nyelvi szintaktikáját használom, ezzel is érzékeltetve, hogy ez egy nézetleíró fájl.
<?php if(): ?>
<?php else: ?>
<?php endif; ?>
<?php foreach(): ?>
<?php endforeach; ?> -
fordfairlane
veterán
válasz
honda 1993 #16425 üzenetére
Én a XAMPP installt úgy szoktam kezdeni, hogy a webroot mappát kitörlöm, utána pakolom oda a saját cuccaimat.
-
fordfairlane
veterán
válasz
Speeedfire #16422 üzenetére
idén is a BME keretein belül. Nem az OE-n?
-
fordfairlane
veterán
válasz
PumpkinSeed #16410 üzenetére
A XAMPP feltelepítésénél ez sem egyszerűbb. Annyi az egész, hogy next-next-finish. Ja, és meg kell jegyezni, hogy webroot alaphelyzetben a C:\xampp\htdocs. Van hozzá control panel, ahol indíthatod, service-ként regisztrálhatod a megfelelő komponenst. Eddig még nem láttam olyan embert, akinek problémát okozott volna a XAMPP üzembehelyezése.
-
fordfairlane
veterán
válasz
Peter Kiss #16400 üzenetére
Hát szerintem is, de én már inkább bele sem szólok, mert akkor megint keletkezik még ezer hsz, mire egy XAMPP install összejön. Eleve a localhost miért a xampp/htdocs/valami/-re mutat, már ez nem kerek, de nem, erős vagyok, nem szólok közbe, nem kérdezek rá. Eleve ha valaki ennyire nem ért hozzá, minek választ custom installt...
-
fordfairlane
veterán
válasz
Des1gnR #16300 üzenetére
Szerintem az lehet a probléma, hogy a customer-processing-order.php-t valamiféle controller script tölti be, ami egy másik könyvtárban található.
Első ránézésre az XML fájlmentés az aktuális könyvtárba történik, ami viszont azon múlik, hogy maga a script, amit a webszerver hajt végre, és ami aztán betölti többek közt ezt a customer-processing-order.php-t, hol található.
Mivel az XML generáló függvény nem paraméterezhető, hogy hova milyen néven mentsen, ezért célszerű lehet úgy módosítani, hogy oda mentse, ahol ez a függvényt deklaráló "ordertoxml.php" fájl található. Én ezt a sort:
$xml->save("40780.xml") or die("Error");
ebből ezt:
"40780.xml"
átírnám valami ilyesmire:
dirname(__FILE__) . DIRECTORY_SEPARATOR . "40780.xml"
-
fordfairlane
veterán
válasz
Orionk #16265 üzenetére
Nálam localhoston működik. Ennyi az oldal:
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="utf-8">
</head>
<body>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/hu_HU/sdk.js#xfbml=1&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like-box" data-href="https://www.facebook.com/degazholegballonklub" data-colorscheme="light" data-show-faces="true" data-header="true" data-stream="true" data-show-border="true"></div>
</body>
</html>Ha webszerver nélkül, közvetlenül nyitom meg az oldalt a böngészőben, akkor nem megy.
-
fordfairlane
veterán
válasz
PumpkinSeed #16153 üzenetére
Ez csak félig vicc. A jó kérdésfeltevés félút a megoldáshoz. Sokszor az a gond, hogy nem érteni a kérdést, vagy hiányzik a kérdéshez maga a kontextus (forráskód, jsfiddle példa, whatever).
-
fordfairlane
veterán
válasz
Tele von Zsinór #16116 üzenetére
Az, hogy a PHP csoport melyiket supportálja vagy sem, annak nagyjából semmi köze a témához. Igen, széttöredezett. Ahány hosting szolgáltató, annyiféle verzió az 5.2-tól 5.5-ig.
-
fordfairlane
veterán
Kiadták a PHP 5.6.0 -t:
Pár hónapja még egy 5.2.*-essel kellett szenvednem. Kezd nagyon széttöredezni a platform.
-
fordfairlane
veterán
válasz
honda 1993 #16031 üzenetére
Adatbevitelre szolgáló elem a weboldalba beágyazva.
-
fordfairlane
veterán
válasz
honda 1993 #15982 üzenetére
A fájl nevét is meg kell adni az url-ben, amibe a PHP kód be van ágyazva, kiterjesztéssel együtt. Alapbeállítások esetén egyetlen kivétel van, ha a fájlt index.php-nak nevezed el. Ebben az esetben elég a könyvtár nevét megadni az url-ben.
És még egyszer: php kiterjesztésű legyen a fájl! Ha a Windowsban az Intézőben ki van kapcsolva az ismert fájltípusok kiterjesztésének kiíratása, az bekavarhat.
-
fordfairlane
veterán
válasz
honda 1993 #15977 üzenetére
letrehoztama htdocs mappaba egy masik mappat amiben ezek lesznek. ebbe raktam bele ezt a fajlt,de semmi
\xampp\htdocs\mappanev
tartalma
//localhost/mappanev/
nével lesz elérhető a böngészőn keresztül.
-
fordfairlane
veterán
válasz
honda 1993 #15977 üzenetére
a leirasban az van hogy xhtml fajl body reszebe kell beleirni.
A PHP egy html-be beágyazható scriptnyelv, de csak megadott kiterjesztésű fájloknál működik. XAMPP alapbeállítással csak a .php kiterjesztés esetén indul el a PHP értelmező. A XAMPP alapból a \xampp\htdocs könyvtárat használja, ez lesz az ún. webroot.
ahhhaaaa,de mintha azt elfelejtette volna megemliteni hogy mi a megfelelo hely.
Mert ez attól függ, hogy a webszerver (ami normál esetben egy tőled független kiszolgálón fut) hogyan van feltelepítve és beállítva a saját gépeden.
-
fordfairlane
veterán
válasz
honda 1993 #15974 üzenetére
Lehet, hogy a fájl kiterjesztése nem php lett. Elsőnek legyen mondjuk index.php. És persze az Apache webszervernek futnia kell.
-
fordfairlane
veterán
válasz
honda 1993 #15971 üzenetére
pedig ez meg csak nem is egy kod.
De, ez PHP kód, aminek a végrehajtásához szükség van PHP futtatókörnyezetre, akármilyen egyszerű is.
-
fordfairlane
veterán
válasz
DNReNTi #15967 üzenetére
Nem gondolnám, hogy van tutorial, ami ettől alapabb szintről indul.
Hát pedig sok olyan oktatási anyag van, ami ennél sokkal alapabban, szájbarágósabban, való életből hozott analógiákkal mutatja be a témakört. Pl. hogy mi az a változó, mi az a referencia, mi az a kifejezés (expression), mi az az utasítás (statement), hogyan épül fel a web alapú kliens-szerver rendszer, hogyan lép interakcióba a két hálózati végpont, stb, stb... Persze ilyen leírások magyarul nemigen vannak.
-
fordfairlane
veterán
válasz
honda 1993 #15966 üzenetére
Rövid bevezetőnek talán ez is elmegy.
Esetleg nézd meg ezt, a PDF változat ingyen letölthető:
Csak a könyv második része foglalkozik a PHP alapú szerveroldali programozással.
Én ugyan csak a Drupal könyvet olvastam tőle, de az korrektül megírt, korrektül összeszedett, és felépített anyag. Látszik, hogy olyan ember készítette, aki tanít is.
-
fordfairlane
veterán
válasz
CharlieDrop #15953 üzenetére
Érdemes megnézni a minimális követelményeit annak a szoftvernek, amit futtatni akarsz rajta. Ha saját programot használsz majd, kezdőként nem hiszem, hogy érdekelni fog az 5.4 vagy 5.5 újdonságai.
-
fordfairlane
veterán
válasz
Joci93 #15897 üzenetére
25 checkbox esetén célszerű egy listát csinálni, és azon iterálva ellenőrizni, hogy melyik szerepel a bemenőparaméterek közt. A listában lehet egyéb opciókat is tárolni, ha bizonyos checkboxokat egyedileg kell kezelni, validálni, satöbbi.
Mivel nem írtál konkrétumot, így nehéz konkrétumot válaszolni, mindenesetre a 25 már akkora mennyiség, aminél valószínűleg érdemes generalizálni mind a checkboxok html renderelését, mind a submit feldolgozását, és az adattárolás részét. Kérdés, hogy technikailag felkészült-e vagy ilyenre vagy sem.
Alternatívaként érdemes szétnézni a PHP-s web frameworkök (Symfony, Laravel, Zend) form moduljai körül, amik pont ennek az automatizálására vannak kitalálva.
-
fordfairlane
veterán
válasz
Sk8erPeter #15883 üzenetére
20-30 percig tartó műveletnél szerintem az emailes értesítés a legmegfelelőbb.
-
fordfairlane
veterán
Melyik PHP verzión próbálkozol? Nekem jó a numerikus kiíratás 5.4.7 alatt. Ez a kód ezt a kimenetet produkálja:
<?php
$chart = array(
Array ( "x" => "2014-07-17 01:00:21", "y" => 0 ),
Array ( "x" => "2014-07-17 01:05:21", "y" => 0 ),
Array ( "x" => "2014-07-17 01:10:22", "y" => 10 ),
Array ( "x" => "2014-07-17 01:15:21", "y" => 0 ),
Array ( "x" => "2014-07-17 01:20:21", "y" => 20 ),
Array ( "x" => "2014-07-17 01:25:22", "y" => 0 )
);
print_r(json_encode($chart));
?>Kimenet:
[{"x":"2014-07-17 01:00:21","y":0},{"x":"2014-07-17 01:05:21","y":0},{"x":"2014-07-17 01:10:22","y":10},{"x":"2014-07-17 01:15:21","y":0},{"x":"2014-07-17 01:20:21","y":20},{"x":"2014-07-17 01:25:22","y":0}]
-
fordfairlane
veterán
válasz
kemkriszt98 #15851 üzenetére
Van egy sortörés a nyitó és záró textarea tag között, így submitnál szerintem a $_POST[''desc] egy sortörést fog tartalmazni, ha nem írsz bele semmit.
-
fordfairlane
veterán
válasz
kemkriszt98 #15827 üzenetére
$filenamestruct = explode('.', $file);
$file_type = strtolower(end($filenamestruct)); -
fordfairlane
veterán
válasz
Petyyyyy #15793 üzenetére
A $connect globális változó, amely nem fog látszani alapból egy másik osztály metódusán belül. Mivel látom, hogy statikus metódusokat használsz, ezért a legegyszerűbb, ha a login metódus paramétereként átadod a $connect változót.
Egyébként jobb lenne, ha a permission class-t inkább példányosítanád, és akkor a konstrktorában kaphat egy mysqli objektumot. Ezt egy objektum propertyben eltárolod, így könnyen használhatod a permission objektum az összes metódusában.
2. Javaslom, hogy includeok helyett használj osztálybetöltőt, lehetőleg valami szabványosat, pl. PSR-0 -t)
-
fordfairlane
veterán
válasz
DeltaPower #15734 üzenetére
Szerintem is.
-
fordfairlane
veterán
válasz
trisztan94 #15708 üzenetére
A Google Mapsnek is van fizetős Enterprise változata, ahol a mass geocoding engedélyezett.
-
fordfairlane
veterán
Meg voltam róla győződve, hogy ezért akasztás jár komolyabb fejlesztői körökben, de akkor mégsem.
Nem jár akasztás. Azokon a platformokon, ahol nem létezik sem push message, sem permanens kétirányú adatkapcsolat (socket jó darabig nem volt, és a régi böngészőkben ma sincs), csakis a polling marad. A kliens kénytelen rendszeresen a szerverhez fordulni, és lekérdezni, van-e változás, mivel a szerver nem tudja értesíteni erről.
-
-
fordfairlane
veterán
válasz
DeltaPower #15529 üzenetére
Nem csak nálad, hanem az oktatóoldalon is.
-
fordfairlane
veterán
válasz
PumpkinSeed #15526 üzenetére
Látom. Lemaradt a function kulcsszó a metódusdefinícióknál.
-
fordfairlane
veterán
válasz
PumpkinSeed #15524 üzenetére
Szerintem előbb nézd meg a php.net-en, hogy hogyan kell osztályt deklarálni, és aztán azt hogyan kell használni PHP-ben. Ez az egész egyszerűen hibás szintaktikájú.
-
fordfairlane
veterán
válasz
PumpkinSeed #15501 üzenetére
Itt például remekül látszik a mysql_* kezdetű függvényhívások használatának egyik hátránya. Sehol semmi hibaüzenet. Persze meg lehet oldani, csak ehhez tele kell szórni a programot mysql_error kiíratásokkal.
-
fordfairlane
veterán
válasz
Speeedfire #15489 üzenetére
Írtam én valahol is azt, hogy a cookienál kell eszképelni is valamit?
Ha nem tűnt volna fel, épp ez a téma. Az hogy mit hogyan escapelsz, az nem független attól, hogy hova szánod.
-
fordfairlane
veterán
válasz
Speeedfire #15484 üzenetére
setcookie-nál nincs mit escapelni. Ha direktben akarod manipulálni a cookie-kat kezelő fejléceket, akkor urlencode-ot használsz.
-
fordfairlane
veterán
válasz
csabyka666 #15463 üzenetére
Légyszi ne rakd offba a hszeket, csak ha nem PHP témájú. A cookie állítgatás lehetőleg mindenféle kiíratást, html kódot előzzön meg. Az ob_start ugyan segíthet, de jobb, ha arra sincs szükség.
-
fordfairlane
veterán
válasz
csabyka666 #15460 üzenetére
A mysql escape-t mysql műveleteknél kell használni.
-
fordfairlane
veterán
válasz
csabyka666 #15449 üzenetére
Injection ellen vagy escapeled a bejövő paramétereket, vagy prepared statementet használsz. Utóbbira a mysqli vagy a pdo interfész ad eszközöket. Ne használd a mysql_* kezdetű függvényeket. 2011 óta "deprecated" státuszúak, és valószínűleg ki lesznek szedve a PHP.ból a jövőben.
-
fordfairlane
veterán
válasz
csabyka666 #15424 üzenetére
Nincsenek rejtett dolgok. Felépítesz egy adatbázis kapcsolatot, az addig él, amíg a PHP fut az adott végrehajtási szálon, akárhány fájlból is tevődik össze. Amint véget ér a futás, a kapcsolat lezárul magától.
-
fordfairlane
veterán
válasz
csabyka666 #15421 üzenetére
Jó, de ha egyszer te tudod, hogy melyik fájlod milyen sorrendben hívódik meg, akkor még milyen plusz infó kell? Én adtam egy olyan megoldást, ami sorrend-független, minden másra ott a közös programfájl, ami mindig végrehajtódik. Azt behúzod az összes php fájlod elejére. Ha az index.php csinál mindent, akkor annak az elejébe teszed.
-
fordfairlane
veterán
válasz
csabyka666 #15419 üzenetére
Ez az előnye a "kreátor" objektumnak. Csak meghívod a megfelelő metódusát, az pedig visszaad neked egy adatbáziskapcsolati objektumot. Az objektum életciklusával nem kell foglalkoznod. Sem azzal, hogy mikor hívod meg, hányszor hívod meg, hol hívod meg, hogy az index.php jön először, vagy azután, vagy soha.
Egyszer létrehozza, és utána már ugyanazt adja vissza az összes olyan programrésznek, amelyiknek adatbázis műveleteket kell végrehajtania.
-
fordfairlane
veterán
válasz
Sk8erPeter #15409 üzenetére
Ebben igazad van, de tulajdonképpen ez ilyen Singleton+Factory minta egyvelege.
Nem tudom, minek az egyvelege. Külön osztály végzi a példányosítást, és a példány felügyeletét futásidőben, ennyi. A Singletonnal szemben a leggyakoribb kifogás, hogy keveredik az objektum hagyományos szerepköre, a domain-funkció, és a példányosítási-futásidejű implementálási technika, és ezért nehezen tesztelhető.
Itt nem keveredik, szét van választva. Persze lehet tovább alakítani, hogy automatikus tesztekre alkalmasabb legyen, dependency konténerrel és társaival, de ez már végképp olyan szint, amivel semmiképp nem terhelnék egy kezdőt. Már ez is sok volt neki.
-
fordfairlane
veterán
válasz
csabyka666 #15404 üzenetére
Működik, csak nehezen módosítható, nehezen karbantartható (nem tesztelhető automatikus testscriptekkel, nem testreszabható attól függően, hogy fejlesztői vagy éles környezetben fut stb, stb...). Ezért vannak ezek a technikák, amikkel nem csak működni fog a rendszered, de modulárisabb, ezáltal kezelhetőbb is lesz.
-
fordfairlane
veterán
válasz
Sk8erPeter #15401 üzenetére
Talán rosszul tudom, de a singleton egy olyan objektum, ami önmagát állítja elő, futásidőben egyszer. Ez nem saját magát állítja elő, hanem a PDO-t.
-
fordfairlane
veterán
válasz
csabyka666 #15399 üzenetére
Egyrészt mysql-* kezdetű függvényeket nem használunk, ott van a PDO.
Másrészt ne ez legyen a scriptjeid elején. Mi van, ha megváltozik az inicializálás, minden oldalon egyesével átírod? Csinálj mondjuk egy bootstrap.php fájlt, és abba tedd bele azokat a programrészeket, amiket minden script lefutásánál használni akarsz. A scriptjeid elején így csak a bootstrap.php-t kell behúznod.
Harmadrészt meg lehetőleg használj osztálybetöltőt, hogy többet ne kelljen foglalkoznod fájlok include-olásával, de ez már haladó szint.
-
fordfairlane
veterán
válasz
fordfairlane #15397 üzenetére
Én egy ilyet használok:
<?php
class DbFactory {
private static $instance;
private function __construct() {}
private function __clone() {}
public static function getInstance() {
if(!self::$instance) {
self::$instance = new PDO("dsn", "user", "pass", array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
}
return self::$instance;
}
}Bárhol szükséged van adatbáziskezelésre, ennyiből megkapod a handlert:
$dbh = DbFactory::getInstance();
A DbFactory csak egyszer csinál objektumot az első meghívásnál, után ugyanazt adja vissza minden további meghívásnál. Majdnem olyan, mint egy Singleton.
-
fordfairlane
veterán
válasz
csabyka666 #15395 üzenetére
Bőven elég egyszer az elején megnyitni, a script lefutásakor a kapcsolat úgyis lezáródik magától. Nagyon nem ajánlott minden query előtt új kapcsolatot létrehozni, sőt, kifejezetten hibákat is tud produkálni.
-
fordfairlane
veterán
Az látszik, hogy túl sok az { és a } , van valami tippetek, hogyan lehetne ezt megoldani, vagy milyen formában tároljam el a txt fájlban?
Szerintem az lehet a gond, hogy a "WriteTXT"-ben a fájlírás hozzáfűzi az adatokat a régi fájltartalomhoz. Nem hozzáfűzni kell, hanem felülírni.
Ha persze a hozzáfűzés a cél, akkor azt másképp kell megoldani. Például úgy, hogy beolvasod a fájl tartalmát, feldolgozod, hozzáfűzöd a kívánt "rekordot", és visszaírod a fájlba. -
fordfairlane
veterán
válasz
csabyka666 #15378 üzenetére
Ha a fv. kimenetét ugyanabba a változóba rakod, miért ne? De ha ragaszkodsz az str_replace-hez, bizonyára annak is van mb_ (mb -> multibyte, azaz unicode stringekhez való) változata.
-
fordfairlane
veterán
válasz
csabyka666 #15375 üzenetére
Így konvertálni sem kell.
-
fordfairlane
veterán
válasz
csabyka666 #15283 üzenetére
Nem tudom, mennyi adatról van szó, de megelőlegezem, teljesen fölösleges hülyeségen folyik a rugózás.
-
fordfairlane
veterán
válasz
csabyka666 #15280 üzenetére
Egzakt precizitásra a decimal való (tipikusan "monetary" értékre lett kitalálva), de ha a vonalkódszámokkal nem végzel matematikai műveleteket, akkor a varchar is jó. Integert nem ajánlom ilyen esetekre, úgy is stringként kell használnod alkalmazásszinten, hogy meglegyen a 13 karakter hossz.
-
fordfairlane
veterán
válasz
csabyka666 #15276 üzenetére
decimal(13) unsigned zerofill
-
fordfairlane
veterán
válasz
trisztan94 #15260 üzenetére
Nagyjából három funkciót valósít meg az osztályod. Egyrészt kapcsolatot kezel, másrészt query és paramétereket rendel össze, harmadrészt valamiféle típuskényszerítést végez saját binddal.
A Single Responsibility Principle, első, klasszikus OOP vezérelv mentén: Az elsőt egy DBFactory osztályba tenném, ami példányosít, ha kell, és a PDO-t adja vissza az alkalmazásrétegnek. A második funkciót egy MyPDO szerű osztállyal oldanám meg, esetleg az emlegetett Doctrine DBAL komponenssel. (MyPDO extends PDO, azt hiszem, pont ebben a topikban emlegettem). A harmadikra (az a nagy switch szerkezet) igazából nem tudom, hogy ebben a formában szükség van-e.
-
fordfairlane
veterán
válasz
DNReNTi #15225 üzenetére
Ha esetleg kényelmetlennek tartod a prepare-bind-execute használatát, ajánlom a Doctrine DBAL-t, ott van egy olyan metódus, hogy executeQuery. Egyébként erre sokan csináltak saját, PDO-ból örökölt osztályt, amiben egyetlen metódushívással helyettesítik ezt a három műveletet.
Új hozzászólás Aktív témák
Hirdetés
- GARANCIÁLIS BONTATLAN MINDEN MACBOOK AIR M4
- Tyű-ha Lenovo Thinkpad X1 Carbon G8 Profi Érintős Laptop 14" -50% i7-10610U 4Mag 16GB/512GB FHD IPS
- AKCIÓ BONTATLAN GARIS IPHONE 16 PRO ÉS PRO MAX MINDEN SZÍNBEN ÉS TÁRHELLYEL 1 ÉV GARANCIÁVAL
- iPhone 17 Air - összes tárhely és szín bontatlan, viszonteladótól független 1év Apple garanciális
- iPhone 13 128GB midnight-black, független + extra tokok
- Gamer PC-Számítógép! Csere-Beszámítás! I7 6700 / RTX 3050 / 32GB DDR4 / 512 SSD!
- iKing.Hu-Samsung Galaxy S24 FE Blue Stílusos erő, 120 Hz AMOLED 8/128 GB Használt, karcmentes
- Jawbone Up okoskarkötő, aktivitásmérő
- HIBÁTLAN iPhone 13 mini 256GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3408
- 0perces !Samsung Galaxy Book5 Pro 360 2in1 Core Ultra 7 256V 16GB 1TB 16" WQXGA+ AMOLED TOUCH 1évgar
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest