Запись данных из flash-ролика в файл на сервере
Автор: Nikitar
Сайт: Rusforumz.com
В прошлом выпуске журнала WebDix (WebDix #13) мы рассмотрели сохранение данных на локальном компьютере пользователя, что иногда бывает необходимо. Но также часто нужно передавать данные серверу и уже сохранять на сервере в файле. Например, для того, чтобы потом можно было автору flash-ролика узнать как этот ролик использовался и что с ним делали. Поэтому сегодня мы рассмотрим случай сохранения данных на сервере. Исходник к этому уроку как всегда вы сможете скачать в Школе Флэша. Приступим!
Прежде всего обозначим, что мы будем делать. У нас должно получиться что-то вроде того, что вы видите внизу страницы. А именно: формы для ФИО и кнопка отправить. При нажатии на кнопку "Отправить" данные отправляются специальному php-файлу, который уже сохраняет их в текстовый файл. Также у нас будет проверка обязательно в самой флэшке: передались ли данные серверу или нет. Пожалуй можно начинать.
1. Сейчас мы сделаем то, что делаем всегда в начале урока. Откроем Adobe (Macromedia) Flash (у меня восьмая версия, у вас тоже должна быть не ниже седьмой) и создадим новый документ с любыми размерами.
2. Создаём 3 статические поля: Имя, Фамилия и Отчество. Можете их расположить также как на скриншоте. Затем 3 поля типа input. У полей ввода установите шрифт _sans и в поле var введите соответственно статическим полям: pole_name, pole_otch, pole_surname.
3. Далее делаем кнопку "Отправить". Кнопка "Отправить" - это совсем и не кнопка, а мувиклип. Рисуем сначала само изображение (прямоугольник + надпись), выделяем это всё, жмём F8 - Movieclip - OK. В instance name у этого мувиклипа пишем send_btn.
4. На главной сцене сделайте ещё 2 пустых кадра. В одном из них посередине напишите: "Данные успешно сохранены", во втором: "Ошибка соединения!"
5. Теперь интерфейс готов и можно начинать писать код. Код будет состоять из двух глобальных частей. Код в flash и код в файле php. Сначала рассмотрим первую часть кода. Для этого создайте новый слой, выделите первый кадр, и откройте панель Actions. Сейчас будем писать код по частям, и одновременно я буду его комментировать.
stop();
send_btn.onRelease=function(){
if(pole_name.length>1 and pole_otch.length>1 and pole_surname.length>1){
var send_lv = new LoadVars();
var load_lv = new LoadVars();
send_lv.name=pole_name;
send_lv.otch=pole_otch;
send_lv.surname=pole_surname;
send_lv.sendAndLoad("http://webdix.ru/mega/savefile.php",load_lv);
load_lv.onLoad=function(){
success=load_lv.success;
if(success!=null){
gotoAndStop(2);
}
else{
gotoAndStop(3);
}
}
}
}
Первая строчка собственно останавливает кадр, чтобы ролик не проигрывался на второй и третий кадры, которые нам нужны совершенно для других целей. Далее, как вы видите, идёт код, который будет работать при нажатии на кнопку с инстанс нейм send_btn. Сначала мы в этой функцией проверяем, заполнены ли текстовые поля. Проверяем достаточно оригинальным способом, смотрим длину поля, если она больше двух символов, то следовательно поле заполнено. Первыми же строчками мы создаём объекты LoadVars. LoadVars - это специальная функция для обмена данными с сервером. Почему нужно 2 объекта? Потому что один будет отвечать за отправку данных, а другой за принятие данных с сервера (в данном случае, оповещение, что функция на сервере выполнилась).
Далее мы создаём переменные в объекте send_lv. Трём переменным приписываем переменные, которые соответствуют текстовым полям. После этого мы запускаем функцию sendAndLoad, которая обращается в данном случае на адрес http://webdix.ru/mega/savefile.php, отсылает все переменные, которые мы только что создали, а также включает в себя название объекта, который будет принимать данные с сервера. У нас это load_lv. Собственно дальше уже мы расписываем его. Прежде всего опять вводим новую переменную success и её значение равно переменной, которую мы получили с сервера (я её тоже назвал success, но это совершенно необязательно). И далее идёт проверка. Если переменную мы получили, то переходим на второй кадр, если же нет, то значит всё плохо, и мы переходим на третий кадр. После чего все функции закрываем.
6. C этим вроде разобрались. Давайте теперь рассмотрим php-файл. Для тех, кто не знает как создать php-файл: откройте блокнот и сохраните файл с расширением .php. Как вы видели из прошлого кода, назвал файл я savefile.php.
<?
if(isset($_POST["name"]))
{
$name=$_POST["name"];
$otch=$_POST["otch"];
$surname=$_POST["surname"];
$p=fopen("data.txt","w");
$s= $name." ".$otch." ".$surname;
echo "success=$surname";
fputs($p,$s);
fclose($p);
}
?>
Сначала мы убеждаемся, что переменная name благополучно дошла до сервера. Затем мы присваиваем переменным в этом скрипте значения переданных переменных. Открываем текстовый файл, в который будет записывать. Не забудьте предварительно этот файл залить на сервер. И начинаем записывать в него. Об этом говорит параметр "w". При чём запись будет поверх того, что там есть, если же вы хотите, чтобы файл не перезаписывался, а данные просто прибавлялись к существующим, поменяйте "w" на "a+". Далее мы формируем переменную $s, она у нас состоит из трёх принятых перменных: имени, отчества и фамилии. Точка означает присоединение. С помощью функции echo мы формируем то, что скрипт возвратит flash-ролику, а именно строчку success=$surname, то есть переменная success равна переменной $surname. Затем с помощью функции fputs() мы записываем переменную $s в файл, имя которого у нас хранится в переменной $p и закрываем файл.
7. Нам осталось залить файлы savefile.php и data.txt. И можем проверить работу с помощью волшебной команды ctrl+enter. Работает. Теперь заливаем и swf-файл на сервер. Если тут не работает (бывает, что поделать), то попробуйте изменить в меню File - Publish Settings, вкладка Flash, Local Playback Security поставьте на Access network only. Но это в случае, если вы используете не абсолютный путь, как я, а относительный. Результат работы вы можете увидеть ниже. Кстати, ролик должен находиться на одном сайте, что и php-скрипт, так что вы получите "Ошибку соединения" при проверки работы нижележащего ролика.
ВНИМАНИЕ: Вы можете скачать исходник к данному уроку и самостоятельно разобраться что, куда и сколько раз. Исходники всех уроков выложены в Школе Флэша, которая располагается на портале RusForumz.com. Условия доступа в Школу Флэша