Опубликован: 07.11.2006 | Доступ: свободный | Студентов: 3400 / 338 | Оценка: 3.94 / 3.71 | Длительность: 37:11:00
Лекция 17:

Динамический Flash: PHP

Создание сценария PHP

Выходим на финишную прямую и начинаем разбирать сценарий PHP, реализующий наибольшую часть функциональности нашего приложения. Рассмотрим его шаг за шагом. Здесь все уже должно быть знакомо из описания PHP, приведенного ранее в этой лекции. Если вы почувствуете себя неуверенно на любом из этапов, просто пролистайте книгу назад и обратитесь к этому параграфу. PHP-сценарий для этого приложения будет не очень большим, так как значительная часть работы выполняется в фильме Flash. Нужно создать тело сообщения из списка переменных, передаваемых сценарию PHP, и затем отправить сообщение электронной почты с использованием функции mail.

  1. Откройте текстовый редактор и сохраните файл под именем simplemailer.php. Сначала нужно ввести начальный PHP-тег. Здесь мы также укажем адрес электронной почты получателя.
    <?php
    // simplemailer.php
    // Flash MX Studio - Steve Webster
    
    // Set recipient for email 
    $recipient = "you@yourisp.com";

    В этом фрагменте кода можно увидеть несколько комментариев. Как и в случае с ActionScript, всегда лучше сопровождать код исчерпывающими комментариями; неизвестно, когда вам придется снова разбираться в этом коде.

    Необходимо обработать небольшую особенность объекта loadVars. При использовании методов send и sendAndLoad управляющий элемент события onLoad и новый метод clear будут передаваться вместе с любыми другими данными в объект. Так как одной из целей создания этого приложения было обеспечение его максимальной гибкости в отношении числа поддерживаемых переменных, используем цикл для добавления каждой переменной, передаваемой из фильма Flash в тело сообщения электронной почты.

  2. Для разрешения вышеупомянутой проблемы, которая может повредить нормальной работе приложения, мы просто удаляем переменные, связанные с соответствующими методами.
    // Remove methods from data... 
    unset($HTTP_POST_VARS["onLoad"]);
    unset($HTTP_POST_VARS["clear"]);

    Это реализуется с помощью функции unset для удаления соответствующих элементов массива HTTP_POST_VARS. Этот массив содержит все переменные, которые были переданы PHP-сценарию с помощью метода POST.

  3. Устранив эту неполадку, можно начать обрабатывать циклом оставшиеся переменные в массиве. Но перед этим нужно создать переменную, в которой будет содержаться тело нашего сообщения.
    // Setup body text
    $body = "The following information was submitted...\n\n";

    Мы устанавливаем ее, указав начальный текст, который будет отображаться вверху сообщения электронной почты.

  4. Приступим к обработке оставшихся переменных. Мы будем проходить циклом через все элементы массива HTTP_POST_VARS, прибавляя их по мере продвижения к нашей переменной $body.
    // Add each key/value pair to the body text 
    foreach($HTTP_POST_VARS as $key => $value) {
      $key = substr($key, 0, -4);
      $body .= "$key: $value\n";
    }

    Из кода видно, что мы использовали цикл foreach. Он аналогичен циклу for:in в ActionScript, который использовался в новом методе clear объекта loadVars. В примере выше, каждая итерация цикла считывает ключ (имя переменной) и значение следующего элемента массива, выбираемое и сохраняемое в переменных $key и $value, соответственно.

    После этого мы используем функцию substr для отбрасывания расширения _txt, которое имеют в данный момент имена всех наших переменных. Это, на самом деле, необязательный шаг, однако указание расширения в электронной почте довольно бессмысленно, поэтому мы избавляемся от него. В PHP функция substr работает несколько иным образом, нежели ее аналог в ActionScript, так как здесь мы можем указывать отрицательное значение конечной точки подстроки. В данном случае, подстрока начинается из начального индекса и продолжается на протяжении n символов с конца исходной строки. В переводе на русский язык, эта строка кода будет звучать следующим образом.

    Берем все символы в $key с позиции от 0 до 4 с конца строки и записываем результат в переменную $key.

    После этого добавляем текущий ключ и значение в переменную $body и переходим к следующему элементу массива.

    Далее нужно создать адресную строку From: для сообщения электронной почты. Мы реализуем указание имени отправителя в сообщении, получаемом адресатом. Это будет сделано не с помощью PHP, а с использованием прилагаемых деталей имени и адреса электронной почты. Правильный формат поля From: сообщения электронной почты таков.

    "Name" <email@whatever.com>
  5. Создайте следующую строку для сообщения электронной почты.
    // Set from address
    $from = $HTTP_POST_VARS["name_txt"]  . " <" . 
      $HTTP_POST_VARS["email_txt"] . ">" ;
  6. Осталось установить тему сообщения электронной почты и вызвать функцию mail, которая встроена в PHP, для непосредственной отправки сообщения.
    // Set subject for email
    $subject = $HTTP_POST_VARS["subject_txt"];
    
    // Send email
    mail($recipient, $subject, $body, "From: $from");
    
    ?>
  7. Мы закончили создание приложения. Опубликуйте фильм Flash и загрузите файлы HTML и SWF, а также созданный только что сценарий PHP, на сервер и проверьте работу приложения.
Решение проблем

Если у вас возникли проблемы и сценарий PHP работает неправильно, следует проверить следующее.

  • Прежде всего, убедитесь, что сценарий PHP не вызывает ошибок. Это можно сделать, введя URL сценарий прямо в веб-браузере и добавив к адресу необходимые переменные.
    http://.../simplemailer.php?name_txt=Bob&email_txt=...
  • Последняя версия PHP непосредственно подавляет сообщения об ошибках по умолчанию, поэтому, если вы все еще недовольны работой сценария, попробуйте добавить следующий код в верхнюю часть сценария (сразу под начальным тегом PHP)/
    error_reporting (E_ALL ^ E_NOTICE);

    Если вы обнаружите какие-либо ошибки, проверьте ваш сценарий и исправьте их. Если вы все еще не уверены в себе, просто скопируйте сценарий, находящийся на компакт-диске этой книги.

  • Проверьте, что ваш веб-хост на самом деле поддерживает выполнение сценариев PHP на серверах. Это звучит довольно наивно, но вы будете удивлены, если я скажу вам, сколько я получил электронных писем с вопросами о том, почему не работает приложение, и причиной этому оказалось отсутствие поддержки PHP на хосте.
  • Некоторые хосты требуют, чтобы сценарии PHP имели другие расширения, такие как php3, php4 или phtml. Это необходимо проверить, сделав запрос в техническую поддержку вашего хоста.
  • Если сценарий выполняется нормально, но вы не получаете сообщений электронной почты, обратитесь на ваш хост и убедитесь в том, что разрешено использование функции mail на своих серверах. Я еще не встречал хосты, на которых бы использование функции mail было запрещено, но тем не менее эта опция в PHP может быть как доступной, так и нет, поэтому она также должна быть проверена.
  • Если все вышесказанное вам не помогло, вы можете всегда отправить электронное сообщение людям, занимающимся технической поддержкой, по адресу support@friendsofed.com.
Что дальше?

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

Ответное электронное сообщение

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

Выбор получателя

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

Существуют и другие возможности, которые вы могли бы реализовать в этом приложении, однако это я уже оставляю на ваше усмотрение.

Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

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