- gban: Ingyen kellene, de tegnapra
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- bambano: Bambanő háza tája
- Parci: Milyen mosógépet vegyek?
- Luck Dragon: Asszociációs játék. :)
- vrob: Az IBM PC és a játékok a 80-as években
- Gurulunk, WAZE?!
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- vrob: 1991 - játék a PC-n
- Argos: Szeretem az ecetfát
Új hozzászólás Aktív témák
-
-
Sk8erPeter
nagyúr
válasz
#68216320 #15023 üzenetére
Amit én írtam, azt is láttad?
Nem azért írtam, hogy ignoráld."Felmerült bennem, hogy esetleg a bbcode nem volna-e megfelelő"
Mégis miért volna bármire is megoldás a BBCode? A BBCode úgy, ahogy van, egy f@szság, már születésétől kezdve értelmetlen volt a létezése. Ahelyett, hogy a felhasználókat a sokkal értelmesebb normál HTML-szintaktikára oktatták volna, beleerőltették a fejükbe tök feleslegesen a semmire nem használható BBCode-szintaktikát. Így az évek során kaptak egy használhatatlan, értéktelen fos "tudást". A Prohardveres BBCode-szerű szintaktika is egy értelmetlen fos, megérdemelne pár botütést, aki ezt bevezette, és aki még ezt a mai napig életben tartja. -
fordfairlane
veterán
válasz
#68216320 #15016 üzenetére
Ahhoz, hogy a bejövő szöveg megfeleljen minden szükséges kritériumnak, ahhoz a html-et DOM objektumfává kell alakítani, és az objektumfán végigmenve szemantikus szűrést kell végezni tagokra, attribútumokra és stílusleírásra.
Ezzel el lehet szőrözni jó sokat, már csak azért is, mert a HTML és a CSS egymástól erősen eltérő ún. "domain specific language", saját szintaktikával, escape szekvenciával, mifenével. Szóval az első próba a Tiny MCE FAQ-ban is ajánlott Html purifier könyvtár feltérképezése legyen szerintem, esetleg valami más, hasonló komponenssel való próbálkozás.
-
Sk8erPeter
nagyúr
válasz
#68216320 #15016 üzenetére
Szerintem valami meglévő library-t kellene felhasználnod a HTML-elemek szűrésére (lásd a korábbi linket, de lehet, hogy van jobb, mint a HTML Purifier), ez azért közel sem triviális feladat, és néhány regexp nem biztos, hogy elegendő rá. Bár azokkal is megoldható részben.
Az, hogy csak class-ok vannak megengedve, azért jelentősen egyszerűsíti a dolgot (mivel csak a class-attribútumot kell engedned), ezen pedig kliensoldalon úgy lehet segíteni, hogy jól jelenjenek meg ezzel a tartalmak, hogy a TinyMCE-ben különböző stílusokat definiálsz előre. Lásd a "Custom formats"-demót; ha a Formats-ba belenézel, ott például láthatod az Example 1, Example 2 stílusokat - ezek egyszerűen sima span-tagek, és class van hozzáadva:tinymce.init({
mode: "textareas",
plugins: "table",
content_css: "css/content.css",
style_formats: [
{title: 'Bold text', inline: 'b'},
{title: 'Red text', inline: 'span', styles: {color: '#ff0000'}},
{title: 'Red header', block: 'h1', styles: {color: '#ff0000'}},
{title: 'Example 1', inline: 'span', classes: 'example1'},
{title: 'Example 2', inline: 'span', classes: 'example2'},
{title: 'Table styles'},
{title: 'Table row 1', selector: 'tr', classes: 'tablerow1'}
],
formats: {
alignleft: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'left'},
aligncenter: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'center'},
alignright: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'right'},
alignfull: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'full'},
bold: {inline: 'span', 'classes': 'bold'},
italic: {inline: 'span', 'classes': 'italic'},
underline: {inline: 'span', 'classes': 'underline', exact: true},
strikethrough: {inline: 'del'},
customformat: {inline: 'span', styles: {color: '#00ff00', fontSize: '20px'}, attributes: {title: 'My custom format'}}
}
});Itt ez a két sor az érdekes persze:
{title: 'Example 1', inline: 'span', classes: 'example1'},
{title: 'Example 2', inline: 'span', classes: 'example2'},Ez jó példa arra, hogy simán megoldható, amit szeretnél, mármint kliensoldalon.
Ettől még szerveroldalon persze kell szűrni ugyanúgy.A TinyMCE-nek is egyébként van már inline szerkesztési funkciója, az egyszerűsíti a dolgot (az oldalra vonatkozó stíluselemek vonatkoznak akkor a szerkeszthető részre is).
De ha a szokásos, iframe-es megoldást választod (mint a fenti), akkor pedig egyszerűen meg kell mondani a TinyMCE-nek, hogy melyik CSS-fájlt használja fel a stílusok érvényesítésére, ezt a content_css opcióval tudod meghatározni (ezt is láthatod fentebb). Ebbe belerakhatod a class-okat, meghatározhatod, hogyan nézzen ki a textarea. Érdemes úgy kialakítani a textarea kinézetét, ahogy várhatóan ki fog nézni a végleges eredmény."Aztán az <img> tovább nehezíti a dolgot, hogy csak a tárhelyen lévő képet fogadja el."
Erre is biztos van már valami nagyon egyszerű függvény, vagy hasonló, vagy csak simán egy regexp is elég lehet (ilyet nem olyan nehéz egyébként írni); esetleg ezt még ki lehet egészíteni file_exists() ellenőrzéssel, ha szükséges (hogy egyáltalán létezik-e az a fájl a szerveren). -
Sk8erPeter
nagyúr
válasz
#68216320 #15009 üzenetére
Jaja, ismerem ezt a formázási lehetőséget TinyMCE-nél, de ezzel tényleg nem úsztad meg még a többi feladatot. Meg hát ez még csak kliensoldal, szerveroldalon így is-úgy is kell whitelist alapján szűrni a kapott inputot.
"Mivel font style választás esetén nem tudnám megúszni vele a css-t. Ha viszont hagynám a <span> tagot, akkor visszaélésre adna lehetőséget."
Milyen visszaélésre gondolsz? Igazából a spannél is a class- és style-attribútumot szabad csak meghagyni, és utóbbira ezenbelül is legyen whitelist, hogy milyen stílusformázásokat engedsz (a class-re mondjuk nehéz, meg feleslegesnek tűnik).
Például egy fórum hozzászólásainál nem lenne jó engedni mindenféle aláhúzásokat, betűszíneket, háttérszíneket, ilyesmiket, amivel elcsúfítható az oldal összképe. -
Sk8erPeter
nagyúr
válasz
#68216320 #15004 üzenetére
Illik ilyenkor megírni, mire jutottál.
Miket szeretnél kiszűrni?
Egyébként szerintem ilyen sanitizing feladatokra valami kész megoldást szokás használni, de úgy, hogy whitelisted van (nem blacklisted).
Ezt kéne kipróbálnod például (ha nincs kéznél másik jól működő megoldás):
http://htmlpurifier.org/Egyébként kliensoldalon úgy emlékszem, enged a TinyMCE is valami előszűrést (persze ez nem elég önmagában, csak egy első szűrőnek jó).
-
Sk8erPeter
nagyúr
válasz
#68216320 #14645 üzenetére
Ja, törölhető a console.log nyilván, ott csak az volt a cél, hogy megmutassam, hogyan nyerheted ki az értékét a kiválasztott elemnek egyszerűen. (event.target.value)
A checkboxos kérdésre: nem "csináltam" semmilyen elemet, egyszerűen csak lekértem a rendkívül fantáziadúsan "checkbox" id-vel rendelkező elemet (document.getElementById-vel), és belepakoltam a visszatérési értéket egy változóba. Aztán azzal lehet azt kezdeni, amit akarsz. Itt a kódban szerepe nincs, csak beleraktam, először gondoltam rá, hogy kezdek vele valamit szemléltetésként, aztán menetközben rájöttem, hogy nincs kedvem."Visszatérve az onChange eseménykezelőhöz this.form.submit()-al már ment volna az is nem? Persze nem lenne szép a kód azt elismerem
"
Igen, és igen. Hangsúlyosabb, hogy nem lenne szép a kód, de valóban működött volna. -
Sk8erPeter
nagyúr
válasz
#68216320 #14642 üzenetére
"onChange="javascript:submit()" amire gondoltál?"
Nem. Ez a "javascript:" rész eleve nem szükséges (honnan maradt ez meg a fejekben?). Az onchange eseménykezelő eleve JavaScript-kódot vár, úgyhogy felesleges explicite megmondani neki. Ez az onchange-be rakott submit azért sem jó, mert a submit() a formra vonatkozik, nem a selectre, az onchange eseménykezelőjét viszont akkor már a select elemhez kellene írni. Ezenkívül eleve szét kell választani a HTML-kódot a JavaScript-kódtól (és ugyanez vonatkozik a CSS-kódokra is egyébként), az ilyen attribútumokkal bedrótozott megoldások nem jók, hosszú távon karbantarthatatlanok. Igaz, vannak bizonyos beállítás-jellegű dolgok, amiket néha be kell drótozni, például a data-* attribútumok, de az más lapra tartozik.
Gyorsan bepötyörésztem neked egy példakódot, mire gondolok:
http://jsfiddle.net/25FXE/1/
Itt látható, hogy a JavaScript-kód független a HTML-kódtól.
Ha a myTestForm.submit(); sort kikommentezed, és megnyitod a konzolt (Ctrl+Shift+I, Console fül), akkor láthatod a kiválasztott értéket, ami az eseménykezelőn belül az event.target.value-val érhető el.(#14643) Kommy: szívesen.
-
DNReNTi
őstag
válasz
#68216320 #14636 üzenetére
Először vizsgáld hogy a szöveg 500 karakter hosszú e.
Ha nem akkor kész is vagy.Ha több mint 500 karakter, akkor a substr függvénnyel addig vizsgálod a következő karaktereket amíg egy mondatvégi írásjelet nem kapsz, és mindet hozzáfűzöd az eredeti 500 karakterhez.
Vagy strpos függvénnyel meghatározni az 500. karaktertől következő legközelebbi megfelelő karakter pozícióját majd a substr-el addig levágni az elejétől. Talán ez még egyszerűbb.
-
fordfairlane
veterán
válasz
#68216320 #14497 üzenetére
Bár egyelőre az IF()-ben a több paraméter zavarba ejt.
Az első paraméter count(*) ha nem nulla, akkor a második ( 1 )-et adja vissza, egyébként a harmadikat ( 0 ). A countot, azaz a sorok számát ezzel 1:0-ra konvertálod. Bár ezt az alakmazáskódban is meg lehet csinálni, akkor marad a sima count- lekérdezés. Ez a legegyszerűbb.
-
DNReNTi
őstag
válasz
#68216320 #13602 üzenetére
Én eleve úgy oldanám meg hogy csak a filenév és kiterjesztés legyen adatbázisban tárolva. Persze ha egészen biztosan mindig jpg akkor kiterjesztés nem kell. Tehát pl csak: 'hello' és 'jpg' egy-egy mezőben.
1. sql lekérdezés
2. szükséges adatok mentése ($filename, $fileextension)
3. $path = 'http://valami.hu/images/';Innen pedig már pofon egyszerű.
echo '<a href="' . $path . $filename . '_big.' . $fileextension .'" rel="lightbox[gallery]" title="' . $filename . ' banner"><img src="' . $path . $filename . '_small.' . $fileextension .'" alt="' . $filename . ' width="200" height="200"></a>';Ha nem oldható meg ez és mindenképp az egész html tag-es bazárt kell variálni ... az bajos.
-
DeltaPower
addikt
válasz
#68216320 #13602 üzenetére
mysql string függvények és/vagy regexp replace, szép feladat amúgy
-
Tele von Zsinór
őstag
válasz
#68216320 #13470 üzenetére
XP alatt biztosan volt lehetőség ütemezett feladatok futtatására, szerintem 7-ben is ott kéne ennek lenni. Létrehozol egy ilyet, és a futtatandó parancsként megadod a php.exe-t, paraméterben átadva a php script teljes elérési útvonalát. Így futó webszerverre sem lesz szükséged.
-
Sk8erPeter
nagyúr
válasz
#68216320 #13322 üzenetére
Ilyenkor érdemes megnézni a visszatérési értékeket, és ha gond volt, akkor megnézni a hibát, pl. a Te kódodnál valahogy így:
$result = curl_exec($handle);
if($result === false){
echo 'Curl error: ' . curl_error($handle) . '. Curl error no.: '. curl_errno($handle);
}
else {
..................
}a hibaüzenet pedig ezt fogja írni:
"SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed"
(hibakód: 60)Ezt a hibát pedig ez fogja megoldani:
http://stackoverflow.com/questions/6400300/php-curl-https-causing-exception-ssl-certificate-problem-verify-that-the-ca-cer/10566962#10566962curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
Viszont figyelj a biztonsági problémára, amire a linkelt hsz.-ben felhívják a figyelmet.
-
válasz
#68216320 #13321 üzenetére
Nálam rendben lefut a kódod, semmit nem írtam hozzá:
HTTP/1.1 200 OK
Date: Wed, 01 May 2013 07:37:37 GMT
Server: Apache/2.2.0 (Fedora)
Content-Location: api.php
Vary: negotiate,Accept-Encoding
TCN: choice
X-Powered-By: PHP/5.3.3-7+squeeze15
Content-Length: 194
Content-Type: text/html
{"pool_name":"FTC Simple Pool - DontMine.Me","hashrate":"803510","users_mining":"266","total_users":"713","workers":"831","shares_this_round":47353,"last_block":"28129","difficulty":40.84082096}#13310 Soak : ez a megoldás jobban néz ki?
<?php if ( isset($_GET['szin']) && in_array($_GET['szin'], array('#FF0000', '#00FF00', '#0000FF') ) ) { echo '<body bgcolor="'.$_GET['szin'].'">'; } ?> -
#68216320
törölt tag
válasz
#68216320 #13321 üzenetére
Közben úgy nézem a cURL megoldás azt sem jeleníti meg, amit a file_get_contents(), így valószínű a hiba a kódban és a részemről cURL ismeretének hiányából adódik. Keresgélek infókat inkább róla.
Persze, ha valaki tudna linkelni (php.net picit érthetetlen még) vagy pár szóban esetleg kódsorban segítene, nagyon megköszönném. Természetesen nem azt kérem, hogy a feladatot más oldja meg csak könnyebb lenne egy működő kódból kiindulnom, hogy megismerjem a működését. -
Peter Kiss
őstag
-
DanielK
addikt
válasz
#68216320 #13229 üzenetére
jogosultság probléma lehet. akkor localhoston futna? mert akkor a mappának kell írás és olvasási jogot adni az adott felhasználónak.
nálam macen volt ilyen probléma, hogy nem tudott fájlt másolni egy mappába, mert nem volt jogosultságom rendszerszinten másolni bele.
ha a saját mappastruktúráját használod (lamp), akkor elméletileg mennie kellene -
Tele von Zsinór
őstag
válasz
#68216320 #13150 üzenetére
Ha mysqli-t használsz, érdemesebb volna a prepared statement támogatását használni, de első lépésnek ez is jó. Hátránya, hogy könnyen elfelejthetsz valamit escape-elni, és akkor máris SQLi sebezhető vagy.
Kiírás előtt? Nem, query-be helyezés előtt kell ez neked. Az escape-elés annyit csinál, hogy query-biztossá teszi az inputot.
-
Tele von Zsinór
őstag
válasz
#68216320 #13146 üzenetére
Ha szöveget viszel az adatbázisba, akkor azt escape-elni kell, az addslashes() erre nem megfelelő. Ha az elavult mysql függvényeket használod, akkor a mysql_real_escape_string() a barátod. Ha modern technológiát használsz, akkor a mysqli vagy a PDO prepared statementjeinek nézz utána (attól függően persze, melyikkel dolgozol).
A problémád azonban valószínűleg másutt van - tippre mire hozzád kerül az adat, addigra már ott vannak benne a perjelek. Kapcsold ki a magic_quotes-t.
-
fordfairlane
veterán
válasz
#68216320 #13052 üzenetére
Mégis egyre több helyen látom csak simán beírva a kulcsot.
A PHP a tömb indexelése során a jelöletlen (idézőjeltelen) karaktersorozatot stringgé konvertálja, amennyiben nincs ilyen nevű konstans. Ha viszont létezik, mert a script, vagy a PHP a jövőben definiál egy ilyen nevűt, abban a pillanatban megváltozhat a program viselkedése. Ezért kerülendő a $valami[kulcsindex] forma használata, amennyiben kulcsindex egy stringkulcs, nem pedig egy konstans.
-
cucka
addikt
válasz
#68216320 #13062 üzenetére
Igen, ini_set, amennyiben nincs kikapcsolva a szerveren.
Változót értékadás nélkül nem tudsz létrehozni.(#13064) tildy
altalaban mondjuk nem kell, de ha fuggvenyt irsz, neha erdemes odairni, milyen bemeneti paramot varsz
Jó ötlet, sajnos primitív típusokra ez nem működik. -
Sk8erPeter
nagyúr
válasz
#68216320 #13058 üzenetére
Jól csináltad, ez localhoston, fejlesztői környezetben nyugodtan maradhat így. Ahogy tildy is mondta, arra viszont figyelj, hogy a notice-ok kijelzését viszont nem szabad úgy hagyni éles környezetben, ott, ahol már külső szemlélők olyan információkat is láthatnának ezáltal, amit nem szabadna (értsd: egy rossz szándékú illetőnek minden plusz információ csak további segítség). Éles környezetben is el kell azonban kapni minden hibát, azokat naplózni, és a felhasználónak csak "felhasználóbarát hibaüzenetet" megmutatni. (Pl. a felhasználó ne tudja, a kód hányadik sorában lett valami elrontva, vagy konkrétan mi volt a hiba.)
-
tildy
nagyúr
válasz
#68216320 #13056 üzenetére
Ahh, oke, altalanossagban irtam.
A PHP amikor elkezdtek fejleszteni anno, nagyon mas volt a normal tipusos , kotott nyelvektol. Ez sok esetben lehet epp elony, de sokszor hatrany is.
Ma ahogy latom , azert mar megy a coding standard itt is. Nem dob hibat a PHP persze, pont a fentiekbol fakadoan amugy.Ha ilyen coding style warningot akarsz kapni, hasznalj codesniffert. Mi PSR2-re nezzuk.
-
Sk8erPeter
nagyúr
válasz
#68216320 #13052 üzenetére
Semennyire nem elfogadott, és nem helyes, mert notice-t kapsz, ha úgy használod.
(#13054) Speeedfire :
úgy is megy, de valamelyest lassabb lehet a változó-behelyettesítések (vizsgálata) miatt.
Szóval tényleg érdemes aposztrófot használni, mondjuk ha változóval kell konkatenálni, úgy is jobb szerintem olvashatóság szempontjából. -
Sk8erPeter
nagyúr
válasz
#68216320 #12696 üzenetére
"php.ini-ben lehet beállítani valahol alapértelmezettként az error_reporting-et?"
Jaja:
http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting"Illetve emlitetted az if( ! empty( $_POST['valami'] ) )-t. Inkább ez vagy az isset() ?"
itt tudod megnézni bővebben:
http://php.net/manual/en/function.empty.php
mondjuk a lényege már ki lett vesézve. A kettő nem ekvivalens, csak arra céloztam, hogy az empty()-ben eleve "benne van" egy isset()-vizsgálat is, tehát ez nem fog notice-t dobni, ez is nyelvi elem (nem függvény):
"No warning is generated if the variable does not exist. That means empty() is essentially the concise equivalent to !isset($var) || $var == false."
Tehát ha a !isset($_POST['valami']) igaz, akkor az is igaz, hogy empty($_POST['valami']). De az empty() ezentúl még lehet akkor is igaz, ha az adott változó érték nélkül lett deklarálva, vagy annak értéke egyenlő a következők valamelyikével: "", 0, 0.0, "0", NULL, FALSE, array(). Pont ezért lett korábban az a végkövetkeztetés, hogy ha általános validációt szeretnél, akkor arra nem feltétlenül alkalmas az empty(). De ha az előbbi értékek közül egyik sem felel meg, akkor kényelmes eszköz lehet, de ennél is igaz az, hogy ettől még nem biztos, hogy jó: a kódod nem mondja meg az azt olvasó számára egyértelműen, hogy milyen értékeket vársz el, bár ettől függetlenül valamelyest beszédes is. Csak azt megzavarhatja, aki nincs tisztában az előbb írtakkal, hogy ha mondjuk egy felhasználó éppen 0-t ír egy adott űrlapmezőbe, akkor is igazzal fog visszatérni az empty(), és ez nem minden esetben jön jól.=======================
(#12699) biker :
"de a ===-nek is van szerintem hátránya: "0" === 0 FALSE szerintem, mert az első sztring a másik num
nem?"
De igen, ahogy írtad, a "0" === 0 az hamis, mivel a három egyenlőségjellel típusvizsgálatot is végzel, és ez nagyon jól is van így. Szóval ez nem hátrány.
Ha már ennyire belementünk: van például az intval() függvény is:
http://php.net/manual/en/function.intval.php
na ez is teljesen alkalmatlan vizsgálatra, mert az intval("asd") eredménye például 0 lesz, ami nyilvánvalóan nem jó. Tehát PHP-ben elég kacifántos lehet adott esetben egy validáció. -
biker
nagyúr
válasz
#68216320 #12698 üzenetére
jó kis vitát kavart a kérdésem...
Igen, a "-" nem szám, és kényszerből használom, mert alap, hogy terméket nem enged 0-val rögzíteni a rendszer, de mégis van ajándék termék, erre lett a - jel bevezetése
Sajna a "-" == 0 igaz, de a ===-nek is van szerintem hátránya: "0" === 0 FALSE szerintem, mert az első sztring a másik num
nem? -
cucka
addikt
válasz
#68216320 #12696 üzenetére
Hogy világos legyen az empty és az isset közötti különbség:
A következő két feltétel ekvivalens, leszámítva egy notice-t:
isset($v)
$v !== null
Tehát az isset true-val fog visszatérni bármilyen változóra, ami nem létezik, vagy létezik és a típusa/értéke null. Jól látható, hogy a neve ellenére az isset()-nek valójában semmi köze ahhoz, hogy egy változó (vagy tömb index) definiált-e vagy sem. (Ennek eldöntésére a get_defined_vars() való).
Az isset() abban az esetben működik biztonságosan, ha soha, semmilyen körülmények között nem használod a null értéket egyetlen változódnál sem. Felhasználó által post-olt űrlapok esetén ez alapból adott, mert minden értéked a tömbben string vagy array típusú, a kód többi részében viszont a te feladatod ezt biztosítani.És a következő két sor szintén ekvivalens
empty($v)
!isset($v) || $v != true
Az empty() az ekvivalens feltétel második fele miatt problémás. Itt a != operátort látod, ami azt jelenti, hogy a php itt a $v értékét előbb át fogja cast-olni bool típusúra. Ezért van az, hogy a "", "0", "0.0" stringekre az empty egyaránt igazzal fog visszatérni. A gyarkolatban ebből az következik, hogy az empty() teljesen alkalmatlan bármire, visszatérési értékének semmi köze ahhoz, hogy "üres"-e a változó értéke vagy sem. Javaslom, soha, semmilyen körülmények között ne használd az empty()-t, ez egész egyszerűen egy rosszul kitalált nyelvi elem a php-ban.(Egyébként is, a php-ban az == és != operátorok nem tranzitívak, ez elég ok ahhoz, hogy kerülendők legyenek. Helyette javasolt a === és !==, illetve úgy megírni a kódot, hogy tisztában legyél vele, melyik változód milyen típusú.)
Ez így nagyjából érthető?
-
Sk8erPeter
nagyúr
válasz
#68216320 #12694 üzenetére
"miért nem jó, ha közvetlen if( $_POST[valami] ) módon vizsgálom egy űrlapmező kitöltését"
Azért nem jó, mert ha nincs beállítva a $_POST tömbben a "valami" kulcs, akkor a szigorúbb hibajelzés (pl. error_reporting(E_ALL | E_STRICT); ) bekapcsolása esetén kapsz egy notice-t:
"Notice: Undefined index: valami in ...../FAJLOD.php on line XYZ"
azért fontos ezekre figyelni, mert a későbbiekben problémád származhat belőlük, ezért érdemes eleve úgy tervezni a kódot, hogy legyen alternatíva, ha már eleve a kulcs sincs beállítva. Tehát először ellenőrzöd, megvan-e egyáltalán a kulcs, ha nincs, akkor nem is foglalkozol tovább a potenciális értékeivel.
Közvetlen "veszélye" a notice-on kívül nincs a dolognak, inkább csak rejtett hibaforrás lehet rosszabb esetben, ezért érdemes rá eleve felkészülni: nem sokkal növeli a kódbázis méretét, viszont legalább elkerülsz egy apró hibalehetőséget. -
Sk8erPeter
nagyúr
válasz
#68216320 #12692 üzenetére
Hogy mi? Szerintem te voltál itt kioktató, azt éreztetted, hogy márpedig te jobban tudod, elmagyaráztad, hogy miért is marhaság, amit én írtam, visszakérdeztél, hogy "dolgoztál már C-vel?", ugyan "miért ne lenne jó?", és leírtad, hogy "azt még gondold végig". Ezután hozzád hasonlóan én is kifejtettem a véleményem arról, amit írtál.
De bántás nem volt benne (cinizmus valóban, de nem a sértés feltett szándékával). De várj, hol volt a hozzászólásodban segítségkérés? Mert én azt nem láttam benne, hanem sajnos csak pont, hogy kioktatást.
-
Sk8erPeter
nagyúr
válasz
#68216320 #12690 üzenetére
Dolgoztam már C-vel, de ez hogy jön ide? Sehogy.
A két nyelv összehasonlításának nincs is igazán értelme. Eleve más az alapvető céljuk. Ezenkívül ha már összevetjük, a C nyelv eleve jóval szigorúbb, mint a PHP, sajnos (szerencsére?) a PHP olyan nyelv, aminek segítségével kezdők is nagyon gyorsan és egész egyszerűen össze tudnak tákolni-gányolni funkcionálisan "működő", de attól még akár hibákkal telerakott kódot is (aztán legfeljebb a hibajelzéseket elnyomják, és meg is van minden oldva...).
Egyébként attól még, mert valami kényelmes, önmagában nem biztos, hogy jó is. Pl. ha a kódodban az a "kérdés", hogy a "pista" egyenlő-e a 0-val (== használata esetén), akkor nem biztos, hogy jó, ha a válasz "igen" (mert egyébként nem egyenlők). Az üres stringre ("") még OK, de így nem, ezzel persze neked nem kell egyetérteni (meg amúgy is, ez van, ezt kell szeretni).
A magyarázatot meg köszi, nem kérem, mert én is ezt magyaráztam itt."Például, ha tudni akarom van-e értéke egy form mezőnek if( $_POST['valami'] ){}"
Hát ez elég rossz példa volt, mert ha így csinálod, akkor rosszul csinálod. Először is nem biztos, hogy be van állítva az adott kulcs a $_POST tömbben az űrlap elküldésekor, elég csak a radio buttonökre vagy a checkboxokra gondolni. Először azt kell ellenőrizni, hogy egyáltalán létezik-e a tömb adott kulcsa (isset($_POST['valami'])), aztán lehet ellenőrizni, nem egyenlő-e egy üres stringgel, ha már az értékét akarod majd vizsgálgatni, de ekkor már lehet azt a módszert is használni, ha nagyon akarod, amit használtál, bár ez így szerintem nem teszi egzakttá, jól olvashatóvá a kódot. Esetleg az isset()-et és az üres stringre való csekkolást lehet egy empty()-vel helyettesíteni ( if( !empty($_POST['valami']) ) { // van bepötyögött érték } ). Persze ha szereted szívatni magadat, kikapcsolhatod a notice-ok kijelzését még a fejlesztés idejére is."Azt még gondold végig, hogy hogyan tudna numerikus 0-t küldeni egy űrlap. Sehogy. Textként megy és neked kellene kiszedni belőle a numerikus értéket, mint ahogy C-ben van. A PHP lazán kiszedi a string elejéről."
Ja, hogy szerinted az egyetlen összehasonlítási alap az lehet, hogy valaminek az értéke űrlapból (a $_POST tömbből) jön....?
És szerinted annak is örülni kell, és sokkal jobb, hogy ha írsz egy olyat, hogy
echo '10xyz'+10;
vagy azt, hogy
echo array_sum(array('10xyz', 10));
akkor mindkét esetben kijön az, hogy 20?
Akkor azt hiszem, te megtaláltad a magad számára tökéletes nyelvet, amiben szabadon lehet gányolni.Ezeket azért "még gondold végig"...
-
Sk8erPeter
nagyúr
válasz
#68216320 #12687 üzenetére
Nem értem a magyarázatodat, hogy attól még miért lenne "jó" az automatikus konverzió pl. egy összehasonlításnál...
Még csak logikai összefüggés sincs a két dolog között. Pl. begépelte a felhasználód, hogy "pista", te meg szerveroldalon összehasonlítod azzal, hogy 0-e a mező: if("pista" == 0){ // akkor lesz valami, ha 0 az érték, márpedig nem az }. Akkor ez ilyen értelemben miért is "jó"?
-
Peter Kiss
őstag
-
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).
Új hozzászólás Aktív témák
Hirdetés
- Hamarosan megkezdődik a nubia 2,8K-s táblagépének szállítása
- Energiaital topic
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Rezsicsökkentés, spórolás (fűtés, szigetelés, stb.)
- Tőzsde és gazdaság
- Debrecen és környéke adok-veszek-beszélgetek
- Kerékpárosok, bringások ide!
- BestBuy topik
- Kormányok / autós szimulátorok topikja
- Milyen routert?
- További aktív témák...
- AMD Ryzen 7 7700X - Új, 1 év garancia - Eladó!
- Apple Watch ultra 2 49mm Natur Titanium, Új, 1 év Apple garanciával
- Gamer PC - R5 5600, RTX 3060 és 16gb RAM + GARANCIA
- HP Zbook 14 laptop (14FHD/I7-G5/8GB/128SSD/MagyarVilágítós)
- Jó áron ÁRON ELADÓ! Üzleti HP Elitebook 1040 G9 Laptop! / i5-1245U 16GB 256GB
- BESZÁMÍTÁS! Apple iMac Pro (2017) 5K - Xeon W-2140B 64GB DDR4 RAM 1TB SSD Radeon PRO Vega 56 8GB
- Országosan a legjobb BANKMENTES részletfizetési konstrukció! Vásárolj okosan, fizess kényelmesen!
- Telefon felvásárlás!! Samsung Galaxy A50/Samsung Galaxy A51/Samsung Galaxy A52/Samsung Galaxy A53
- BESZÁMÍTÁS! Apple MacBook Pro 14 M4 MAX 36GB RAM 1TB SSD garanciával hibátlan működéssel
- BESZÁMÍTÁS! Microsoft XBOX Series S 512GB játékkonzol garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest