PHP и TextField focus для библиотеки
Здравствуйте, читал форум, но не нашёл точно того что мне надо.
Суть дела: давно мечтал написать модуль библиотеки, а тут друг подогнал мне хостинг, но без пхп :( Думал про JS, но решил попробовать на флеш+хмл — сразу появилась масса вопросов (Fl:10, AS:3)
http://mike711.com.ua/library/php+text.jpg
1) наверно, очень наивный вопрос: Не имея серверного обработчика (PHP, ColdFusion)
загрузить файлы на сервер нереально? (я только через ФТП могу, ну может ещё Шелл)
2) попроще: получая имя файла оно бъётся на автора и название, по разделителю (= или -) но текстовые поля не реагируют на получение текста, иными словами CHANGE EVENT не наступает ((( Это видно на картинке: текст появился, но в errorer textField пусто, да и счётчики в углу по нулям (
Код AS3:
function err_text(event:Event):void {
if(event.target == f_author){
author_counter.text=f_author.length+"/"+f_author.maxChars
}
if(event.target == f_book){
book_counter.text=f_book.length+"/"+f_book.maxChars
}
var a:String=f_author.text;
var b:String=f_book.text;
var d:String="комментария нет";
if((f_desc.text!="your desc here\r") || (f_desc.text!="")){d="есть комментарий"}
//а вот наконец и сам текст:
errorer.htmlText="<font color=\"#999999\" face=\"Arial\" size=\"-4\">Автор: </font><a>"+a+"</a><font color=\"#999999\" face=\"Arial\" size=\"-4\">, Книга:</font> \u00ab"+b+"\u00bb "+s+", "+d;
}
addEventListener(FocusEvent.FOCUS_IN, light);
addEventListener(FocusEvent.FOCUS_OUT, out);
//добавлю таймер - буду знать сколько мин. заполняю одну форму
var myTimer:Timer = new Timer(1000);
myTimer.start();
function timerHandler(event:TimerEvent):void{
var cc = myTimer.currentCount;
if (cc>9){
var min:int = cc/60;
var sec:int = cc-(min*60);
var secD:int = sec/10
var secU:int = sec-(secD*10)
}else{
secD=0;
secU=cc;
}
timer.text =min+":"+secD+secU;
}
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
//поле комментариев — на картинке не показано
function desc_type(event:Event):void{
desc_length.text=f_desc.length+" из "+f_desc.maxChars;
}
f_desc.addEventListener(Event.CHANGE, desc_type);
//хмм, а еще такой же листенер на др функцию етсь - объединить бы их
//выбор файла и загрузка — для первой кнопки
function up_list(event:Event):void{
var archTypes:FileFilter = new FileFilter("ZIP files", "*.zip");
var textTypes:FileFilter = new FileFilter("Text Files (txt rtf html htm fb2 fb3)", "*.txt; *.rtf; *html; *htm; *.fb2; *.fb3");
var noType:FileFilter = new FileFilter("All files", "*.zip; *.txt; *.rtf; *html; *htm; *.fb2; *.fb3");
var fileRef:FileReference = new FileReference();
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
var myShape:Shape = new Shape();
this.addChild(myShape);
try{
fileRef.browse([noType, archTypes, textTypes]);
}
catch (error:Error){
trace("Unable to browse for files.");
}
function selectHandler(event:Event):void
{
var request:URLRequest = new URLRequest("http://127.0.0.1/library/fileUploadScript.php")
//создание серой линии прогрессбара на случай загрузки ещё файла
with(myShape.graphics){
lineStyle(4, 0xcccccc);
moveTo(9, 64);
lineTo(289, 64);
}
//проверка на 3 Мб на загрузку — не больше
if(fileRef.size>3145728){
errorer.htmlText="Извините, файл больше 3 МБ, загрузка невозможна =(";}
else if(fileRef.type==".zip"){
errorer.htmlText="Извините, zip пока не поддерживаем";
}
else{
try{
//попытка разбыить на имя и название
var delimiter:Array = new Array(" = "," - ");
for each (var item in delimiter){
if(fileRef.name.search(item)!==-1){
f_author.text=fileRef.name.substring(0,fileRef.name.search(item));
//начиная от = и до расширения - это имя книги
f_book.text=fileRef.name.substring(fileRef.name.search(item)+3,fileRef.name.length-4);
//errorer.htmlText.appendText(" угу!!");
}
}
//аплоад перенести на кнопку сабмит
fileRef.upload(request);
trace("selected");
}
catch (error:Error)
{
trace("Unable to upload file.");
}
}
}
//зелёная линия прогрессБара
function progressHandler(event:ProgressEvent):void
{
var file:FileReference = FileReference(event.target);
myShape.graphics.lineStyle(4, 0x00aa00);
myShape.graphics.moveTo(9, 64);
myShape.graphics.lineTo(9+(event.bytesLoaded/event.bytesTotal*280),64);
}
function completeHandler(event:Event):void
{
trace("uploaded");
//раз загружено - линия прогрессбара становится синей
myShape.graphics.lineStyle(4, 0x0075bf);
myShape.graphics.moveTo(9, 64);
myShape.graphics.lineTo(289, 64);
}
}
up_file.addEventListener(MouseEvent.CLICK, up_list);
//при ручной записи автора, в errorer появится текст
f_author.addEventListener(Event.CHANGE, err_text);
f_book.addEventListener(Event.CHANGE, err_text);
f_desc.addEventListener(Event.CHANGE, err_text);
3) балуясь дома с загрузкой через пхп получаю кракозябры вместо русских букв, английские нормально ((
http://mike711.com.ua/library/encode.jpg
PHP код:
move_uploaded_file($_FILES['Filedata']['tmp_name'], "./".$_FILES['Filedata']['name']);
$directory = opendir('./'); $files = array(); while ($file = readdir($directory)) { array_push($files, array('./i'.$file, filectime('./'.$file))); } usort($files, sorter); print_r($files); closedir($directory);
function sorter($a, $b) { if ($a[1] == $b[1]) { return 0; } else { return ($a[1] < $b[1]) ? -1 : 1; } }
Итак: аплоад без пхп, почему чейндж не наступает, кодировка?
+ Если у меня явные косяки в коде — подскажите где плз и как оптимизировать, я не так давно этим занимаюсь :rolleyes:
|