Calyd Posted April 14, 2009 Posted April 14, 2009 Ezzel nem is vitatkozom, ezért is írtam, hogy nyilván ez a szebb megoldás, hiszen ez az elvi helyes.
Csaba_1 Posted April 14, 2009 Posted April 14, 2009 Örülök, hogy most ez a téma, mert engem is érdekel hogy hogyan működik az isset és ellenőrzős társai. Annyi bajom van nekem ezzel, hogy minden űrlap által küldött értéknél ellenőrizni kell és ha van egy pár ilyen akkor lesz pár száz sorom ami után elkezdhetem végre az érdemi részét. Van erre valami ötletes megoldás, hogy egyszerűen röviden lehessen ellenőrizni a $_POST, $_GET tömb változóit? Pl egy ciklussal vagy ilyesmivel? Akár függvényeket is használnék erre. Kezdőként az is érdekelne, hogy mennyire hasznos ha minden pici dolgot fv-be rakok és azokat hívogatom meg. (Szeretnék gyorsan futó oldalakat írni ezért a kódoptimalizálás és php gyorsaság is érdekelne.) Már évek óta programozom, pascal, C, jelenleg C#, PHP, JS, és ott nincs ennyire bajom ezzel mint a PHP-nál. Tudom sokat kell még tanulnom, de szeretnék jó lenne a dologban. Ti, hogy csináljátok?
Calyd Posted April 14, 2009 Posted April 14, 2009 Ciklussal - szerintem - nem tudod ellenõrizni mondjuk a POST tömb változóinak beállítottságát, hiszen a tömb elemein mennél végig, amik nyilván léteznek. Bár az esetleg megoldható, hogy egy foreach ciklussal végigmész mondjuk a POST tömb elemein, és egy másik tömbbe beteszed az indexeket (amik épp az ûrlapelemek nevei). Így ebben a tömbben csak olyan elemek nevei lesznek, amikre biztosan érvényes a $_POST['elemnév'] hivatkozás.
arpsoft Posted April 14, 2009 Posted April 14, 2009 Ha évek óta programozol, akkor tudnod kell, hogy a függvények, eljárások írásakor az elsõ feladat a bemenõ adatok validálása (létezik és a megengedett értékkészletbe tartozik) Ezt nem lehet megúszni.
Calyd Posted April 14, 2009 Posted April 14, 2009 $seged = array(); $i = 0; foreach($_POST as $urlapelemnev => $ertek) { $i++; $seged[$i] = $urlapelemnev; } A segéd tömb elemeinek értékei biztos érvényes indexek a POST tömbben. De különösebben nem látom értelmét ennek a megoldásnak, függetlenül attól, hogy én ajánlottam. @arpsoft: Én úgy vettem ki, hogy nem is megúszni akarta, csak valami gyors megoldást találni valami olyasmire, hogy kvázi "egyszerre", vagy kevés lépésben tudja ellenőrizni.
payskin Posted April 14, 2009 Posted April 14, 2009 Nincs rá gyors megoldás, ez a szükséges a rossz, amit nem lehet megúszni. Az oldalaim általában úgy működnek, hogy van egy action paraméter, ami megmondja az oldalnak, hogy épp mit csinálunk, milyen műveletet hajtunk végre (listázzuk a rekordokat, adatfelvitelre készülünk, most kapjuk az adatokat a felvitelből, stb.). Ezt szoktam először kezelni egy egyszerű switch...case szerkezettel úgy, hogy amennyiben nincs megadva, vagy hülyeség jön benne, általában a listázó (alap)műveletre ugrik magától. Tekintve, hogy a különböző műveletek különböző paramétereket igényelnek, a case ágakban ezek külön meg vannak írva. Ha a különböző ágakban sok a hasonló ellenőrzés, szoktam írni egy különálló ellenőrzőfüggvényt, aminek átadom paraméterben, hogy melyik $_POST vagy $_GET változót ellenőrizze le. Aztán ezt lehet variálni. Megúszni nem lehet.
Csaba_1 Posted April 14, 2009 Posted April 14, 2009 Köszönöm a tanácsokat! Nem megúszni akartam, hanem lehetõleg egyszerre lerendezni ezt a "problémát". De látom nem nagyon lehet és nem is éri meg, mert kifelejthetek valamit így is, úgy is.
Calyd Posted April 16, 2009 Posted April 16, 2009 Azt szeretném megérdeklõdni, hogy a mail() függvény mikor tér vissza hamis értékkel? Mert én akárhogy kínlódom, nem sikerül összehoznom, pedig érdekelne.
arpsoft Posted April 16, 2009 Posted April 16, 2009 Elvileg akkor tér vissza FALSE értékkel, ha nem sikerült elküldeni a levelet, vagy a sendmail program ( vagy amivel küldöd a levelet) hamis értéket ad vissza, vagy a PHP nem veszi át a visszatérési értéket (sigchild nélkül fordított php).
Calyd Posted April 16, 2009 Posted April 16, 2009 És mikor nem sikerült elküldeni egy levelet? Mert nekem logikus lenne, hogy például nem létező e-mail címre nem lehet küldeni, tehát ekkor hamissal térne vissza. De nem ezt tapasztalom. Persze lehet, hogy a sosem.letezett.email.cim@sosem.letezett.domain.hu egy valódi e-mail cím... A kérdés egyébként azért foglalkoztat, hogy viszonylag egyszerűen tudjak hibás esetet produkálni, és így valóban értelmet kapjon az, hogy elágazással vizsgálja az ember sikeres küldést.
payskin Posted April 16, 2009 Posted April 16, 2009 A PHP-nak fogalma nincs arról, hogy a cím, amire a levelet elküldi, létezik-e vagy sem. Mint ahogy neked, a levelezőprogramodnak, sőt még a levelező szerverednek sincs. A dolog (az internet) nem így működik. :-)
Calyd Posted April 16, 2009 Posted April 16, 2009 Sejtettem, hogy valami ilyen lesz a háttérben. A kérdésem így a következő: hogyan tudok egyszerűen hibát produkálni a mail-nél? A helyzet az, hogy egy űrlapról szeretnék e-mailt küldeni (állandó e-mail címre), és az a kérdés foglalkoztat, hogy a felhasználó meg tud-e adni olyan adatokat, amivel a mail függvény hamissal tér vissza? Mert ha ilyen nincs, akkor felesleges elágazásban vizsgálni a sikeres küldést. (Az űrlap nagyon egyszerű: a nevet, e-mailt, tárgyat és a levél szövegét kell megadni.)
arpsoft Posted April 16, 2009 Posted April 16, 2009 Ha állandó mail címre akarsz küldeni, akkor mi romolhatna el. Arra gondolsz, hogy olyan adatokkal tölti fel az ûrlapot a felhasználó, amit nem tud elküldeni a mail?
Calyd Posted April 16, 2009 Posted April 16, 2009 Balázs válaszát én úgy értelmeztem, hogy nem számít, ha idétlen e-mail címre próbálok küldeni levelet. De egyébként igen, ilyenre gondoltam. Gyanítom persze, hogy nem tud megadni semmi "károsat" ilyen egyszerû példa esetében, csak biztosra akarok menni. Órán lesz szó ugyanis errõl, és ha ebben az esetben kvázi semmi gond nincs, akkor nem fogok belemenni abba, hogy miért rakjuk elágazásba. Viszont ha lehet valami egyszerû módon hibát kreálni, akki szívesen belemegyek, mert akkor megtudom mutatni, hogy "lám, errõl az esetrõl van szó..."
h.arpad Posted April 16, 2009 Posted April 16, 2009 Meg tud adni károsat: JavaScript-et, HTML-t. Pl. beírja az űrlapba, hogy <h1>én vagyok a gonosz manó</h1> és ha egy az egyben MySQL-be ezt eltárolod, szépen elronthatja a napodat. Az e-mail cím formátuma: The formatting of this string must comply with RFC 2822. Some examples are: * user@example.com * user@example.com, anotheruser@example.com * User <user@example.com> * User <user@example.com>, Another User <anotheruser@example.com> Próbáltad, hogy ha ezeket nem tartod be ad-e hamis értéket vissza?
Calyd Posted April 16, 2009 Posted April 16, 2009 A JavaScript-es, HTML-es dolgok "oké", de erre nem fogok kitérni. Habár határozottan "vicces" dolgokat lehet művelni, ez igaz. Megnéztem az PHP dokumentációban én is az e-mail címek formátumát, de nem hatja meg a mail függvényt különösebben. Pontosan most próbáltam ki ezt: if (mail("ezmarpedignemjo", $targy, $level, "From: $nev <$email>")) { echo "Köszönöm a leveled."; } else { echo "Bibi van!"; } Természetesen a változók az értékeket űrlapelemekből kapják, és ezek szépen ellenőrizve vannak. Minden űrlapelembe (így pl. az e-mail címesbe is a "bla") szöveget írtam. Hát nem volt bibi, szépen megköszönte a levelet.
h.arpad Posted April 20, 2009 Posted April 20, 2009 Akkor -- egyeztetve a dokumentációval -- kimondható, hogy bugos.
Adani Posted April 30, 2009 Posted April 30, 2009 Megoldható valahogy az PHP-nál, hogy az oldalra automatikusan beszúrja az aktuális php fájl nevét? Van erre valami függvény vagy eljárás? A fájl végére kellene szöveget írni, amiben ott a fájl neve ( az aktuális php fájl neve, amit a böngészõbe írok) az idõpont és a dátum és egy pár mondatos szöveg. A fájl név kivételével mindent be is tudok illeszteni egy külsõ php segítségével ( include-al meghívva) amiben egy függvény van, ami ezt kezeli. Van valami eljárás erre?
payskin Posted April 30, 2009 Posted April 30, 2009 Elvileg a $_SERVER-ben vannak ilyen jellegű adatok... talán PHP_SELF, de nem esküszöm meg rá. Vagy SCRIPT_NAME.
arpsoft Posted April 30, 2009 Posted April 30, 2009 A Manual szerint a $_SERVER['PHP_SELF']; egy jó megoldás, de van több is. Az include esetében viszont ellenõrizném, hogy jó fájlnevet illeszt-e be.
payskin Posted April 30, 2009 Posted April 30, 2009 Az include nem befolyásolja. Egyszer szükségem lett volna rá, hogy tudjam, épp melyik include-ban jár a program, amikor az adott HTML-részt gyártja, és nem tudtam másképp megoldani, minthogy az összes include-ot összebarmoltam commentekkel.
arpsoft Posted April 30, 2009 Posted April 30, 2009 Idézett Manual rész elsõ bejegyzése: __FILE__ constant (ie included file)
h.arpad Posted April 30, 2009 Posted April 30, 2009 Megoldható valahogy az PHP-nál, hogy az oldalra automatikusan beszúrja az aktuális php fájl nevét? Ha jól értem csak a fájlnév kell, nem a teljes elérési útvonal. Két lépésben: <?php $path = $_SERVER['PHP_SELF']; $filename = basename($path); //az $filename tartalmazza azt, ami neked kell ?>
hungery79 Posted May 8, 2009 Posted May 8, 2009 Sziasztok! A következő a problémám: most kezdtem el foglalkozni php-val. Azt szeretném elérni, hogy képeket tudjak feltölteni szerverre form-on keresztül, mégpedig úgy, hogy egy legördülő listából kiválasztom, melyik galériába tegye. Minden egyes galéria egy-egy könyvtár, és majd ezen könyvtárak tartalmát szeretném megjeleníttetni a megfelelő linkekre kattintva. Ott akadtam el, hogy nem tudom kiválasztani a legördülő listából az almappát, minden képet a galéria gyökérkönyvtárába tesz. Kérlek, segítsetek rajtam, és mutassatok rá a hibára! Róla lenne szó: Új album létrehozása: <? echo '<form action="" method="POST">'; echo '<input type="text" name="konyvtar" /> <input type="submit" value="Mehet"></form> '; if ($_POST['konyvtar'] == '') { }else { if ('./galery/'.$_POST['konyvtar']) { if (is_dir('./galery/'.$_POST['konyvtar'])) { print 'már van ilyen album'; }else{ mkdir('./galery/'.$_POST['konyvtar'],0777); echo 'album létrehozva: '.$_POST['konyvtar'].'';}}} $currentdir = './galery'; //change to your directory $dir = opendir($currentdir); echo'<form method="post" action="" enctype="multipart/form-data">'; echo'<input type="file" name="kep" />'; ?> <br> <? print '<br>Album kiválasztása:';?> <br> <? echo '<select name="select">'; while($dirs = readdir($dir)) { echo '<option value="'.$dirs.'">'.$dirs.'</option>'; } echo '</select>'; echo'<input type="submit" value="Feltöltés" name="feltolt" />'; echo'</form>'; closedir($dir); $up='./galery/'.$_POST['select'].$_FILES['kep']['name']; if (isset($_POST['feltolt'])) { if (move_uploaded_file($_FILES['kep']['tmp_name'], $up)) { print 'sikeres feltöltés'; }} ?> Köszönöm, hungery79
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now