Веб-программирование с азов: Урок 2

57

Веб-программирование

Сегодня мы рады представить вашему вниманию второй урок по веб-программированию для начинающих, для тех, кто совсем ничего не понимает в этом, но очень хочет научиться создавать свои веб-приложения. Если после прочтения статьи у вас появятся вопросы, не стесняйтесь оставлять их в комментариях — Борис Надыкто, автор учебного курса, обязательно поможет вам разобраться.

Итак, мы продолжаем наш курс по веб-программированию. Надеюсь, все сумели выполнить задание, а кто не сумел, тому ответ:

< ?php function maxer($num1,$num2) { print ("$num1 > $num2 = ");
$pirint=$num1>$num2;
print $pirint;
}
maxer (10,15);
maxer (17,76);
maxer (80,70);
?>

А теперь к теме урока. Сегодня мы узнаем о практическом применении рекурсии, о GET и POST, о том, что такое API, выучим тему управляющих конструкций и попытаемся создать первую практичную программу, которая поможет мистеру Чедвику взять кредит на MacBook Pro Retina. Все, кто читал первый урок, помнят что я обещал показать все функции PHP. Но так как PHP имеет огромное количество подключаемых функций, то писать их список дело не благодарное, тем более, что обо всех функциях PHP вы можете узнать по этому адресу.

1. Управляющие конструкции

1.1

while — все, что находится внутри цикла, исполняется до тех пор, пока условие верно:

while условие
{
//Код
}

1.2

do-while — проверяет условие после исполнения:

do
{
//Код
}
while условие

1.3

for — цикл. Первое выражение всегда вычисляется (выполняется) только один раз в начале цикла. В начале каждой итерации оценивается выражение 2. Если оно принимает значение TRUE, то цикл продолжается, и вложенные операторы будут выполнены. Если оно принимает значение FALSE, выполнение цикла заканчивается. В конце каждой итерации выражение 3 вычисляется (выполняется).

for ($1=0;$1<100;$1++)
{
//Этот код исполнится 99 раз
}

1.4

foreach — цикл, который перебирает элементы массива.

1.5

break — останавливает выполнение цикла или другой УК.

for ($1=1;$1<100;$1++)
{
//Этот код исполнится 99 раз
break;
echo I;
//Ничего не произойдет, так как цикл будет остановлен УК break
}

1.6

continue — пропускает все оставшиеся функции цикла и переходит к началу.

for ($1=1;$1<100;$1++)
{
//Этот код исполнится 99 раз
echo I;
//1 будет выведен
continue;
echo 2;
//2 не будет выведено, так как началось выполнение цикла с начала
}

1.7

switch — позволяет пропустить if. Как Вы видите, если УК switch() было принято «яблоко», то исполняется тот фрагмент, где результат проверки case вернет TRUE.

