Archive for the 'trükkök' Category

PHP fájlok védelme .htaccess-szel

Adott az alábbi felállás:

#apache rewriteunk a következő:

/minta => /modules/mod_minta.php
/minta/1 => /modules/mod_minta.php?q=1

## ki hogy vitelezi ki, teljesen lényegtelen, nézzen ki pl így:
RewriteRule ^minta(/.*)?$ /modules/mod_minta.php?q=$1 [QSA,L]

## $_GET['q'] feldolgozása phpban történik

Tehát a http://example.com/minta url hívásakor valójában a http://example.com/modules/mod_minta.php hívódik meg és hasonlóan a http://example.com/minta/1 esetén a http://example.com/modules/mod_minta.php?q=1

Tiltsuk le a következő linket: http://example.com/modules/mod_minta.php?q=1. Tehát a címsorba közvetlenül írva adjon valami hibát, de semmiképpen se futtassa le a mod_minta.php-t.

Több lehetőség van:

A modul(ok) elejére beírkáljuk:

 if(eregi('mod_minta.php', $_SERVER['REQUEST_URI'])) {
	header('HTTP/1.0 403 Forbidden');
	exit;
}

Egyszerű, és ronda megoldás. Minden mod_minta.php meghíváskor lefut, az esetek 99.9999%-ában feleslegesen.

Sokkal szebb megoldás a következő kettő…

  • Adjunk rá 404-es hibát:
    RewriteCond %{THE_REQUEST}      ^(GET|HEAD|POST)\ /modules/mod_minta\.php
    ## a mod_404.php kezeli a 404-et, ki hitte volna, ezt korábban már rewriteoltuk
    RewriteCond %{REQUEST_URI}  !^/modules/mod_404\.php$
    RewriteRule $ /404 [L]
    

    Ebben az esetben csak a mod_404.php-t tudja elérni közvetlenül, más nem. Ezt az egyet engedni kell, mert különben végtelen rekurzióba fut az apache. Ilyenkor a címsor nem változik, nincs redirect.

  • Dobjuk rá a 404-es oldalra
            RewriteCond %{THE_REQUEST}      ^(GET|HEAD|POST)\ /modules/mod_minta\.php
            RewriteRule $ /404 [R=301,L]
    

    Itt redirect lesz, ebben az esetben semmilyen file nem érhető el közvetlenül.

A kiprobált környezetben minden url rewriteolva van, tehát közvetlenül egy php file sincs meghívva. Ebben az esetben a két megoldás valamelyikét javasolt a rule-ok legvégére tenni, mert csak akkor jut el idáig a feldolgozás, ha korábban egy szabály sem illeszkedett. Ha ez sem illeszkedik akkor sima 404 a végeredmény.
A 404 megfejtése nagyon egyszerű:

ErrorDocument 404 /404
######
######
######
RewriteRule ^404$  /modules/mod_404.php [QSA,L]

Kiegészítve a RewriteCond-ot:

RewriteCond %{THE_REQUEST}      ^(GET|HEAD|POST)\ /modules/mod_.+\.php

Tehát az összes mod_-dal kezdődő php file közvetlen elérésének a tiltása ilyen. :)

Hány hétből áll egy év?

Egy kérdéses évben lelendő hetek számát megkapjuk, ha az adott évet áthajtjuk a következő függvényen:

function getweeksnumber($year){
    return max(date('W', mktime(0,0,0,12,25,$year)), date('W', mktime(0,0,0,12,31,$year)));
}

Ötletes, nemde?

Internet Explorer - Lightbox - A művelet megszakadt

A Micro$oftot sem a böngészője miatt szeretjük (de Surface az van), hanem azért, mert kihívásokat állít elénk, hogy kell egy szakosan megírt javascript forrást lebutítani, hogy azt az IE is megértse. Történet a következő:
Az “új” Lightbox 2.04 ( a szinte teljesen újraírt forrásával) már nem a

function initLightbox() { myLightbox = new Lightbox(); }
Event.observe(window, 'load', initLightbox, false);

megoldást használja, hanem a szebb

document.observe('dom:loaded', function () { new Lightbox(); });

Tapasztalatunk szerint:
Ez így magában működik, de ha például saját javascript kódokat is akarunk betöltéskor futtatni akkor két lehetőség van:

document.observe('dom:loaded', function () {
//sajátkód
});
//vagy
Event.observe(window, 'load', function(){
//sajátkód
}, false);

Ha változatlanul hagyjuk a lightboxot, és dom:loaded-et vegyítjük a Event.observe-vel, akkor kapjuk “A művelet megszakadt” üzenetet. Kipróbáltuk, azt tapasztaltuk, hogy két dom:loaded-et sem kedvel az IE. Köszönjük. Az maradt a megfejtés, hogy a lightbox inicializálást át kell írni a “régire”:

online casinoEvent.observe(window,'load',function(){ new Lightbox(); },false);
//document.observe('dom:loaded', function () { new Lightbox(); });
//vagy, kiremeljük a lightboxban az initet, és a saját kodunkban hívjuk meg.
Event.observe(window,'load',function(){
new Lightbox();
//saját kód
},false);

