Ключевые положительные особенности PDO заключаются в том, что он поддерживается многими СУБД (12 различных драйверов, в т.ч. MySQL, MS SQL, ORACLE, SQLite), позволяет сохранять результат выборки из таблицы в уже существующий объект (прослойка как бе ORM), всякие prepared statements и многое другое.
21 февраля 2012 г.
Сравнение PDO и MySQLi
Имена переменных в JavaScript
JavaScript очень интересный язык, позволяет даже такое:
Подробнее об именах идентификаторов в js можно прочитать здесь
var π = Math.PI; var ಠ_ಠ = 111; var привет = 222;и при этом - это всё будут корректные идентификаторы, которые в дальнейшем можно использовать. Кстати IE6 понимает названия переменных на русском в UTF-8, но это не значит, что нужно сразу использовать это =)
Подробнее об именах идентификаторов в js можно прочитать здесь
20 февраля 2012 г.
Простая и красивая PHP капча на сайт
//path to font: $font = '/var/www/font.ttf'; session_start(); // generate random number and store in session $randomnr = rand(1000, 9999); $_SESSION['randomnr2'] = md5($randomnr); //generate image $im = imagecreatetruecolor(100, 38); //colors: $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 128, 128, 128); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 200, 35, $black); //draw text: imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr); imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr); // prevent client side caching header("Expires: Wed, 1 Jan 1997 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); //send image to browser header ("Content-type: image/gif"); imagegif($im); imagedestroy($im);Только нужно лишь таскать с собой какой-нибудь шрифт в TTF. И, поигравшись с параметрами, можно кастомизировать капчу как угодно на своё усмотрение - свой набор символов/слов, цвета символов, цвет фона сделать такой же, как на сайте - вообщем всё, что угодно.
17 февраля 2012 г.
Base64 quirks
Оказывается Base64 разные версии бывают. И вот на одном проекте всплыла особенность этого стандарта кодирования, заключающаяся в том, что по-умолчанию, в результирующей закодированной строке могут содержаться символы '+' и '/', которые, при передаче, например, через GET - преобразовываются веб-сервером в '+' → '%2B', '/' → '%2F'.
В данном случае можно либо преобразовывать сущности обратно в нормальный вид, либо использовать Base64 для URL, в котором '+' и '/' заменены на '-' и '_' соответственно, которые уже затем нормально можно использовать в дальнейших целях без дополнительных обработок.
В данном случае можно либо преобразовывать сущности обратно в нормальный вид, либо использовать Base64 для URL, в котором '+' и '/' заменены на '-' и '_' соответственно, которые уже затем нормально можно использовать в дальнейших целях без дополнительных обработок.
11 февраля 2012 г.
iPad и гарантия Apple
Хочу выразить огромную благодарность сервисному центру М.Тайм (авторизованный Apple AASP), который взял и починил мне iPad 2. Хоть это длилось месяц, но зато я получил полностью новое заменённое устройство из Америки и чертовски доволен :)
Оказывается на айпад, как и на некоторые другие устройства от Apple действует международная ограниченная гарантия, по которой любой iPad можно обменять по гарантии в течение года, если, конечно, в нём обнаружился заводской брак.
У меня как раз это и произошло - для того, чтобы в скайпе тебя услышал собеседник - нужно было наклониться над микрофоном и громко кричать туда:)
Кстати, проверить оставшуюся гарантию на устройство Apple можно на этой странице
10 февраля 2012 г.
AjaxUpload через AJAX не работает?
Если кнопка AjaxUpload, загруженная через аякс (например показывающаяся в jQuery UI dialog) не работает - то одной из причин может служить неправильный z-index!
Лечится с помощью:
Лечится с помощью:
$('input[name=uploadfile]').css('z-index', '20000');
7 февраля 2012 г.
JSONP для начального отображения страницы
Если на страницах используются динамические данные, списки (загружаемые, через AJAX), то возникает вопрос, заключающийся в том, чтобы изначально загрузить эти данные.
Повсеместно везде используется практика дополнительного "дублированного" JavaScript кода на странице, но есть хорошая статья о том, как можно использовать JSONP для инициализации начальных данных на странице.
Повсеместно везде используется практика дополнительного "дублированного" JavaScript кода на странице, но есть хорошая статья о том, как можно использовать JSONP для инициализации начальных данных на странице.
7 января 2012 г.
SPLIT в JavaScript а также в JScript и IE6-8
Оказывается в методе String.split(), реализованном в JavaScript (по сравнению с реализацией этого метода в JScript и в IE6-8) есть отличие, заключающееся в том, что если в качестве разделителя задать регулярное выражение и обрамить разделитель в скобки, то он добавится в качестве элемента в выходной массив:
А для того, чтобы в JScript и Internet Explorer'ах разделители добавлялись в массив, можно переопределить метод String.prototype.split, который будет корректно работать везде (в соответствии со спецификацией ECMA-262 v3)
О том как это сделать можно прочитать тут -
http://blog.stevenlevithan.com/archives/cross-browser-split
Еслиseparator
является регулярным выражением со вложенными скобками, то каждый раз при совпаденииseparator
все результаты захвата скобками, включаяundefined
результаты, добавляются в выходной массив.
А для того, чтобы в JScript и Internet Explorer'ах разделители добавлялись в массив, можно переопределить метод String.prototype.split, который будет корректно работать везде (в соответствии со спецификацией ECMA-262 v3)
О том как это сделать можно прочитать тут -
http://blog.stevenlevithan.com/archives/cross-browser-split
Подписаться на:
Сообщения (Atom)