switch ($i) {
    case "яблоко":
        echo "i это яблоко";
        break;
    case "груша":
        echo "i это груша";
        break;
    case "вишня":
        echo "i это вишня";
        break;

1.8

return — позволяет установить вывод функции. Например:

function func ($i)
{
return 10*$1;
}

Теперь, если мы вызовем функцию, она вернет результат умножения заданного числа на 10:

$j=func(2);

В j будет заложен return функции, который равен результату умножения, который равен 20.

1.9

require — включение какого-либо файла в программу.

Допустим, вы разрабатываете программы для работы с шифрованием файлов. Вы создали уникальную функцию для работы с шифром. Теперь вы сохраняете ее в файл и можете из других скриптов ее использовать. Доступны все ресурсы «инклюдаемого» скрипта (функции, переменные, классы).

Пример:

Файл "Gigafunction.php"
< ?php function gigafunc ($i) { $mega=$i*2; } ?>
Файл "includer.php"
< ?php include 'Gigafunction.php'; gigafunc (6); echo $mega; ?>
include-См. require
require_ once
include_ once

1.10

goto — переходит к какой-либо строчке с пропуском строк между ним и нужной строчкой.

echo 1;
goto 4;
echo 2;
echo 3;
// 1,3 будет выведено, так как echo 2; пропущено.

1.11

if… else — если значение после if верно, то исполняется то, что в {} после if, если нет, то после else.

If условие
{ // Код для исполнения в случае верности условия}
else
{//В случае неверности условия}

2. Рекурсия.

Наиболее известное ее применение мы можем увидеть в вычислении факториала:

< ?php function factory($n) {    if(!$n)    {       return("Факториал числа $n не существует.");    }    else    {       if($n <= 1){return 1;}       return $n * factory($n-1); // здесь происходит повторный вызов функции    } } echo factory(5); // 120 ?>

Рекурсия также полезна при обработке массивов, если нет возможности использовать циклы. Так как рекурсию можно заменить циклом, я не советую ее использовать (если кто знает случаи, когда рекурсия была незаменимой, пишите в комментариях).

3. GET и POST

Схема 1

Часто нам нужно обмениваться информацией между разными частями вашего сайта. Для этого используются GET- и POST-запросы. Допустим, у нас есть HTML(1)-форма для ввода информации. Как скрипту, например, для регистрации определить, что введено? От HTML-формы отправляется GET- или POST-запрос скрипту. Наверное, все замечали в адресах иногда есть ?$1=1 или другие PHP-штуки после «?». Вот это и есть GET-запрос. POST-запрос вы не увидите, так как он передается в теле HTTP(2)-запроса. Для того, чтобы скрипт получил значения запроса, в PHP есть предустановленные переменные: $_GET,$_POST.

4. API

Схема 2

Когда научитесь создавать веб-приложения, тогда вы поймете, что очень часто нам требуется получать информацию с других ресурсов. Реализовать получение, например, курса доллара с сайта Центробанка нам и помогает API. Смысл в том, что когда программа обращается GET-запросом к API-скрипту, она получает какой-либо ответ от страницы, на которой находится скрипт API.

Пример: site.ru/api.php?$need=report&$token=128383883.

5. Приложение

А теперь пришла пора писать свое приложение! Базу мы знаем, а функции посмотрим на php.net. Внимание! Пример API, с которым происходит взаимодействие в скрипте утрирован. Работу настоящего API на примере VK.com API, мы разберем в статье «Хранение и безопасность информации».

Задача такова.

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

Тех. подробности:

Адрес сайта: bank.ph;
Адрес API: bank.ph/api.php;
API: есть;
Структура файла:

Схема 3

Дату мы получаем в месяцах.
Формат возврата информации при обращении к API: XML(3)- файл. Алгоритм работы:

Схема 4


< ?php  создание нового cURL ресурса $ch = curl_init(); // установка URL и других необходимых параметров curl_setopt($ch, CURLOPT_URL, "http://www.bank.ph/api.php?$operation=infoofcered&user=Chedvik&password=Qwerty&id=3838838"); curl_setopt($ch, CURLOPT_HEADER, 0); // завершение сеанса и освобождение ресурсов curl_close($ch);   $dom = new domDocument("1.0", "utf-8"); // Создаём XML-документ версии 1.0 с кодировкой utf-8   $dom->load("credit.xml");
// Загружаем XML-документ из файла в объект DOM
  $root = $dom->documentElement;
// Получаем корневой элемент
  $childs = $root->childNodes;
// Получаем дочерние элементы у корневого элемента
  /* Перебираем полученные элементы */
  for ($i = 0; $i < $childs->length; $i++) {
    $user = $childs->item($i);
// Получаем следующий элемент из NodeList
    $lp = $credi->childNodes;
// Получаем дочерние элементы у узла "credit"
  $data_give = $lp->item(0)->nodeValue;
 // Получаем значение узла "data_give"
    $gata_get = $lp->item(1)->nodeValue;
 // Получаем значение узла "data_get"
$prc = $lp->item(2)->nodeValue;
// Получаем значение узла "prc"
$sume=$lp->item(3)->nodeValue;
// Получаем значение узла $sume
$timemonth=$data_get-$data_give;
//Получаем срок, на который выдан кредит в месяцах.
$prodev=$prc/100;
//Выполняем часть мат. операций;
$sumpermon=$sume*$prodev;
//Получаем сумму за один месяц
$sumofproc=$sumpermon*$timemonth;
$allsume=$sumofproc+$sume;
echo "Вы должны будете выплатить $sumofproc процентов и $allsume всего";
?>

Короткий FAQ:

Q:Что мы будем проходить на следующем уроке?

A: Вопросы безопасности, и посмотрим на уже готовые скрипты, чтобы не изобретать велосипед.

Домашнее задание:

Создайте программу с возможным практическим применением, содержащим цикл.

Примечания:
1: HTML — язык разметки веб-страниц, все необходимые функции которого мы будем учить.
2:HTTP — основной протокол обмена данными в Интернете.
3.XML — стандарт текстовых файлов с очень четким синтаксисом.

Борис Надыкто

57 комментариев

  1. 0
    Морозов Фёдор

    Даже не читал. Достаточно увидеть не форматированный код, и можно уже ставить 2. И чему Вы собираетесь учить людей, если сами азы не можете использовать?

  2. 0
    Морозов Фёдор

    Примечание:
    XML — это тоже язык разметки!

  3. 0

    goto
    do-while
    мы попали в прошлое????
    Борис, вы хотя бы Попова видео-уроки что ли посмотрели бы. Он конечно ещё тот извращенец-барашек, но даже он по сравнению с вашем творчеством просто бог програмирования. Вы бы свои уроки сразу на govnokod.ru выкладывали

  4. 0
    ApplevsGoogle

    Просьба к вечно недовольным не лезть. Жду конструктивной критики, если таковая есть.

  5. 0

    Урок напомнил анекдот о том, как учиться рисовать сову:
    Рисуем одну окружность, рисуем вторую окружность.
    А теперь быстро-быстро дорисовываем сову.

    • 0
      ApplevsGoogle

      Oleg, Сорри, все функции можно посмотреть в документации или вы ожидали построчного копирования 10 мегабайтной документации в статью? Если не понятен код, то пишите, что именно не понятно. (отправлено из приложения AppleInsider.ru)

      • 0

        ApplevsGoogle, Да причем тут описание функций.
        Вы сначала разжевываете циклы и условия с нуля
        Затем так прыг — к GET и POST. Объяснить надо же хотя бы чуть чуть про взаимодействие сервера и клиента, о глобальных массивах $_GET и $_POST.
        В начале вы вроде бы объясняете азбуку, а потом сразу — а теперь дети из букв складываем сонеты Шекспира.
        Про ваш пример с использованием объектов, ресурсов, XML вообще молчу. вы для кого пишете свои уроки — для начинающих или не совсем?

  6. 0
    vidok2008

    Что означает фраза «позволяет пропустить if»?
    Примера foreach не хватает для полноты (отправлено из приложения AppleInsider.ru)

  7. 0

    по python будут уроки ?

  8. 0

    Книжку прочтите по PHP, пере тем как учить программированию на нем, если нужна критика, то пожалуйста
    1) код обязан быть правильно отформатирован и иметь количество отступов кратное двум пробелам (или табуляцию)
    2) правильное именование функций и переменных согласно стайл гайдам
    3) вот честно — вы хоть сами запускали код? первый же пример не рабочий, не правильный и он никогда не будет работать
    4) goto — да это есть, но является не «кошерным» в разработке и ведет к запутыванию кода
    5) расскажите людям про управляющие символы типа «\n\t»
    6) прекратите писать код, оторвите себе руки и засуньте в понятное место

    • 0
      ApplevsGoogle

      tara, 1. Я отформатировал код, а что с ним делают в редакции, так сам пугаюсь.
      2. Где вам наименования не понравились.
      3. Где ошибка в примере?
      4. goto старая и бесполезная. Но она есть!
      5.Про управляющие символы в следующей статье.
      6.Какой код вам так не понравился?
      В целом жду объяснений. (отправлено из приложения AppleInsider.ru)

      • 0
        vidok2008

        ApplevsGoogle, А нельзя никак на редакцию повлиять в этом смысл? (отправлено из приложения AppleInsider.ru)

      • 0

        ApplevsGoogle, вот пример вашего не работающего кода кода

        $num2 = «);
        $pirint=$num1>$num2;
        print $pirint;
        }
        maxer (10,15);
        maxer (17,76);
        maxer (80,70);
        ?>

        вот пример не правильно названных переменных ($1 — серьезно?)
        for ($1=1;$1<100;$1++)
        {
        //Этот код исполнится 99 раз
        break;
        echo I;
        //Ничего не произойдет, так как цикл будет остановлен УК break
        }

        goto — было не так давно введено, его использование пагубно влияет на код и является плохим тоном программирования, что значит его можно использовать только в самых крайних случаях

        код перед тем как выложить можно не только отформатировать, но и подсветить синтаксис на специальных сервисах

      • 0

        ApplevsGoogle, goto — переходит к какой-либо строчке с пропуском строк между ним и нужной строчкой. — это вы вообще где прочитали? goto f — осуществит переход к указанной метке (f), но ни как не к строке в файле

  9. 0
    Antervis

    «// этот код исполнится» 100, черт побери, раз. (отправлено из приложения AppleInsider.ru)

    • 0
      ApplevsGoogle

      Antervis, Давайте учится считать! В первой части переменной назначается значение 0. В второй происходит установление TRUE/FALSE, в третей к переменной +1. Таким образом код исполнится 99 раз, а в начале 100 итерации проверка вернет FALSE и код не исполнится. (отправлено из приложения AppleInsider.ru)

  10. 0
    Человек с айпадом

    Это азы? Я офигел на первом же кодинге, хотя много лет знаком с php

  11. 0

    В цикле for код исполнится СТО раз. Автор некомпетентен, если делает ошибки в таких простых вещах. (отправлено из приложения AppleInsider.ru)

  12. 0

    Для справки:
    Рекурсию ЧАЩЕ ВСЕГО используют не для вычисления факториала, а для обхода каталогов в файловой системе. (отправлено из приложения AppleInsider.ru)

  13. 0
    allaberdin

    Второй за последнее время встречаю толковую инициативу! Полиглот Дмитрия Петрова и вот теперь эта программа по программированию!!! Честь Вам и хвала! (отправлено из приложения AppleInsider.ru)

  14. 0
    allaberdin

    Уважаемые знатоки! Не надо здесь в этой песочнице демонстрировать свою осведомленость-каждый чек силен в своем! Здесь популяризированное объяснение для чайников, как работать с кодами, о которых как правило, продавцы программ и хостов не очень объясняют: просто копируйте! А мне вот интересно самому по упражняться в написании кодов и не христарадиться ради корректировки страницы! (отправлено из приложения AppleInsider.ru)

  15. 0
    EvilAngel

    Ув. редакция эплинсайдер, и автор статьи. У меня есть пару замечаний по статье.
    1. Начну с функции maxer.
    Во первых я посоветовал бы вам, присваивать дефолтные значения при входе, я не говорю как профи, но думаю что начинающему будет очень полезно делать с начал все правельно, т.к. потом будет легче при практике.

    пример: function maxer($num1 = 0, $num2 = 0){
    var $pirint = 0;
    print(«$num1 > $num2 = «);
    $pirint = max($num1,$num2) — min($num1,$num2);
    print($pirint);
    }

    выберите один из синтексов выявления данных, у вас встречается более чем достаточно:
    print($var)
    print $var
    echo $var

    опишите что их более чем 5 штук, и выберите один для себя.

    я например любитель эко, echo($var), это эквивалентно с print, но тем не менее мне нравится просто больше.

    далее.

    1.3. Вы тут ошиблись в том что переменные не могут начинаться с номера, они обязательно должны начинаться с буквы латинского языка. $A1, $i, $A43, $echo, $var

    1.4. foreach ведет себя ровно так же как и for, с отличаем что он не требует массив или обьект.
    foreach($array as $key => $value){

    }

    1.6 continue, Это такая хитрая штука, что если попал на нее, то это будет очень даже интересно. В наше время, эта функция мало используется, но будет очень полезно привести пример по другому:

    for($i = 1; $i <= 5; $i++){
    if($i == 2)
    continue
    echo $i;

    // конет цикла.
    }
    //Данный пример выведет все кроме цифры 2, так как в остальных случаях комманда continue не будет вызвана, то есть эта команда попросту заставляет перейти в конец цикла. это выйдет экивалентным с:

    for($i = 1; $i <= 5; $i++){
    if($i == 2){

    }else
    {
    echo $i;
    }
    }

    1.9 хотелось бы отметить что есть в принципе 4 самых популярных способа встраивание стороних файлов:

    require()
    require_once()
    include()
    include_once()

    Каждая, имеет свой смысл, и вот какая:

    require — встраивает чужой файл, если файл не существует, то скрипт прекратит работу.

    require_once() — встраивает файл, но в случае если файл уже 1 раз был вызван, то он не вызывается второй раз. Это очень удобно в случае если вы работаете с классами (об этом поговорим в будущем.)

    include() — встраивание файла, в случае если файл отсуцтвует, то пхп выдает только ошибку, но работает дальше.

    include_once() то же самое как include() только файл будет вызван только 1 раз в случае при повторном выхове файла.

    1.10 функция goto работает совсем по другому. попрошу, ее удалить, т.к. тут вы очень ошиблись. на заметку: он работает с пхп 5.3, и до вы его не найдете. и с циклами он не имеет отношения.

    рекурсия, для факториального числа существует уже функция, но это только для информации, против примера ничего не имею, хотя через for() было бы лучше сделать пример, т.к. выше вы проходите именно циклы.

    и 4. вы очень рано проходите гет и пост, они очень интересны, но вы забегаете слишком быстро, если хотите, напишите мне в личку, и я вам помогу с парочкой советов и помогу с описанием и примерами.

    п.с. о курл, я молчу, т.к. вы забыли там очень многое дописать.

    • 0

      EvilAngel, да тут человек явно не знает PHP, а пишет о нем уроки

      • 0
        EvilAngel

        tara, пускай пишет, но если хочет помощи, я не против, пускай мне напишет, я отредактирую где ошибки, мне не трудно, да и азы эти более чем азы… я бы выделил на функции и классы отдельный урок да и к выводу инфы тоже (отправлено из приложения AppleInsider.ru)

        • 0
          ApplevsGoogle

          EvilAngel, Давайте! Уроков для новичков не писал в жизни и к научной редактуре привык, вот и делаю тупые ошибки. Был бы очень благодарен за помощь! Eмыло-borisnadykto@mail.ru. (отправлено из приложения AppleInsider.ru)

  16. 0
    shchetinis

    Я не могу найти первый урок можете его как-нибудь скинуть? (отправлено из приложения AppleInsider.ru)

  17. 0

    Как жаль что тут нет кармы… ой как жаль 😀

Авторизуйтесь Чтобы оставить комментарий