ВНИМАНИЕ Данный туториал не претендует на роль исчерпывающего материала по php и служит для быстрого знакомства с особенностями языка, нацелен на тех кто хочет кратко ознакомиться с возможностями языка. В дальнейшем если меня не одолеет лень к этому дело планируется перевести и другие материалы курса, в которых уже более подробно будут рассматриваться различные особенности языка. А пока прошу оценить, указать на возможные ошибки, или предложения чем-то дополнить.
PHP Синтаксис
Свернутый текст
Базовый PHP Синтаксис
PHP код выполняется на сервере в результате в браузере пользователя выводиться чистый html.
Блок php кода всегда начинается с открывающего дескриптора - <?php и закрывающего ?>. Код php может быть расположен в любом месте документа. Если на сервере включена поддержка коротких открывающих и закрывающих дескрипторов то код php можно помещать в <? и ?>. Для максимальной совместимости рекомендуется использовать только стандартную форму открывающих и закрывающих тэгов:
<?php
?>
PHP файл обычно содержит HTML тэги, как HTML файл и некоторое количество PHP кода. Ниже мы видим пример просто PHP скрипта который выводит в браузер текст "Hello World":
<html>
<body>
<?php
echo "Hello World";
?>
</body>
</html>
Каждая строка кода PHP должна заканчиваться точкой с запятой. Точка с запятой отделяет одну строку кода от другой.
Существует два базовых оператора для вывода текста в PHP: echo и print. В примере выше мы использовали для вывода текста "Hello world" оператор echo.
Замечание: Файл скрипта PHP должен иметь расширение .php, если файл будет иметь расширение .html код PHP внутри файла выполняться не будет.
Комментарии в PHP
В PHP используется // для однострочных комментариев или /* и */ для многострочных.
<html>
<body>
<?php
//Это однострочный комментарий
/*
Это
многострочный
комментарий
*/
?>
</body>
</html>
Переменные PHP
Свернутый текст
Переменные в PHP
Переменные используются для хранения значений, таких как например текстовые строки, числа или массивы.
Когда переменная объявлена она может вызываться в скрипте любое количество раз.
Все имена переменных в PHP должны начинаться со знака $.
Правильное объявление переменных:
<?php
$var_name = value;
?>
Те кто только начинает изучать PHP часто забывают поставить знак $ в начале имени переменной, что приводит к ошибкам.
Давайте попробуем создать две переменных одна из которых содержит строку, а другая число:
<?php
$txt="Hello World!";
$x=16;
?>
PHP это слабо типизированный язык
В PHP переменную не требуется объявлять до присвоения значения ей.
В примере выше вы видите что не нужно указывать какой тип данных будет храниться в переменной.
PHP автоматически конвертирует переменную в нужный тип данных основываясь на значении переменной.
В языках со строгим типизированием вам нужно сначала объявить переменную и ее тип, а потом уже использовать ее.
В PHP переменные объявляются автоматически когда вы используете их.
Правила именования переменных
- Имя переменной должно начинаться либо с символа либо со знака подчеркивания "_"
- Переменные PHP могут содержать только буквенно-числовые символы и знаки подчеркивания (a-z, A-Z, 0-9, и _, так же поддерживаются и русские символы в названиях переменных а-я, А-Я, их использование не рекомендуется в связи с возможными проблемами кодировок)
- Имя переменной не должно содержать пробелы. Если имя переменной состоит более чем из одного слова, то слова должны быть разделены знаком подчеркивания (например $my_string), или символом в верхнем регистре (например $myString)
Строковые переменные в PHP
Свернутый текст
Строковые переменные в PHP
Строковые переменные используются для значений которые содержат текстовые символы.
В этой главе мы наиболее употребляемые функции и операторы для работы со строками в PHP.
После создания строки мы можем управлять ей. Строка может использоваться прямо в функции или храниться в переменной.
Ниже в примере PHP скрипт присваивает переменной $txt значение "Hello world":
<?php
$txt="Hello World";
echo $txt;
?>
Результат работы этого кода будет таким:
Hello world
Теперь давайте попробуем использовать несколько функций и операторов для работы со строками.
Оператор конкатенации
В PHP существует всего один строковый оператор.
Оператор конкатенации (. точка) исользуется для соединения двух текстовых значений.
Для конкатенации двух строковых переменных используется оператор конкатенации:
<?php
$txt1="Hello World!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
Результатом работы скрипта будет:
Hello World! What a nice day!
Если вы посмотрите на пример выше вы увидите что мы использовали оператор конкатенации два раза. Это потому что нам требовалось вставить третью строку ( пробельный символ) для разделения двух других.
Функция strlen()
Функция strlen() используется для подсчета длинны строки
Давайте найдем длинну строки:
<?php
echo strlen("Hello world!");
?>
Результат будет таким:
12
Длинна строки часто используется в циклах или других функциях, когда важно знать когда конец строки. К примеру в цикле мы хотим остановить цикл после последнего символа строки.
Функция strpos()
Функция strpos() используется для поиска символа/текста в строке.
Если искомое значение найдено эта функция вернет позицию найденного символа или части текста с начала строки. Если ничего не найдет то вернется FALSE.
Давайте посмотрим что будет если мы попытаемся найти "world" в нашей строке:
<?php
echo strpos("Hello world!","world");
?>
В результате будет выведено:
6
Позиция строки "world" в вышеприведенном примере - 6. Так как первый символ строки считается как 0 то и в результате мы получили 6.
Операторы PHP
Свернутый текст
Операторы PHP
Операторы используются для операций со значениями.
В этом списке описаны различные операторы используиющиеся в PHP:
Арифметические операторы
Оператор Описание Пример Результат
- + Сложение x=2; x+2=4
- - Вычитание x=2; 5-x=3
- * Умножение x=4; x*5=20
- / Деление 15/5=3; 5/2=2.5
- % Модуль 5%2 =1
- ++ Инкремент x=5; x++; x=6
- -- Декремент x=5; x--; x=4
Операторы присваивания
Оператор Пример Тоже самое
- = x=y x=y
- += x+=y x=x+y
- -= x-=y x=x-y
- *= x*=y x=x*y
- /= x/=y x=x/y
- .= x.=y x=x.y
- %= x%=y x=x%y
Операторы сравнения
Оператор Описание Пример
- == Равно 5==8 возвратит false
- != Не равно 5!=8 возвратит true
- <> Не равно 5<>8 возваратит true
- > Больше чем 5>8 возвратит false
- < Меньше чем 5<8 возвратит true
- >= Больше или равно 5>=8 возвратит false
- <= Меньше или равно 5<=8 возвратит true
Логические операторы
Оператор Описание Пример
- && И x=6; y=3 (x < 10 && y > 1) вернет true
- || ИЛИ x=6; y=3 (x==5 || y==5) вернет false
- ! НЕ x=6; y=3 !(x==y) вернет true
Операторы PHP If...Else
Свернутый текст
Условные операторы
Когда вы пишите код очень часто может потребоваться выполнять какую-то операцию в зависимости от какого-то условия.
Для этого вы можете использовать условные операторы в вашем коде.
В PHP используются следующие условные операторы:
- if - при использовании этого оператора код выполняется в случае если заданное условие возвращает true.
- If...else - если заданное условие возвращает true выполняется одна часть кода, если false - другая.
- if...elseif...else - используется для выбора выполнения из нескольких блоков кода.
- switch - так же используется для выбора между несколькими действиями.
Если указанное условие true то выполняется некоторый код.
Синтаксис
if (condition) код выполниться если condition(условие) равно true;
Следующий пример выведет "Приятных вам выходных!" если текущий день Пятница:
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri") echo "Приятных вам выходных!";
?>
</body>
</html>
Заметьте что здесь не используется else. То есть код выполниться только если указанное условие true.
Оператор If...else
Если заданное условие возвращает true, то выполняется одна часть кода, если false - другая
Синтаксис
if (condition)
код выполниться если условие равно true;
else
код выполниться если условие равно false;
Пример
Следующий пример выведет "Приятных вам выходных!" если текущий день Пятница, иначе он выведет "Приятного дня!":
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Приятных вам выходных!";
else
echo "Приятного дня!";
?>
</body>
</html>
Если при использовании условных операторов нужно выполнить более чем одну строку кода, то строки нужно заключить в фигурные скобки:
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
{
echo "Привет!<br />";
echo "Приятных выходных!";
echo "Увидимся в понедельник!";
}
?>
</body>
</html>
Оператор if...elseif...else
Этот оператор применяется для выбора из нескольких блоков кода для выполнения
Синтаксис
if (condition)
код выполниться если условие равно true;
elseif (condition)
код выполниться если условие равно true;
else
код выполниться если условие равно false;
Пример
В следующем примере будет выведена строка "Приятных выходных!" если текущий день Пятница и "Приятного воскресенья!" если текущий день Воскресенье иначе он выведет "Приятного дня!":
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Приятных выходных!";
elseif ($d=="Sun")
echo "Приятного воскресенья!";
else
echo "Приятного дня!";
?>
</body>
</html>
Оператор switch
Свернутый текст
Оператор switch
Используется для выбора выполнения из нескольких блоков кода:
Синтаксис
switch (n)
{
case label1:
код выполняется если n=label1;
break;
case label2:
код выполняется если n=label2;
break;
default:
код выполняется если n не равна ни label1 ни label2;
}
Как это работает: Для начала у нас имеется выражение n (в большинстве случаев это переменная), она вычисляется всего один раз. Затем значение этой переменной сравнивается со значением в каждом блоке case. Если сравнение успешно выполняется блок кода в котором удовлетворилось условие сравнения. Конструкция break используется для предотвращения автоматического выполнения кода в последующих блоках case, если бы не было break после того как выполниться блок кода в котором удовлетворилось условие выполнение кода передалось бы последующим блокам case. Оператор default используется если ни одно сравнение не прошло успешно.
Пример
<html>
<body>
<?php
switch ($x)
{
case 1:
echo "Номер 1";
break;
case 2:
echo "Номер 2";
break;
case 3:
echo "Номер 3";
break;
default:
echo "Не найдены номера от 1 до 3";
}
?>
</body>
</html>
Массивы PHP
Свернутый текст
Что такое массив?
Переменная это место хранения числа или строки. Проблема в том что переменная содержит только одно значение.
Массив это специальная переменная, которая может хранить много значений в одной переменной.
Если у вас есть список каких-либо предметов (например список автомобилей), вам придется хранить его в разных отдельных переменных:
$cars1="Saab";
$cars2="Volvo";
$cars3="BMW";
Однако что если вы хотите использовать для этого списка цикл для того что бы найти один из элементов? И что если у вас не три автомобиля а несколько сотен?
Лучшее решение для этого это массив.
Массив может хранить ваши значения под одним именем переменной. И вы можете получить доступ к значениям ссылаясь на имя одной переменной.
Каждый элемент массива имеет свой индекс к которому легко получить доступ.
В PHP существует три типа массивов:
- Индексированный массив - массив с числовыми индексами
- Ассоциативный массив - массив где каждый ID ключа ассоциирован с его значением
- Многомерный массив - массив который содержит в себе другие массивы
Индексированный массив хранит каждый элемент и в качестве ключа ячейки массива используется число, индекс.
Есть два метода для создания индексированного массива.
1. В следующем примере индекс задается автоматически (индекс начинается с 0):
$cars=array("Saab","Volvo","BMW","Toyota");
2. В следующем примере индекс задается вручную:
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
Пример
В следующем примере доступ к значениям массива осуществляется через его имя и индекс ячейки:
<?php
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
echo $cars[0] . " и " . $cars[1] . " это шведские машины.";
?>
Код выше выведет в результате:
Saab и Volvo это шведские машины.
Ассоциативные массивы
В ассоциативном массиве ключ ячейки массива ассоциируется с ее значением.
Когда требуется хранить значения со специальными именами то использование индексированного массива не лучший путь.
В ассоциативном массиве мы можем использовать значения как ключи и ассоциировать их со значениями ячейки.
Пример 1
В следующем примере используется массив для присвоения возраста различным людям:
$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);
Пример 2
Этот пример делает то же самое что и пример 1 только немного другим способом:
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
ID ключа может использоваться внутри скрипта:
<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
echo "Peter " . $ages['Peter'] . " лет(года).";
?>
Код выше выведет:
Peter 32 лет(года).
Многомерные массивы
В многомерных массивах каждый элемент массива в свою очередь может содержать массив. И каждый элемент под-массива может содержать свой массив и так далее.
Пример
В этом примере мы создаем многомерный массив с автоматическим присваиванием ID ключей:
$families = array
(
"Griffin"=>array
(
"Peter",
"Lois",
"Megan"
),
"Quagmire"=>array
(
"Glenn"
),
"Brown"=>array
(
"Cleveland",
"Loretta",
"Junior"
)
);
Структура массива выше выглядит так:
Array
(
[Griffin] => Array
(
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
Давайте попробуем получить одно значение из вышеприведенного массива:
echo "Is " . $families['Griffin'][2] .
" a part of the Griffin family?";
Этот код выведет:
Is Megan a part of the Griffin family?
PHP циклы. Цикл While
Свернутый текст
PHP циклы
Часто возникают ситуации когда блок кода надо запускать какое-то количество раз, раз за разом. Вместо добавления нескольких одинковых строк кода в скрипт мы можем использовать циклы для этой задачи.
В PHP существуют следующие операторы циклов:
- while - выполняет блок кода до тех пор пока указанное условие равно true
- do...while - сначала независимо от условия сравнения выполняет код один раз, а потом уже код выполняется до тех пор пока указанное условие равно true
- for - выполняет код заданное количество раз.
- foreach - в соответствии с кодом обрабатывает каждый элемент массива.
Цикл while
В цикле while блок кода выполняется до тех пор пока условие равно true
Синтаксис
while (condition)
{
выполняющийся код;
}
Пример
Пример ниже определяет цикл в котором определен начальный счетчик i=1. В цикле while код будет выполняться до тех пор пока значение i меньше или равно 5. Счетчик i увеличивается на единицу после каждого прохода цикла.
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "Число " . $i . "<br />";
$i++;
}
?>
</body>
</html>
Вывод
Число 1
Число 2
Число 3
Число 4
Число 5
Цикл do...while
В цикле do...while блок кода выплоняется хотя бы один раз, а затем уже идет сверка с условием цикла и код продолжает выполняться до тех пор пока условие равно true.
Синтаксис
do
{
выполняющийся код;
}
while (condition);
Пример
Пример ниже определяет цикл в котором счетчик цикла i=1. В цикле значение счетчика увеличивается на 1 и выводится некоторое значение. Затем происходит сверка с условием цикла и цикл выполняется до тех пор пока i меньше или равно 5
<html>
<body>
<?php
$i=1;
do
{
$i++;
echo "Число " . $i . "<br />";
}
while ($i<=5);
?>
</body>
</html>
Вывод
Число 1
Число 2
Число 3
Число 4
Число 5
Число 6
Цикл for
Свернутый текст
Цикл for
Цикл for используется в тех случаях когда вы знаете какое количество раз должен выполниться код.
Синтаксис
for (init; condition; increment)
{
выполняющийся код
}
Параметры
- init: В большинстве случаев используется для определения счетчика цикла (но может использоваться любой код который выполняется перед началом цикла)
- condition: Вычисляется при каждой итерации (проходе) цикла. Если результатом вычисления будет TRUE, то цикл продолжается. Если FALSE - цикл заканчивается.
- increment: В большинстве случаев используется для увеличения счетчика (init) (но может использоваться любой код который выполняется в конце цикла)
Пример
В примере ниже определяется цикл и счетчик цикла i=1. Цикл выполняется до тех пор пока i меньше или равно 5, после каждой итерации цикла значение i увеличивается на единицу.
<html>
<body>
<?php
for ($i=1; $i<=5; $i++)
{
echo "Число " . $i . "<br />";
}
?>
</body>
</html>
Вывод
Число 1
Число 2
Число 3
Число 4
Число 5
Цикл foreach
Foreach используется в качестве цикла для работы с массивами.
Синтаксис
foreach ($array as $value)
{
Код для выполнения;
}
При каждой итерации цикла, значение текущей ячейки массива $array присваивается переменной $value (и указатель внутри массива перемещается на следующую ячейку). При следующей итерации переменной присваивается значение следующей ячейки массива.
Пример
Следующий пример демонстрирует как цикл выведет последовательно значения всех ячеек массива:
<html>
<body>
<?php
$x=array("один","два","три");
foreach ($x as $value)
{
echo $value . "<br />";
}
?>
</body>
</html>
Вывод
один
два
три
Функции PHP
Свернутый текст
Создание функции PHP
Синтаксис
function functionName()
{
выполняющийся код;
}
Правила создания функций:
- Давайте функциям имена которые отражают то что выполняет функция
- Имя функции может начинаться с символа или знака подчеркивания (с числа функция не может начинаться)
Пример
Простая функция которая выводит имя когда она вызывается:
<html>
<body>
<?php
function writeName()
{
echo "Александр";
}
echo "Меня зовут ";
writeName();
?>
</body>
</html>
Вывод
Меня зовут Александр
PHP функции - добавление параметров
Для использования больших возможностей функций мы можем добавлять параметры. Параметры это как переменные. Параметры записываются после имени функции в круглых скобках.
Пример 1
Следующий пример будет выводить разные имена, но одинаковую фамилию:
<html>
<body>
<?php
function writeName($fname)
{
echo $fname . " Иванов.<br />";
}
echo "Меня зовут ";
writeName("Александр");
echo "Моего брата зовут ";
writeName("Михаил");
echo "Моего отца зовут ";
writeName("Иван");
?>
</body>
</html>
Вывод
Меня зовут Александр Иванов
Моего брата зовут Михаил Иванов
Моего отца зовут Иван Иванов
Пример 2
Следующая функция имеет два параметра:
<html>
<body>
<?php
function writeName($fname,$punctuation)
{
echo $fname . " Иванов" . $punctuation . "<br />";
}
echo "Меня зовут";
writeName("Александр",".");
echo "Моего брата зовут ";
writeName("Михаил","!");
echo "Моего отца зовут ";
writeName("Иван","?");
?>
</body>
</html>
Вывод
Меня зовут Александр Иванов.
Моего брата зовут Михаил Иванов!
Моего отца зовут Иван Иванов?
PHP функции - возвращаемые значения
Функции так же могут возвращать значения используя специальный оператор return.
Пример
<html>
<body>
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>
Вывод
1 + 16 = 17
PHP формы и пользовательский вывод
Свернутый текст
PHP управление формами
В PHP есть специальные глобальные массивы $_GET и $_POST, которые используются для хранения информации от пользователей, пользовательский ввод.
Важная вещь при работе с HTML формами и PHP это то что элементы форм в HTML будут автоматически доступны в PHP сценариях.
Пример
Пример ниже содержит HTML форму с двумя полями ввода и кнопку отправки формы:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
Когда пользователь заполнит поля формы и нажмет кнопку отправки, данные из формы передадуться на обработку php файлу - "welcome.php":
"welcome.php" выглядит так:
<html>
<body>
Добро пожаловать <?php echo $_POST["fname"]; ?>!<br />
Вам <?php echo $_POST["age"]; ?> лет(года).
</body>
</html>
В результате скрипт должен вывести что-то наподобии этого:
Добро пожаловать Александр!
Вам 27 лет(года).
Массивы $_GET и $_POST будут объяснены в следующих главах.
Пользовательские данные должны всегда проверяться. Проверять можно на стороне клиента и на стороне сервера, проверка на стороне клиента (клиентские скрипты например с использованием javascript) работают быстрее и снижают нагрузку на сервер, однако помните что без проверки на сервере это очень большая уязвимость, потому как код клиентской стороны пользователь может модифицировать самостоятельно и послать через форму не фильтрованные данные.
Массив $_GET
Свернутый текст
Массив $_GET
В PHP существует глобальный массив $_GET в котором храняться значения переданные от пользователя методом "get" (атрибут method тега form:
<form action="action.php" method="get">)
Информация отправляемая с помощью метода GET видна всем, она отображается в адресной строке браузера и имеет ограничение по размеру.
Пример
<form action="welcome.php" method="get">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
Когда пользователь нажмет кнопку отправки формы, то в адресной строке браузер появится строка примерно такого вида:
http://www.w3schools.com/welcome.php?fname=Peter&age=37
Через файл "welcome.php" теперь можно получить доступ к массиву $_GET в котором будут содержаться данные отправленные через форму (именя полей формы автоматически будут ключами ячеек массива $_GET).
Добро пожаловать <?php echo $_GET["fname"]; ?>.<br />
Вам <?php echo $_GET["age"]; ?> лет(года)!
Когда использовать метод "get"?
Когда используется метод "get" в HTML формах все имена и значения отображаются в адресной строке в URL.
Заметка: Этот метод не должен использоваться при отправке пароля или другой конфеденциальной информации!
Однако поскольку переменные отображаются в URL, страницу можно добавить в закладки что иногда полезно в некоторых случях.
Заметка: Метод get не предназначен для передачи больших объемов данных. Не рекомендуется передавать методом get значения объемом более 2000 символов.
Массив $_POST
Свернутый текст
Массив $_POST
В PHP существует глобальный массив $_POST в котором храняться значения переданные от пользователя методом "post" (атрибут method тега form:
<form action="action.php" method="post">)
Информация переданная через форму методом POST невидима пользователю и не имеет ограничения размера.
Заметка: Однако по умолчанию в PHP максимальный размер передаваемых данных через POST равен 8Mb и может быть изменен установкой нужного значения параметра post_max_size в файле настроек php.ini.
Пример
<form action="welcome.php" method="post">
Имя: <input type="text" name="fname" />
Возраст: <input type="text" name="age" />
<input type="submit" />
</form>
Когда пользователь нажмет кнопку отправки формы URL будет выглядеть примерно так:
http://www.w3schools.com/welcome.php
Теперь через файл "welcome.php" можно получить доступ к значениям элементов массива $_POST в котором будут хранится данные переданные пользователем методом POST (ключи ячеек массива будут иметь такие же имена как имена полей формы):
Добро пожаловать <?php echo $_POST["fname"]; ?>!<br />
Ваш возраст <?php echo $_POST["age"]; ?> лет(года).
Когда использовать метод "post"?
Информация переданная через "post" невидима в браузере и не имеет ограничения по размеру. Однако из-за того что переменные не видны в URL, страницу с передаваемыми параметрами невозможно добавить в закладки.
Спустя 5 минут, 58 секунд (27.11.2011 - 16:47) TranceIT написал(а):
Замените Hello World на Hello Stupid.
А то банально как-то =)))
А то банально как-то =)))
Спустя 1 минута, 15 секунд (27.11.2011 - 16:48) bulgakov написал(а):
TranceIT
Ну зачем же так грубо)
Ну зачем же так грубо)
Спустя 6 минут, 1 секунда (27.11.2011 - 16:54) inpost написал(а):
Стилей нет, это плохо.
Спустя 6 минут, 33 секунды (27.11.2011 - 17:01) bulgakov написал(а):
Цитата |
Стилей нет, это плохо. |
CSS?
Спустя 7 минут, 34 секунды (27.11.2011 - 17:08) johniek_comp написал(а):
классно!
а можно скопирайтить?
а можно скопирайтить?
Спустя 33 секунды (27.11.2011 - 17:09) inpost написал(а):
bulgakov
if()
do
else
do
Спустя 4 минуты, 45 секунд (27.11.2011 - 17:13) bulgakov написал(а):
inpost
А понял, спасибо, исправлю.
А понял, спасибо, исправлю.
Спустя 38 секунд (27.11.2011 - 17:14) bulgakov написал(а):
Цитата |
а можно скопирайтить? |
Да на здоровье