Új hozzászólás Aktív témák
-
fordfairlane
veterán
válasz
PowerBuldog #19211 üzenetére
A php short_open_tag direktívája ki van kapcsolva, ezért ez a kódrész olyan, mintha nem is php kódrész lenne:
<? } else { ?>
Ez kell:
<?php } else { ?>
-
fordfairlane
veterán
válasz
Tomancsek #19184 üzenetére
nem tudom miert van ez ...?
Ez azért van így, mert a böngésző meg tudja nyitni a helyi fájlt közvetlenül, a fájlrendszeren keresztül, a webszerver megkerülésével. Ha viszont localhost url-t használsz, akkor a böngésző a helyi webszervertől kéri le a fájlt. Az meg először a php értelmezőbe tölti be a fájl tartalmát, és a php értelmező által generált kimenetet továbbítja a böngészőnek.
-
fordfairlane
veterán
válasz
func93 #19125 üzenetére
Legegyszerűbben a html5 validációs mechanizmussal, ami többé kevésbé már egyre jobban támogatott fícsör a modern böngészőkben.
HTML5 Form Validation With the “pattern” Attribute
Létezik validációs jquery plugin, sőt pluginok is, ami kompatibilis a régebbi böngészőkkel. jQuery Validation Plugin
Az igazi validáció a domain layer feladata, tehát szerveroldalon is el kell végezni az adatok validálását.
-
fordfairlane
veterán
válasz
PumpkinSeed #18948 üzenetére
De nem is ez volt az eredeti felvetés, hogy a felhasználó kap-e exception, vagy sem, hanem hogy a program dob-e exceptiont vagy sem. Márpedig miért ne dobjon exception egy metódus, ha például hiányzik egy nélkülözhetetlen paraméter, például...
-
fordfairlane
veterán
válasz
PumpkinSeed #18942 üzenetére
Elég nagy hiba. Bevett szokás az errorokat is exception-re konvertálni, aztán a nem elkapott exceptionöket meg loggolni. A user meg kap egy 500 hibaoldalt.
Ha egy változóban nem olyan típusú adat van, ami elvárható, és nem egy formmezőböl jön az értéke, tehát nem formvalidálás témakör, akkor nem érdemes sokat tökölni, jobb megszakítani a program futását.
-
fordfairlane
veterán
válasz
bucihost #18925 üzenetére
Ennél a megoldásnál minden letöltésnél már verziószám kerül az URL-be, tehát a böngésző mindig le fogja tölteni a teljes fájlt. Ez fölösleges. Csak akkor kell változzon az url, amikor az adott fájl tartalma is módosul.
Ennél még talán az is jobb, ha szerveroldalon számolsz checksumot.
style.css?v=<?=md5_file(ASSET_PATH . "style.css"); ?>Az md5_file csak akkor ad más eredményt, ha az adott fájl tartalma változik, viszont ennél a megoldásnál a szerver végez egy plusz fájlműveletet minden oldallekérésnél.
Erre az egész problémakörre vannak automatikus megoldások is, "asset versioning" elnevezés alatt fut a téma. Kezdőnek jó bonyolultak.
-
fordfairlane
veterán
válasz
adika4444 #18886 üzenetére
<?php
function isAvailable($url) {
stream_context_set_default(
array(
'http' => array(
'method' => 'HEAD'
)
)
);
$headers = get_headers($url);
$http_code = substr($headers[0], 9, 3);
return $http_code < 400 ? true : false;
}
$url = "http://www.origo.hu/index.html";
echo isAvailable($url); -
fordfairlane
veterán
mysql_query, konkatenált query stringek, mindez 2017-ben... Arckarmolós szmájli mér nincs?
-
fordfairlane
veterán
-
fordfairlane
veterán
válasz
Vision #18729 üzenetére
Igen, ezt úgy küszöbölném ki, hogy mondjuk 15 percen belül meg kell rendelnie a terméket, különben törlődik a kosár. Nagyjából így működnek azok a rendszerek, amelyekkel találkoztam (mozi, színház).
Én még nem csináltam ilyen rendszert, ahol így kellett kezelni a kosarat, de így elsőre jónak tűnik.
-
fordfairlane
veterán
-
-
fordfairlane
veterán
válasz
Joci93 #18516 üzenetére
... a harmadik megoldást megnézem a doksiban.
A harmadik módszer az, amit manapság javasolni szoktak. Dependency Injection, DI container, Service container, hasonló kulcsszavak mögött találod meg a témakört.
Egyébként szerintetek sem jó, ha egy metódusban 2 vagy több dolog történik? Például kép feltöltés --> méretezés --> mentés. Hanem, ezeket a lépéseket célszerűbb külön - külön metódusba szervezni?
Az attól függ, mennyire komplex egy-egy eljárás. Ha egyberakod, később nehezebb lesz a részeit újra felhasználni egy másik pontján a kódban, mivel így nem eléggé moduláris. Persze meglévő kódot később is át lehet írni, tagoltabbá tenni.
Ezen kívül azt is érdemes szem előtt tartani, hogy a kód olvasásával és értelmezésével általában nagyságrendileg több idő szokott elmenni, mint a leírásával, függetlenül attól, hogy a saját-vagy más által írt programot kell tudnod értelmezni. Egy év múlva ránézel egy metódusra, és hiába te írtad, egyáltalán nem biztos, hogy érteni fogod, mi micsoda. Ha a kódod tagolt, és egyértelmű, hogy mi miért van benne, az sokat számít.
-
fordfairlane
veterán
válasz
Joci93 #18513 üzenetére
1. Lehet úgy csinálni, hogy egyetlen kontrollerobjektumot használsz több metódussal. A közös kódrész, a "getItemDetails" külön metódusba kerül, amit a többi metódus meghívhat.
2. Lehet csinálni a két kontrollerosztálynak közös szülőosztályt, ami tartalmazza a közös kódrészt.
class IndexController extends MyController
class SubmitController extends MyController
class MyController extends Controller3. Lehet csinálni egy service objektumot, amit aztán bármelyik kontroller használhat. Ebben az esetben a service objektumot példányosítani kell az adott Kontroller konstruktorában, vagy valami service manager komponens segítségével. Laravelben is van ilyen, csak én speciel nem ismerem a Laravelt, így ebben konkrét tanácsot vagy kódrészletet nem tudok produkálni.
A framework saját controller osztályát módosítani valóban nem tanácsos.
-
fordfairlane
veterán
válasz
RaPiDsHaRe #18449 üzenetére
Könnyű elkezdeni programozni php-ban, vagy javascriptben, de ahhoz, hogy kiismerd alaposan, ahhoz ugyanúgy évek kellenek, mint bármely más programozási nyelv esetében.
-
fordfairlane
veterán
-
fordfairlane
veterán
válasz
krisz67 #18415 üzenetére
A munkamenet két részből áll. A kliens kap egy munkamenet-azonosítót, amit aztán valamiféle cookieban tárol le. A szerveroldalon ugyanezen azonosító alatt vannak a $_SESSION-ba belerakott adatok.
A munkamenet addig él, amíg vagy a kliens- vagy a szerveroldalon nem tűnik el a kettő közül valamelyik.
A kliensen egy cookie sokmindentől eltűnhet. Az ún. session cookie olyan, ami nem kap lejárati dátumot. Ezek azok a cookiek, amiket a böngésző a RAM-ban tárol, és amelyek a böngésző bezárásakor törlődnek. Be lehet állítani, hogy a PHP session-kezelője olyan cookiet küldjön a böngészőnek, amely permanensen tárolódik a böngészőben, ameddig a lejárati dátum le nem jár, de ehhez emlékeim szerint a php.ini-hez kell tudni hozzáférni. Persze ha a böngészőben törlöd a cookiekat, akkor is elveszik a dolog.
A szerveren a PHP session kezelőben van egy szemétgyűjtő-eljárás. Ez a hosszú ideje inaktív munkamenet-bejegyzéseket törli. Itt is lehet lejárati dátumot adni, hogy mik azok, amik kimehetnek a szemétbe.
Igen, ezek közül bármelyik eltűnik, onnantól kezdve elvesznek a munkamenetben tárolt adatok, és ezeket újra fel kell vinni. Ezeket a lejárati dátumokat kezelni kell tudni.
Egy valamit nem értek. Többször írtál php fájl-írásról. Nem tudom, miféle elképzelés van emögött, de ez semmiféle védelmet nem nyújt. Abban a pillanatban, amint a config.php-ban fizikailag beleíródnak a kapcsolódáshoz szükséges adatok, mindenki hozzáférhet az adatbázishoz, aki ismeri az oldal url-jét. Teljesen mindegy, hogy hogyan írod felül. FTP fájlfeltöltéssel, SSH-val, egyik php átírja a másik php-t a kiszolgálón stb... A webkiszolgálók így működnek. A php script könyvtár osztott erőforrás. Minden változás az össze kliensnél jelentkezik. Ezért nem értem, miért akarsz te php scripteket felülírni. Ez nem járható út. Nincs olyan, hogy php scripteket írsz felül X gépről egy webkiszolgálón, úgy, hogy másnál nem lesz látható ez a változtatás.
-
fordfairlane
veterán
válasz
fordfairlane #18413 üzenetére
-
fordfairlane
veterán
válasz
krisz67 #18412 üzenetére
Szerintem munkamenetbe mentsd el. A munkamenetbe mentett adatok megmaradnak egészen addig, amíg a böngésző be nem zárul.
A munkamenet használata nagyon zanzásítva a következő:
Minden oldalon el kell indítani a PHP beépített munkamenet-kezelőjét. Ez ha nem automatikus, már pedig alapból nem szokott, akkor minden oldal futtatását egy
session_start();
-tal kell indítani. Ezután a PHP scripted hozzáfér egy $_SESSION nevű tömbhöz. Ezt a tömböt úgy használhatod, mint egy szimpla assszociatív PHP arrayt-t. Tehát mondjuk beleírod azt, hogy
$_SESSION["felhasznalonev"] = $_POST["felhasznalonev"];
Egy másik PHP script elején kiadod a session_start()-ot, utána máris ellenőrizheted, hogy a $_SESSION-ben benne vannak-e a szükséges adatok. Ha nincsenek, akkor át lehet irányítani az adatbekérő-formra.
-
fordfairlane
veterán
válasz
fordfairlane #18408 üzenetére
Egyébként elöljáróban annyit, hogyha formról kérsz be adatokat, azok is csak addig hozzáférhetőek, amíg az adott php script amelyik paraméterként megkapta őket, le nem fut. Ha ezeket az adatokat más scriptekben is használni akarod, akkor valahol el kell őket tárolnod. Például eltárolhatod a munkamenetben (session), vagy fájlban vagy adatbázisban. Az utóbbi kettő viszont már felveti az konkurens hozzáférés problémáját is, tehát akkor már kell autentikáció, satöbbi.
-
fordfairlane
veterán
válasz
krisz67 #18407 üzenetére
Szerintem egyszerűbb lenne, hogyha leírnád emberi nyelven, hogy mit akarsz, mert az edit.php feltölti a connect.php-t, a form. php meg feltölti a connect.php hiányzó részeit, ez első ránézésre úgy rossz, ahogy van. Az egész koncepciót hibásnak érzem.
Szóval a kérdés, mit szeretnél megvalósítani? Miért akarsz egy formon keresztül adatbázishozzáférési adatokat bekérni?
-
fordfairlane
veterán
válasz
trisztan94 #18378 üzenetére
Oké, de nem tudom, hogy mi kell, hogy legyen benne, és azt sem, hogy a továbbiakban milyen feldolgozáson esik át a paraméterben kapott érték. Így viszont azt sem tudom megmondani, hogy kell-e egyáltalán valami addslashes, vagy bármi más escapelés.
Az biztos, hogy ebben a formában kötelező paraméter, aminek az értéke szimpla felhasználói melléütés vagy félrenavigálás folytán nem tűnhet csak úgy el, vagy nem lehet olyan tartalmú, ami nem megengedett. Tehát nem form-validálás. Ilyenkor az a legjobb, ha a program exceptiont dob.
-
fordfairlane
veterán
válasz
trisztan94 #18376 üzenetére
Elég ennyi, vagy kihagytam valamit?
Kihagytad, hogy mire akarod használni. Adatbázislekérdezéshez paramétereként nincs szükség escapelésre, amennyiben parametrizált queryket használsz. Más felhasználásra más módszer a jó, egyedi validálás, sanitization, exception dobás stb. Egyébként az, hogy POST vagy sem, az tkp. mindegy. Megbízhatatlan forrásból érkező adat.
Szerintem a fenti példában a !empty és az isset együttes használata felesleges. A !empty emlékeim szerint önmagában elég, nem ad notice-t, ha az adott paraméter nem létezik.
-
fordfairlane
veterán
válasz
nickrivers #18350 üzenetére
Én is a PDO használatát javaslom.
-
fordfairlane
veterán
válasz
concret_hp #18328 üzenetére
Röhej, de a fullos telepítőcsomagokkal a legegyszerűbb (wamp, xampp). Egyébként erre a célra maga a PHP értelmező binárisa is elegendő. Ha kell, van benne beépített webszerver is.
-
fordfairlane
veterán
válasz
pityaa23 #18282 üzenetére
A második, hogy sql-be menteném a regisztrációkor bekért magasságot, de ha a felhasználó vesszőt ír nem pontot pl 185,5 akkor az intval -on keresztül ment input levágja a végét és csak 185.0 lesz. Erre van valami megoldás?
Az intval mindig az egész-részt adja vissza, ez a dolga.
-
fordfairlane
veterán
válasz
rootkiller #18267 üzenetére
Akkor már inkább valami ilyesmi:
$statement = $db->prepare("SELECT * FROM solar WHERE DATE(dt) = :datum");
$statement->execute(array(":datum" => $datum));
while($row = $statement->fetch(PDO::FETCH_ASSOC)) {Mivel nem vagyok mysql közelben, ezért sajnos én sem tudom kipróbálni.
-
fordfairlane
veterán
Mivel a legtöbb webshopban autentikáció nélkül is lehet használni a kosarat, ezért alapvetően a munkamenetet szokás használni. Ezt ki lehet egészíteni db-be mentéssel, ha szükség van a perzisztenciára. Például ha a belépett felhasználó, ha otthagyja az oldalt, következő belépésnél visszakaphatja a kosarat is.
-
fordfairlane
veterán
válasz
DNReNTi #18241 üzenetére
A Silex nem rossz, főleg ha ismered a Symfony-t, de annó emlékszem, hogy az is jóval nagyobb volt a Slimv2.höz képest. Saccra 600 file kontra 60 file rémlik.
Ráadásul most nézem csak, hogy a Slim v3-mal még jobban járhatsz. Tovább modularizálták a rendszert, PSR7 kompatibilis a HTTP interfész, Container-Interop kompatibilis a DI containere... -
fordfairlane
veterán
válasz
DiabloCorsa #18165 üzenetére
Jelen szerkezetnél így néz ki:
<?php
$xmlstr = '
<diponibility>
<products>
<product code="ce0101000499090" generic="01010004" title="JAY kombinált kesztyű sárga kék - 9" totalDispo="0" unit="PÁR">
<detail dispo="0" site="Budapest"/>
<detail dispo="1 000 - 2 999" site="Központi raktár"/>
</product>
<product code="0101000499100" generic="01010004" title="JAY kombinált kesztyű - 10" totalDispo="10 - 29" unit="PÁR">
<detail dispo="10 - 29" site="Budapest"/>
<detail dispo="5 000 - 9 999" site="Központi raktár"/>
</product>
<product code="0101000499110" generic="01010004" title="JAY komb. kesztyű sárga piros -11" totalDispo="0" unit="PÁR">
<detail dispo="0" site="Budapest"/>
<detail dispo="10 000 - 19 999" site="Központi raktár"/>
</product>
</products>
</diponibility>
';
$xml = simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_NOCDATA);
foreach($xml as $products) {
foreach ($products as $product) {
echo '<pre>';
var_dump($product);
echo '</pre>';
echo 'code:' . $product["code"];
echo '<br><br>';
foreach($product as $detail) {
echo 'dispo:' . $detail["dispo"];
echo '<br>';
echo 'site:' . $detail["site"];
echo '<br>';
}
echo '<br><hr><br>';
}
} -
fordfairlane
veterán
válasz
DiabloCorsa #18165 üzenetére
Nem értem a problémádat, ennél egyszerűbb példát nem tudok készíteni. Addig mész befelé foreach-csel, amíg a kívánt mélységig nem jutsz, és ott egyzerű asszociációs tömbindexeléssel megkapod a szükséges attribútumot. Eddig már 3-4 féle xml példát másoltál be, de mindegyiket hasonlóan kell kezelni.
-
fordfairlane
veterán
válasz
DiabloCorsa #18163 üzenetére
<?php
$xmlstr = '
<document>
<product code="0101000499090" generic="01010004" title="JAY kombinált - 9" totalDispo="0" unit="PÁR">
<detail dispo="0" site="Budapest"/>
<detail dispo="1 000 - 2 999" site="Központi raktár"/>
</product>
<product code="0101000499100" generic="01010004" title="JAY kombinált - 10" totalDispo="10 - 29" unit="PÁR">
<detail dispo="10 - 29" site="Budapest"/>
<detail dispo="5 000 - 9 999" site="Központi raktár"/>
</product>
</document>
';
$xmlreslist = simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_NOCDATA);
foreach($xmlreslist as $product) {
echo 'code:' . $product["code"];
echo '<br><br>';
foreach($product as $detail) {
echo 'dispo:' . $detail["dispo"];
echo '<br>';
echo 'site:' . $detail["site"];
echo '<br>';
}
echo '<br><hr><br>';
} -
fordfairlane
veterán
válasz
sirtomi #18157 üzenetére
Talán az történhet, hogy menet közben valami hiba történik, és a php hibaüzenet belerondít a kontentbe. Gyakran úgy van belőve a PHP, hogy ugyanarra az output streamre küldi a hibaüzeneteket, mint magát a tartalmat, így a kettő összekeveredik. Ez fejlesztésnél általában oké, de production környezetben már nem igazán jó. A helyedben szétnéznék a különféle error logok közt.
-
fordfairlane
veterán
válasz
Speeedfire #18140 üzenetére
Sőt, fotóalbumba is lehet. Nem ez volt a téma fókusza.
-
fordfairlane
veterán
válasz
deedetette #18126 üzenetére
Szívesen segítek, de nem dolgozok más helyett.
-
fordfairlane
veterán
válasz
deedetette #18121 üzenetére
A max elem már kicsit összetettebb.
Először fogod azt a tömböt, amiből ki akarod választani a maximumot.
$maxvalue = max($egyiktomb);
Megkeresed a max érték tömb-beli indexét.
$maxindex = array_search($maxvalue, $egyiktomb);
Ezután ezzel az indexszel már kiválaszthatod a hozzátartozó egyéb adatokat a másik tömbből.
echo $masiktomb[$maxindex];
Persze egy sorból is el lehet intézni.
echo $masiktomb[array_search(max($egyiktomb), $egyiktomb)];
-
fordfairlane
veterán
válasz
deedetette #18121 üzenetére
Elválasztást ,hogy lehet rá alkalmazni?
<br> helyett szóköz.
Milyen függvénnyel lehet név szerint sorba rendezni a neveket?
-
fordfairlane
veterán
válasz
deedetette #18118 üzenetére
Végül is nem magát a képet tárolod a tömbben, csak a nevét, de ez momentán lényegtelen.
-
fordfairlane
veterán
válasz
deedetette #18115 üzenetére
<?php
$egyiktomb = array(10, 20, 30, 40, 50, 60);
$masiktomb = array(...);
$harmadiktomb = array(...);
for($i=0;$i<count($egyiktomb);$i++){
echo $egyiktomb[$i] . ' - ' . $masiktomb[$i] . ' - ' . $harmadiktomb[$i];
echo '<br>';
} -
fordfairlane
veterán
Ezen kívül még itt van ez is:
Én ugyan nem ismerem, de ránézésre jónak tűnik. Mondjuk kíváncsi lennék egy kezdő véleményére, hogy mennyire találta jónak ezt a könyvet.
-
fordfairlane
veterán
válasz
#68216320 #18085 üzenetére
Ti milyen megoldást használtok ilyen esetben?
A kettő nem zárja ki egymást. Kezelheted a form kirajzolását, a form submitot és a hibakezelést egy helyről, egy handlerből, de a részműveletek több helyen. Itt kettészedtem nézetre és minden másra. Természetesen ez így még mindig nagyon kezdetleges, de remélem, átjön a lényeg, és az újraküldés ellen védett.
form_handler:
<?php
$form_errors = array();
if($_SERVER["REQUEST_METHOD"] == "POST") {
// validálás
$form_errors["email"] = "Ez az email már foglalt";
$if(!count($form_errors)) {
// mentés
// ...
header("Location: " . $_SERVER["SCRIPT_NAME"] . "?success=1");
exit;
}
}
$success = isset($_GET["success"]?true:false);
require_once("form.php");form.php:
<?php
<?php if(success): ?>
A regisztráció perfektül organizálódik.
<?php endif; ?>
<form method="post">
<input type="text" name="email">
<?php if(isset($form_errors["email"])): ?>
<div class="errorlabel"><?=htmlspecialchars($form_errors["email"])?></div>
<?php endif; ?>
</form> -
-
fordfairlane
veterán
válasz
DNReNTi #18066 üzenetére
Tehát azt nevezed típusdeklarációnak, amit egy a forrást elemző IDE plugin képes kibányászni az annotációkból, ahhoz képest, hogy a nyelv mit támogat nyelvi szinten és mit nem? Végülis bármit lehet bárminek nevezni, ha elég lazák a nyelvi szabályok. Akkor az is típusdeklaráció, ha szólok a mellettem ülőnek, hogy mit használjon az osztálynál.
-
fordfairlane
veterán
Új hozzászólás Aktív témák
Hirdetés
- Gyúrósok ide!
- Autós topik
- Teljes verziós játékok letöltése ingyen
- Azonnali alaplapos kérdések órája
- Ilyen lesz a Fairphone 6
- Íme az új Android Auto!
- hdanesz: Hyundai Ioniq 28kWh - Első benyomások - második felvonás
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- eMAG vélemények - tapasztalatok
- Milyen NAS-t vegyek?
- További aktív témák...
- Eladó konfig! Ryzen 7 7800X3D 2TB SSD 64GB DDR5 RX9070XT 16GB!
- Új, makulátlan állapotú Samsung Galaxy Buds FE, fehér, fél év garancia
- Új, makulátlan állapotú Samsung Galaxy Watch7 44mm ezüst, 2 év garancia
- Új, makulátlan állapotú Samsung Z Fold 6 256GB Tengerészkék, független, 2 év garancia
- Használt TP-Link Deco M4 - AC1200 Router (Mesh-ként is használható)
- Új! Targus - USB-C Dual HDMI 4K HUB - 2 HDMI-vel. Saját töltő nélkül 2 monitorral (120Hz)
- SAMSUNG DDR4 REG ECC 32GB 2666MHz RDIMM szerver RAM modulok, nettó 15740Ft+ÁFA, 1 év gar., több db
- BESZÁMÍTÁS! Asus TUF F15 FX506HM Gamer notebook - i5 11400H 16GB DDR4 RAM 512GB SSD RTX 3060 6GB W10
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- BESZÁMÍTÁS! ASRock H310CM i3 9100F 8GB DDR4 240GB SSD 1TB HDD GTX 1060 3GB AeroCool Strike-X 500W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged