Olá Comunidade. Vamos a mais uma Coluna de Flash. Dessa vez iremos criar um GuestBook uzando XML+PHP+MySQL.
Pré-requisitos para esse tutorial
- Flash MX 2004 ou Flash 8;
- Servidor rodando PHP 4.2 ou superior;
- MySQL 4.x ou superior;
- Conhecimento com Interação com XML
Criando o a tabela no MySQL
Vamos a tabela que vai receber os dados vindo do GuestBook. Caso queiram podem adicionar mais campos. Abaixo segue a instrução SQL para criar nossa tabela no banco de dados:
CREATE TABLE guestbook ( id INT(5) NOT NULL AUTO_INCREMENT, nome TEXT, email TEXT, DATA VARCHAR(10), comentario TEXT, PRIMARY KEY (id) );
Criando o arquivo PHP
Com a tabela criada, vamos criar o arquivo PHP. Ele vai ser responsável por receber os dados do Flash, enviar para o Banco de Dados, consultar o banco de dados para recuperar os itens e criar o arquivo XML que iremos usar no Flash. Salve como guest.php.
<?php /* Conectamos ao MySQL */ $connection = mysql_connect("seu host", "seu usuario", "sua senha") or die ('Erro ao Conectar ao Banco de dados'); /* Selecionamos o Banco de Dados */ $db = mysql_select_db("tutoriais") or die ("Não foi possível localizar o banco de dados"); /* Buscamos o nome, email e comentarios da tabela guestbook */ $consulta = mysql_query("SELECT id,nome,email,data,comentario FROM guestbook ORDER BY id DESC"); /* Retorna o número de linhas do resultado */ $row=mysql_num_rows($consulta); /* Verificamos se retornou algum resultado */ if($row>0){ /* Manda a mensagem para o Flash */ print "&erroMensagem=0"; /* Começamos a criar o arquivo XML */ $conteudo = "<?xml version='1.0'?><guest>"; /* Para cada item retornado */ for($i=0; $i<$row; $i++) { /* Recuperamos os Nomes */ $nome = mysql_result($consulta,$i,"NOME"); /* Recuperamos os E-mails */ $email = mysql_result($consulta,$i,"EMAIL"); /* Recuperamos as Datas */ $data = mysql_result($consulta,$i,"DATA"); /* Recuperamos os Comentarios */ $comentario = mysql_result($consulta,$i,"COMENTARIO"); /* Inserimos os valores recuperados nas respectivas tags */ $conteudo .= "<dados><nome>"; $conteudo .= $nome; $conteudo .= "</nome><email>"; $conteudo .= $email; $conteudo .= "</email><data>"; $conteudo .= $data; $conteudo .= "</data><comentario>"; $conteudo .= $comentario; $conteudo .= "</comentario></dados>"; } /* Fechamos a tag guest */ $conteudo .= "</guest>"; /* Se existir, abrimos o arquivo guest.xml para leitura e escrita */ /* Se não existir criamos o arquivo guest.xml */ $ponteiro = fopen("guest.xml", "w"); /* Escremos o conteúdo dentro do arquivo selecionado */ /* Codificamos para UTF8 os campos para não dar problemas com acentuação */ fwrite($ponteiro, utf8_encode($conteudo)); /* Fechamos o arquivo */ fclose($ponteiro); /* Se não retornou nenhum resultado */ } else { /* Manda a mensagem de erro para o Flash */ print "&erro=Não existe nenhum registro no Guestbook!&erroMensagem=1"; } /* Selecionando a Ação */ $action = $_GET['action']; /* Seleciona a Ação */ switch ("$action") { /* Caso seja ação cadastrar */ case 'cadastrar': /* Variáveis vindas do Flash pelo método POST */ /* Codificamos para ISO-8859-1 */ $nome = utf8_decode(@$_POST['nome']); $email = utf8_decode(@$_POST['email']); $comentario = utf8_decode(@$_POST['comentario']); /* Deixamos a data com o formato Dia/Mes/Ano */ $data = date("d/m/Y"); /* Inserimos os dados no Banco de Dados */ $cadastra = mysql_query("INSERT INTO guestbook (nome,email,data,comentario) VALUES ('$nome','$email','$data','$comentario')") or die(mysql_error()); /* Manda a mensagem de Cadastro efetuado com Sucesso para o Flash */ print "&mensagem=Obrigado por Assinar o Guest Book&enviado=1"; break; } ?>
Criando a interface no Flash
Chegou a hora de ir para o Flash. Comecei com um palco com dimenções de 300×350. A disposição das camadas será assim:

Vamos posicionar nossos itens no primeiro frame. Os nomes em vermelho são as instancias dos objetos:

vazio: MovieClip em branco, posicione na camada Conteúdo.
statusGuest: Campo de texto dinâmico, posicione na camada Conteúdo.
mascara: MovieClip, posicione na camada Máscara.
scrollBar: Componente criado, posicione na camada Conteúdo.
paginacao: MovieClip em branco, posicione na camada Conteúdo.
escrever: Componente Button, posicione na camada Conteúdo.
Agora, no segundo frame:

nome: Campo de texto input, posicione na camada Conteúdo.
emai: Campo de texto input, posicione na camada Conteúdo.
comentario: Campo de texto input, posicione na camada Conteúdo.
status_txt: Campo de texto dinâmico, posicione na camada Conteúdo.
limpar: Componente Button, posicione na camada Conteúdo.
enviar: Componente Button, posicione na camada Conteúdo.
voltar: Componente Button, posicine na camada Conteúdo.
Vocês devem estar se perguntando. Que ScrollBar é esse. Esse ScrollBar foi criado por um de nossos Colunistas, Hugo Ferreira da Silva. Nós vamos seguir as mesmas regras de criação dos MovieClips. Para os que não conhecem ou não tenham criado, segue o Link do Tutorial:
ScrollBar para MovieClips e TextFields
Nós iremos modificar o código dele. Substitua as ações dele por essas:
/* Importamos a Classe Tween */ import mx.transitions.Tween; import mx.transitions.easing.*; /* Listener para o Mouse */ var mouseListener:Object = new Object(); /* Coloca no tamanho normal */ _xscale = _yscale=100; /* Pode ser um movieclip ou um textfield */ var alvo = _parent[alvo]; /* Posição inicial do movieclip em y */ var sy:Number = alvo._y; /* Altera o tamanho da barra */ track._height = track_height; /* Tira a maozinha dos botões */ btn_baixo.useHandCursor = btn_cima.useHandCursor=pan.useHandCursor=track.useHandCursor=false; /* Mínimo em _y q o pan pode ir */ var miny:Number = Math.round(track._y); /* Máximo em _y q o pan pode ir */ var maxy:Number = Math.round((track._y+track._height)-pan._height); /* Quando o cara pressionar o botão de cima */ btn_cima.onPress = function() { /* Chamamos a função mover */ mover(); /* Deixamos a variável subindo igual a true */ subindo = true; /* Deixamos a variável descendo igual a false */ descendo = false; }; /* Quando tirar o mouse*/ btn_cima.onRelease = btn_cima.onReleaseOutside=function () { /* Deixamos a variável subindo e descendo igual a false */ subindo = descendo=false; /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; }; /* Quando o cara pressionar o botão de baixo */ btn_baixo.onPress = function() { /* Chamamos a função mover */ mover(); /* Deixamos a variável descendo igual a true */ descendo = true; /* Deixamos a variável subindo igual a false */ subindo = false; }; /* Quando tirar o mouse */ btn_baixo.onRelease = btn_baixo.onReleaseOutside=function () { /* Deixamos a variável descendo e subindo igual a false */ descendo = subindo=false; /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; }; /* Quando pressionar o pan */ pan.onPress = function() { /* Inicia o arrastamento */ startDrag(this, false, this._x, miny, this._x, maxy); /* Chamamos a função mover */ mover(); }; /* Quando soltar o mouse */ pan.onRelease = pan.onReleaseOutside=function () { /* Para o arrastamento */ stopDrag(); /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; }; /* Quando pressionar o track */ track.onPress = function() { /* Chamamos a função mover */ mover(); /* Move o pan */ pan._y = _ymouse-pan._height/2; /* Se o pan passar do valor máximo volta para o máximo */ if (pan._y>=maxy) { pan._y = maxy; } /* Se o pan passar do valor mínimo volta para o mínimo */ if (pan._y<=miny) { pan._y = miny; } }; /* Ao girar da bolinha do Mouse */ mouseListener.onMouseWheel = function(delta) { /* Verificamos se o Mouse está em cima das frases ou do ScrollBar */ if (_parent.mascara.hitTest(_root._xmouse, _root._ymouse) || _parent.scrollBar.hitTest(_root._xmouse, _root._ymouse)) { /* Chamamos a função mover */ mover(); /* Se delta for igual a 3 sobe, senão desce*/ if (delta == 3) { /* Se não estiver a ponto de ir além do que pode */ if (pan._y-1>miny) { pan._y -= 5; } else { pan._y = miny; /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; } } else { /* Se não estiver a ponto de ir além do que pode */ if (pan._y+1<maxy) { pan._y += 5; } else { pan._y = maxy; /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; } } } else { /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; } }; /* Cria o onEnterFrame */ function mover() { _root.onEnterFrame = function() { /* Se estiver subindo */ if (subindo) { /* Se não estiver a ponto de ir além do que pode */ if (pan._y-1>miny) { pan._y -= 5; } else { pan._y = miny; /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; } } /* Se estiver descendo */ if (descendo) { /* Se não estiver a ponto de ir além do que pode */ if (pan._y+1<maxy) { pan._y += 5; } else { pan._y = maxy; /* Deletamos o onEnterFrame */ delete _root.onEnterFrame; } } /* Calcula */ var s:Number = ((pan._y-miny)/(maxy-miny))*100; var p:Number = (alvo._height-mascara)/100; /* Movemos o alvo */ var tw:Tween = new Tween(alvo, "_y", Back.easeOut, alvo._y, sy-(p*s), 1, true); }; } /* Adicionamos o listener ao Mouse */ Mouse.addListener(mouseListener);
Outra coisa, precisamos dizer algumas coisas ao ScrollBar criado, quem ele deve mover, o tamanho da barra e o tamanho da mascara. Deixaremos igual a essa imagem:

Reparem uma coisa. Criei o scrollBar com altura (height) de 250, então devo deixar o campo Altura da Mascara com o tamanho do ScrollBar e o MovieClip máscara com o mesmo tamanho, no caso, 250. O campo Alvo preenchemos com o MovieClip que queremos que faça o scroll, e Altura da Barra, a altura do MovieClip track.
Agora, criaremos dois MovieClips, um vai ser responsável pelas páginas, e outro para exibir as mensagens. Os nomes em vermelho são as instâncias dos objetos


pag_txt: Campos de texto dinâmico.


nome_txt: Campo de texto dinâmico.
email_txt: Campo de texto dinâmico.
dia: Campo de texto dinâmico.
comentario_txt: Campo de texto dinâmico.
scroll_comentario: Componente UIScrollBar.
Com nossos MovieClips e ScrollBar criados e instanciados vamos ao ActionScript. Coloquem isso no primeiro frame na camada Actions:
/* Ocultamos os itens do menu de contexto */ Stage.showMenu = false; /* Paramos o filme */ stop(); /* Mensagem de Carregamento */ statusGuest.text = "Carregando Mensagens"; /* Deixamos o ScrollBar invisível */ scrollBar._visible = false; /* Definimos a máscara */ vazio.setMask(mascara); /* Quantidade de colunas desejada */ var quantidadeColuna:Number = 1; /* Quantidade de linhas desejadas */ var quantidadeLinha:Number = 20; /* Quantidade de páginas */ var quantidadePagina:Number = 0; /* Deixamos linhaAtual e colunaAtual igual a 0 */ var linhaAtual:Number, colunaAtual:Number = 0; /* Criamos um LoadVars que recebe as informações do PHP */ var objRecebe:LoadVars = new LoadVars(); /* Criamos um novo XML */ var xml:XML = new XML(); /* Ignoramo os espaços em branco */ xml.ignoreWhite = true; /* Carregamos o arquivo PHP evitando o Cache da máquina */ objRecebe.load("http://natan-alves.t35.com/guestMx.php?cache="+getTimer()); /* Ao carregar o arquivo PHP */ objRecebe.onLoad = function(ok) { /* Se for ok */ if (ok) { /* Se a variavel erroMensagem for igual a 1 */ if (this.erroMensagem == 1) { /* Mostramos qual o erro */ statusGuest.text = this.erro; /* Se não */ } else { /* Apagamos o campo statusGuest */ statusGuest.text = ""; /* Carregamos o arquivo XML evitando o Cache da máquina */ xml.load("http://natan-alves.t35.com/guestMx.xml?cache="+getTimer()); } /* Se não for ok */ } else { /* Mostramos a mensagem de erro */ statusGuest.text = "Erro ao carregar os arquivos"; } }; /* Ao carregar do arquivo XML */ xml.onLoad = function(ok) { /* Se for ok */ if (ok) { /* Apagamos o campo statusGuest */ statusGuest.text = ""; /* Dizemos qual o primeiro nó */ xmlNode = this.firstChild; /* Criamos uma variável para o total de itens no XML */ total = xmlNode.childNodes.length; /* Quantidade de página é igual a total dividido por quantidade de linha vezes coluna */ quantidadePagina = Math.ceil((total)/(quantidadeColuna*quantidadeLinha)); /* Se quantidade de páginas for maior que 1 */ if (quantidadePagina>1) { /* Chamamos a função criaPaginacao */ criaPaginacao(); /* Se quantidade de página for menor que 1 */ } else { /* Chamamos a função preencher */ preencher(); /* Deletemos a função criaPaginacao */ delete criaPaginacao(); /* Removemos o MovieClip paginação */ paginacao.unloadMovie(); } /* Se não for ok */ } else { /* Mostramos a mensagem de erro */ statusGuest.text = "Erro ao carregar os arquivos"; } }; /* Função preencher */ function preencher() { /* Chamamos o MovieClip recebe no MovieClip vazio */ var mc:MovieClip = vazio.attachMovie("recebe", "recebe"+i, vazio.getNextHighestDepth()); /* Posicionamos o MovieClip */ mc._x = Math.round(colunaAtual*mc._width+colunaAtual*5); mc._y = Math.round(linhaAtual*mc._height+linhaAtual*5); /* Deixamos o campo de texto dinamico nome_txt aumentar sozinho conforme o texto */ mc.nome_txt.autoSize = true; /* Deixamos o campo de texto dinamico email_txt aumentar sozinho conforme o texto */ mc.email_txt.autoSize = true; /* Mostramos o Nome */ mc.nome_txt.text = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue; /* Mostramos o E-mail */ mc.email_txt.text = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue; /* Mostramos a Data da postagem */ mc.dia.text = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue; /* Mostramos o Comentário */ mc.comentario_txt.text = xmlNode.childNodes[i].childNodes[3].firstChild.nodeValue; /* Colocamos os MovieClips importados no Array mcs pelo método push */ mcs.push(mc); /* Incrementamos i e coluna */ i++, colunaAtual++; /* Se colunaAtual for igual a quantidadeColuna e linhaAtual for menor que quantidadeLinha */ if (colunaAtual == quantidadeColuna && linhaAtual<quantidadeLinha) { /* Zeramos a coluna */ colunaAtual = 0; /* Incrementamos linha */ linhaAtual++; } /* Se i for menor que total */ if (i<total) { /* Chamamos a função preecher */ preencher(); } /* Se a altura do scrollBar for menor que altura do MovieClip vazio */ if (scrollBar._height>vazio._height) { /* Deixamos o MovieClip scrollBar invisível */ scrollBar._visible = false; /* Se não */ } else { /* Deixamos o MovieClip scrollBar visível */ scrollBar._visible = true; } } /* Função criaPaginacao */ function criaPaginacao() { /* Para a quantidadePagina */ for (var paginas:Number = 0; paginas<quantidadePagina; paginas++) { /* Importamos o MovieClip pag_mc */ var pg = paginacao.attachMovie("pag_mc", "p"+paginas, paginacao.getNextHighestDepth()); /* Posicionamos ele */ pg._x = Math.round(paginas*pg._width+paginas*3); /* Retorna o ponto em que se deve carregar as Mensagens */ pg.idpag = paginas*(quantidadeColuna*quantidadeLinha); /* Numero da página */ pg.pag_txt.text = paginas+1; /* Definimos a página atual */ pg.atual = paginas; /* Ao clicar da página */ pg.onRelease = function() { /* Retornamos a posição de origem do pan */ scrollBar.pan._y = 20; /* Executa a função remove */ remove(); /* Execute a função ativar */ ativar(this.atual); /* Deixamos a variável i igual ao id da paginação */ i = this.idpag; /* Zeramos a variável colunaAtual */ colunaAtual = 0; /* Zeramos a variável linhaAtual */ linhaAtual = 0; /* Executa a função preencher */ preencher(); }; /* Deixamos a primeira página ativada */ paginacao.p0.onRelease(); } } /* Função remove */ function remove():Void { /* Criamos um loop for para remover os MovieClips */ for (var i:Number = 0; i<mcs.length; i++) { /* Removemos os MovieClips com o método removeMovieClip */ mcs[i].removeMovieClip(); } /* Zere o array mcs */ mcs = []; } /* Função ativar */ function ativar(num:Number):Void { /* O loop for abaixo vai servir para definir quais dos MovieClips da paginação vão ficar habilitados, e o que ficará desabilitado */ for (var i = 0; i<quantidadePagina; i++) { /* Se num for diferente de i */ if (num != i) { /* Habilitamos as páginas */ eval("paginacao.p"+i).enabled = true; } else { /* Desativamos as páginas */ eval("paginacao.p"+i).enabled = false; } } } escrever.onPress = function() { gotoAndStop(2); };
Agora, coloquem isso no segundo frame da camada Actions:
/* Paramos o filme */ stop(); /* Definimos a ordem de tabulação */ nome.tabIndex = 1; email.tabIndex = 2; comentario.tabIndex = 3; enviar.tabIndex = 4; limpar.tabIndex = 5; /* Criamos um LoadVars que manda as informações ao PHP */ var objManda:LoadVars = new LoadVars(); /* Ao pressionar do botão enviar */ enviar.onPress = function() { /* Verificamos se o campo nome foi preenchido */ if (nome.text == "") { /* Mostramos a mensagem de erro */ status_txt.text = "Informe seu Nome"; /* Se não, verificamos se o campo email foi preenchido */ } else if (email.text == "") { /* Mostramos a mensagem de erro */ status_txt.text = "Informe seu E-mail"; /* Se não, verificamos se o campo email contém os caracteres @ e . */ } else if (email.text.indexOf("@") == -1 || email.text.indexOf(".") == -1) { /* Mostramos a mensagem de erro */ status_txt.text = "Informe corretamente seu E-mail"; /* Se não, verificamos se o campo comentario foi preenchido */ } else if (comentario.text == "") { status_txt.text = "Informe uma mensagem para enviar"; /* Se todos os campos estiverem corretos */ } else { /* Mostramos o status de Enviando Mensagem */ status_txt.text = "Enviando Mensagem"; /* Mandamos ao PHP os valores */ /* O nome digitado no campo nome */ objManda.nome = nome.text; /* O email digitado no campo email */ objManda.email = email.text; /* O comentário digitado no campo comentario */ objManda.comentario = comentario.text; /* Enviamos ao PHP os dados e carregamos as mensagens do PHP */ objManda.sendAndLoad("http://natan-alves.t35.com/guestMx.php?action=cadastrar", objManda, "POST"); /* Ao carregar o arquivo PHP */ objManda.onLoad = function(ok) { /* Se carregou sem problemas */ if (ok) { /* Mostramos a mensagem vinda do PHP */ status_txt.text = this.mensagem; /* Apagamos os campos input */ nome.text = ""; email.text = ""; comentario.text = ""; intervalo = setInterval(volta, 2000); } }; } }; /* Ao pressionar do Botão limpar */ limpar.onPress = function() { /* Limpamos os campos input */ nome.text = ""; email.text = ""; comentario.text = ""; /* Limpamos o campo status_txt */ status_txt.text = ""; }; /* Função volta */ function volta() { /* Voltamos ao primeiro frame */ gotoAndStop(1); /* Acabamos com o intervalo */ clearInterval(intervalo); } /* Ao pressionar do botão voltar */ voltar.onPress = function() { /* Voltamos ao primeiro frame */ gotoAndStop(1); /* Acabamos com o intervalo */ clearInterval(intervalo); };
Se seguiram o tutorial corretamente, o resultado será como esse:
Considerações Finais
Hoje aprendemos como criar GuestBook. Aprendemos como criar um arquivo XML a partir de um código em PHP e como criar paginação no Flash. O ideal, sempre que possível utilizar XML, pois facilitam e muito nossa vida quando vamos ao Flash.
Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: http://www.natanalves.com
Um abraço a todos e até a próxima.
Autor: Natan D. Alves – Moderador do Fórum de Flash & ActionSctipt MXSTUDIO
Qualquer dúvida envie um e-mail para natanalves@mxstudio.com.br ou acesse nosso fórum




ShareThis
manda oo fla do tutorial do guestbook pra mim
naum to conseguindo terminar :/
Poxa, teria como disponibilizar o arquivo para download? Pq estou tentando fazer mas estou tendo dificuldades.
Um abraço, Bárbara.
Nossa esse tutorial é muito bom…. mas tb estou com um pequeno problema, está criando no bd as informaçãoes do botão enviar, criando certinho o guest.xml… mas na hora que vai visualizar os recados, naum da mensagem de erro mas tb naum aparece nada…
gostaria de uma dica…. e parabéns….
Desculpa…. acho q não preciso mais ja descobri… agora ta com outro pequeno problema mas vou tentar resolver…. Obrigado….
Oiii pessoal se alguem tiver o rsquivo pra download ou pode me manda no e-mail?? ficaria muito agradecido… abraços leonidas_leitao@yahoo.com.br
tou tentando!
Amigo RbLc, estou tendo este mesmo problema que você teve com o GuestBook. ELe tá conseguindo buscar os dados no XML, pois não está dando a mensagem de erro, mas fica em branco o local onde deve exibir o conteúdo.
Teria como vc me passar seu e-mail pra gente conversar?
Obrigado.
Natan, manda o fla pra mim também por favor. marcuscontato@gmail.com
Opa, teria como me mandar também, o tuto é muito legal, ele pronto é muito bacana, mas eh bem complicado, e sou um iniciante, teria como me enviar?
E o arquivo XML??? Não devemos criar???
Abraço!
Olá Natan, estou tentando aqui mas estou com o mesmo problema dos amigos, não consigo visualizar as mensagens. Será que tem alguma coisa com a máscara?
Por favor manda o o fla pra mim.
gente to com dificuldades para terminar o guestbook acho que o erro e pegueno pq a unica coisa que nao acontecendo e que o flash nao ta recebendo os dados.
aparece o erro: “Erro ao Carregar os Arguivos.”
quem puder ajuda por favor to precisando…
bruce_volei@hotmail.com
Ué o que houve ? Não postou meu comentário ? =/
tem como algum de você me mandar os arquivos pelo e-mail: alysson@servpro.com.br.
Obrigado
achei legal!
acho que pode me iluminar para a construção de uma agenda, porém não estou conseguindo. pode me mandar os arquivos (inclusive o *.fla) para que eu possa estudar melhor?
se puder, envia os arquivos para: riese@riese.com.br
Obrigado!
Um abraço!
Riese
Cara, muito bom esse escript, eu estava procurando uma coisa desse tipo e nao estava encontrando, mas como eu nao sou mudo bom em flash, gostaria de saber se vc poderia mandar para meu email. os codigos, valeu cara
Cara, por favor manda esses arquivos para meu email odilon7@hotmail.com, a muito tempo eu queria uma coisa desse tipo. agradeço
Opa Natan tudo bem to tendo dificuldade nessa montagem é possivel me enviar o fla ? abraço fabianomidi@fabianomidi.com
Ola natan vc poderia me passa os arquivo por email luiscadeira@hotmail.com
agrecido amigo
Seria possivel diponibilizar o download neste site…. estou tendo dificuldades….
Ola, não consigo criar, quando começo na parte do flash, podias-me mandar o ficheiro .fla sff?
meu mail ik_medive@hotmail.com
obrigado
I ai Natan blza?!
você poderia me enviar o arquivo .fla
thys@hotmail.com
valeu
Olá Natan blza
estou com dificuldades par terminar o guest book, voce poderia me enviar o arquivo .fla
no e-mail marcoseharoldo@hotmail.com.br
Kra tem como me mandar esse arquivos por e-mail.
Valew!!
dhiego1988@yahoo.com.br
já que tá todo mundo pedindo,..(rsrs) gostaria de receber tbm o fla,..não consegui terminar,..
vlew,..
Olá Natan!
Segui direitinho o tutorial e deu certo.
SErá que você poderia ajudar em incluir uma opção em que seja fácil excluir uma mensagem postada?
Obrigada!
Pô! eu ate fiz tudo, quando eu dou CTRL+enter funciona peleza, ele lê o bd que criei na net, mas quando eu dou F12 diz que os arquivos não podem ser carregados…
Me ajude por favor!!!
Obrigado…
http://www.viniciuserafael.com.br/comentario
Muito fera esse exemplo, mas não estou conseguindo fazer rodar.
Seria possivel enviar o .fla.
Valeu!!!!
Muito fera esse exemplo, mas não estou conseguindo fazer rodar.
Seria possivel enviar o .fla.
valdsonleite@gmail.com
como eu coloco um formulario de comentario igual a esse no blogger? por favor me ajudem…
zedalontra.blogspot.com
Ola adorei o tuto isto q estava procurando, porem sou meio iniciante e já q todos estao pedindo envia pra mim também
du_269@hotmail.com
excelente
Hi!I like your site keep going.