Múkodj!

E-mail ellenőrzés php-ben

Korábban beszéltünk az adatvalidálásról, de sosem lehet elég a jóból. Még mindig akad olyan felhasználó, aki képes kijátszani az emberi értelem határait, és elköveti azt a galádságot, hogy helytelen e-mail címet ír be. Különösképp arra az esetre gondolunk, mikor (kimondva) halvány fingja nincs az e-mail címéről, stbstb. fremail.com, hotmail.hu, citrommail.com és sorolhatnánk. Read more »

CMS - Tartalom rendező

Hamár a CMS-t emlegettem, nézzük meg, hogyan lehetne egyszerűen beállítani például a főoldalon megjelenő elemek (bejegyzések, cikkek, stb., nem layout) sorrendjét. Legyen ez egy híroldal, ahol nem mindig az írások létrejöttének időrendi sorrendjében kell megjelenni a tartalomnak. Ráadásul több hasábunk van, több tartalom csoportból kell választanunk.

Legyen tehát:

  1. cikkek: szerkesztett szöveg
  2. galéria: mezei galéria, képekkel
  3. eseménynaptár: eseménynaptár

Read more »

Adatvalidálás

errorAz adatvalidálást az Úr találta ki azzal, hogy megadta nekünk a juzert, aki vagy nem akarja, vagy alapból nem tudja mit kell kitölteni a formon, vagy milyen formátumú adatot kell beírni. Bemutatunk ehhez egy könnyen kezelhető validátor classt, és egy eljárást, hogy is használjuk.

Példánkban kérjünk be:

  • e-mail címet: szükséges ($email)
  • webcímet: opcionális ($web)
  • születési dátum: opcionális ($bday) //2000-03-03
  • a user nevét: szükséges ($name)

A változókba bekerültek az értékek, döntsük el, hogy helyesek-e, vagy újra be kell kérni.
Read more »

Keresés html-t tartalmazó mezőben - mysql

Nézzük meg, hogy hogyan lehet keresni egy olyan mezőben, amiben html-t tárolunk - például egy TinyMCE által szerkeztett tartalamat -, és szeretnénk keresni az “árvíztűrő tükörfúrógép”-re, de azt a szerkesztő így írta le: “árvíztűrő <b>tükörfúrógép</b>”. A válasz egyszerű: sehogy. Értelmesen, erőforrást kímélve sehogy. A mysql regexp eleve buta, soronként nézni a táblát megintcsak rossz. A megfejtés egy plusz mező segítségül hívása, ami tartalmazza a html szöveg tag-ek és írásjelek nélküli verzióját. Ismét nem spanyol viasz, de a kezdő cms fejlesztőknek jól jöhet a tipp. Lássuk hogy!

Read more »

Ékezetes rendezés MySQL-ben

Hosszú idő óta tologatjuk a probléma megoldását, rendezzünk a magyar szabályok szerint mysql-ben: ismerje az ékezetes karaktereket, tudja a kétbetűsöket is: ly, ty, ny…, és ne legyen probléma a kis és nagybetű.

Legyen rá egy tárolt függvény: bármikor használható.

Ez lett a megfejtés(figyeljünk a charset-re):

CREATE DEFINER=`root`@`localhost` FUNCTION `orderer`(s varCHAR(255)) RETURNS varchar(255) CHARSET utf8
RETURN upper(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(replace(s,'á','azz')
,'í','izz'),'cs','czz'),'ly','lzz'),'é','ezz')
,'ó','oxx')
,'ö','oyy')
,'ő','ozz')
,'ty','tzz')
,'gy','gzz')
,'ú','uxx')
,'ü','uyy')
,'ű','uzz')
,'ny','nzz')
,'zs','zzz'))

Használat:

select * from tabla order by orderer(mezo) asc

Úgy tűnik működik. De talán már tudja a mysql is. Majd utánanézünk. :)

Így készült egy videomegosztó

Csináltam egy videomegosztót. Nem nagy szám. Van már n db. De ha azt vesszük, hogy egy “garázsba” készült, magam készítettem, egyedül (programozás, server háttér), meetingek, milliók nélkül, akkor igen is nagy szám. Nekem az. Az oldal szinte fogad minden manapság menő viccformátumot (swf, pps, video, szöveg, képek). Statisztikák, érdekességek a képtelenség.hu technikai hátteréről. Read more »

Google Maps a TinyMCE-ben

Néha elkerülhetetlen különböző webmédia tartalmak beillesztése a TinyMCE-be, vagy egyéb wysywig editorba. Lehet próbálkozni a google maps iframes megoldásával (első mentésig működik is), vagy a youtube embed-jével, vagy egyéb más “különleges” kódokkal. Youtube-ra létezik plugin (nem próbáltuk), mapsre nem találtunk megoldást. Erre eszünkbe jutott egy okos nagyszerű hülye ötlet, mely vélhetően nem a legszebb megoldás, de egyszerűsége miatt gyakorlatilag bármit megeszik.
Read more »

Következő oldal »