среда, 23 октября 2013 г.

О чем писать?




Прошел год с момента основания блога. Вы, дорогие читатели, можете обратить внимание, что статей тут не так уж и много. И я прошу вас о помощи: напишите мне на email dirtygreen@yandex.ru о чем бы вы хотели почитать. Если у вас нет времени на это, то просто напишите интересующую тему в комментариях к этому посту, потому что Ваше мнение действительно важно для меня.

пятница, 26 июля 2013 г.

вторник, 28 мая 2013 г.

javascript и get запрос

Парсер GET запросов на javascript

Проблема

Иногда возникает необходимость работать с GET запросами с помощью javascript. Очень удобно это делать предварительно разобрав запрос на пары [параметр]=>'значение' и записав их в массив. Так же необходимо учитывать, что кириллические символы, отправленные через GET запросы необходимо декодировать.

Решение с помощью функции parseGET()

Алгоритм работы

  1. Для удобства записываем GET запрос в переменную строчного типа;
  2. Создаем переменную типа массив, для хранения результатов работы нашей функции;
  3. Создаем функцию, которую назовем  parseGET;
  4. Убираем из строки запроса символ '?';
  5. Создаем вспомогательный массив вида [номер элемента]=>'параметр=значение';
  6. В цикле перебираем все элементы массива;
  7. Для каждого элемента выполняем следующие действия: создаем еще один вспомогательный массив типа [0]=>'название параметра', [1]=>'значение параметра', декодируем значение параметра и заполняем массив, который мы создали в шаге 2.

 Функция parseGET() 

//Для удобства записываем GET запрос в переменную строчного типа
var GET_query = document.location.search;

//Создаем переменную типа массив, для хранения результатов работы нашей функции
var GET=new Array();

//Создаем функцию, которую назовем  parseGET
function parseGET(){
 //Убираем из строки запроса символ '?'
 GET_query=GET_query.substr(1);
 //Создаем вспомогательный массив вида [номер элемента]=>'параметр=значение'
 var preGET=GET_query.split('&');
 //В цикле перебираем все элементы массива
 for(var i=0; i<preGET.length; i++){
  //Для каждого элемента выполняем следующие действия:
  //создаем еще один вспомогательный массив типа [0]=>'название параметра', [1]=>'значение параметра'
  var TMP_arr=preGET[i].split('=');
  var key=TMP_arr[0];
  //декодируем значение параметра
  var value=decodeURIComponent(TMP_arr[1]);
  //заполняем массив, который мы создали в шаге 2
  GET[key]=value;
 }
}

//вызываем функцию
parseGET(GET_query);

Итоги

Теперь к любому параметру отправленному на страницу с помощью GET запроса можно обратиться в javascript коде например так:

alert(GET['параметр']);

понедельник, 27 мая 2013 г.

Решаем проблему кодировок

Проблема

У большинства пользователей в настройках кодировки браузера активирована опция "Выбирать автоматически". Работая над проектом вы можете забыть указать необходимую кодировку на одной из страниц и тогда пользователь вместо информации увидит набор непонятных символов.

Решение

Создаем либо редактируем существующий файл .htaccess, он должен содержать такую вот запись :
AddDefaultCharset <название кодировки>
У меня например это выглядит так:
AddDefaultCharset UTF-8
Вот и все. Теперь обращаясь к любой странице вашего сайта браузер пользователя будет автоматически выбирать в качестве кодировки по умолчанию ту, которую вы указали в файле  .htaccess.

Защита от SQL injection и XSS (функция secureInnerData )

Защита от SQL injection и XSS

Приведенная в статье функция защищает от атак типа SQL injection и XSS

Описание

Эта простая в использовании функция поможет вам защитить себя  от атак типа SQL injection и XSS. Чаще всего их проводят используя GET или POST запросы которые не фильтруются на стороне сервера. Используя данную функцию в качестве фильтра входящих данных вы сможете частично обезопасить себя.

Исходный код функции secureInnerData 

Алгоритм предельно простой:
  1. удаляем пробелы из конца строки
  2. удаляем пробелы из начала строки
  3. преобразует специальные символы в HTML сущности
  4. возвращаем очищенные данные
//функция защищает от атак типа SQL injection и XSS
function secureInnerData($data)
{
 //удаляем пробелы из конца строки
 $data=rtrim($data);
 
 //удаляем пробелы из начала строки
 $data=ltrim($data);
 
 //преобразует специальные символы в HTML сущности
 $data=htmlspecialchars($data);
 
 //возвращаем очищенные данные
 return $data;
}

Использование функции secureInnerData 

Допустим нам надо отфильтровать параметр data который передается на сервер с помощью GET запроса. Выглядеть фильтрация будет так:

$data=secureInnerData($_GET['data']);

О реализации

rtrim(), ltrim() удаляют из конца и начала строки соответственно:
 " " (ASCII 32 (0x20)), символ пробела.
 "\t" (ASCII 9 (0x09)), символ табуляции.
 "\n" (ASCII 10 (0x0A)), символ перевода строки.
 "\r" (ASCII 13 (0x0D)), символ возврата каретки.
 "\0" (ASCII 0 (0x00)), NUL-байт.
 "\x0B" (ASCII 11 (0x0B)), вертикальная табуляция.

htmlspecialchars() преобразует специальные символы в HTML сущности:
 '&' (амперсанд) преобразуется в '&amp;'
 '"' (двойная кавычка) преобразуется в '&quot;' when ENT_NOQUOTES is not set.
 ''' (одиночная кавычка) преобразуется в '&#039;' только в режиме ENT_QUOTES.
 '<' (знак "меньше чем") преобразуется в '&lt;'
 '>' (знак "больше чем") преобразуется в '&gt;'

вторник, 9 апреля 2013 г.

php кавычки

Желая вывести какой-то текст в php мы используем кавычки. Кто-то двойные, кто-то одинарные. Так а в чем разница? Все очень просто: двойные кавычки говорят интерпретатору php, что где-то в тексте могут быть переменные. Если же текстовый блок заключен в одинарные кавычки, то имена переменных будут выведены как обычный текст.

Пример двойных кавычек:

$param=true;
echo "значение переменной $param";

выведет на экран:
значение переменной 1

Пример одинарных кавычек:

$param=true;
echo 'значение переменной $param';

выведет на экран:
значение переменной $param

P.S. Считается хорошим тоном не использовать без необходимости двойные кавычки, якобы это сэкономит серверу память при интерпретации вашего кода. Машине не надо будет лишний раз думать где тут переменная, а где текст. На практике же не думаю, что это действительно важно.

понедельник, 8 апреля 2013 г.

Создание таблицы

Создание таблицы на PHP как оказалось дело не сложное. Если разбить работу на этапы, то выглядеть они будут так:

1. Создаем шапку таблицы
2. В цикле создаем тело таблицы
3. Выводим результат на экран

Ниже собственно функция создающая таблицу

//функция создающая таблицу
function drawTable(){
 //count определяет количество строк в таблице
 $count=10;

 //здесь мы создаем шапку таблицы
 $html="
   <table border='1px'>
    <tr>
     <td>столбец 1. Название</td>
     <td>столбец 2. Название</td>
     <td>столбец 3. Название</td>
    </tr>
   ";
   
 //тут мы в цикле создаем тело таблицы
 for ($i=0; $i<$count; $i++){
  $html.="<tr>
     <td>столбец 1. Значение {$i}</td>
     <td>столбец 2. Значение {$i}</td>
     <td>столбец 3. Значение {$i}</td> 
    </tr>
    ";
 }
 
 //тут мы заканчиваем таблицу
 $html.="</table>";
 
 //выводим таблицу на экран
 echo $html;
}