Flash + MySQL + PHP

 :: Programando :: PHP

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Flash + MySQL + PHP

Mensagem por Bruno Cavalcante em Qui 29 Mar - 10:00

lol!
Interação do Flash com PHP e MySQL - Exibir, Inserir, Editar e Excluir
Neste artigo realizaremos a interação do Flash com o PHP e MySQL de uma forma muito simples. O único requisito é uma noção básica de PHP e MySQL.

Para iniciar, vamos ver como funciona o retorno de dados do PHP para Flash. Abra um novo arquivo PHP e salve-o como 'retorno.php'. O conteúdo é apenas a impressão de texto no formato de variável igual ao valor.
echo "teste=Imasters";
?>
Agora vamos ao Flash resgatar este valor através da classe LoadVars.
// Objeto LoadVars.
var retorno:LoadVars = new LoadVars();
// Carrega o arquivo PHP 'retorno.php'.
retorno.load('http://localhost/retorno.php');
// Ao arquivo ser carregado, a função 'carregarDados' é chamada.
retorno.onLoad = carregarDados;

function carregarDados():Void{
// Exibe o valor da variável 'teste' declarada no arquivo PHP na janela Output.
trace(this.teste);
};
Em "retorno.load('http://localhost/retorno.php');" o endereço poderia ser apenas 'retorno.php', mas para que rode no ambiente de teste do Flash, é necessário colocar junto ao endereço do servidor para que rode a partir do mesmo.
Exibindo dados do banco MySQL no Flash
O processo é o mesmo descrito acima. A única diferença é que, no PHP, os dados virão do banco de dados.
Primeiramente vamos criar o db 'flashInteracao', com uma tabela 'guestbook' de três campos: id, nome, mensagem. A SQL para a criação da tabela 'guestbook' é a seguinte:
CREATE TABLE `guestbook` (
`id` TINYINT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 50 ) NOT NULL ,
`mensagem` VARCHAR( 255 ) NOT NULL
) ENGINE = innodb;
SQL para inserir alguns dados na tabela 'guestbook'.
INSERT INTO `guestbook` ( `id` , `nome` , `mensagem` ) VALUES
(NULL , 'Popai', 'Marinheiro, coma espinafre!'),
(NULL , 'Pernalonga', 'Velhinho, eu consegui desenvolver o sistema. =)'),
(NULL , 'Calvin', 'Cadê o Haroldo?');
O script para a conexão com o db. Altere o valor das constantes 'DB_USUARIO, DB_SENHA e DB_HOST' conforme suas configurações e salve-o como 'conexao.php'.

// Constantes com os dados do db.
define('DB_NOME', 'flashInteracao');
define('DB_USUARIO', 'root');
define('DB_SENHA', '');
define('DB_HOST', 'localhost');

// Conecta ao MySQL.
$conexao = mysql_connect(DB_HOST, DB_USUARIO, DB_SENHA) or die ('Erro ao conectar ao MySQL: ' . mysql_error());
// Conectar ao db 'flashInteracao'.
$conexaoDb = mysql_select_db(DB_NOME, $conexao) or die ('Erro ao conectar a base de dados: ' . mysql_error());

?>
O script PHP responsável por retornar os dados. Salve-o como 'retorno.php'.

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Data no passado
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Sempre modificado
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
// Os cabeçalhos acima evitam que o arquivo seja colocado em cache, subscrevendo quaisquer configurações do usuário.

// Inclui o script de conexão.
require_once('conexao.php');

// Resgatando os dados do db 'guestbook'.
$query = "SELECT id, nome, mensagem FROM guestbook";
// Através da função mysql_query(), a query é executada.
$sql = mysql_query($query);

$dados = ''; // Variável responsável por armazenar o resultado a cada loop.
$nLoop = 0; // Variável responsável por armazenar o número total de loops.

// A função mysql_fetch_array() gera um array com o resultando, e o while foi usado para colocar todos os resultados na variável '$dados'
// Já no formato em que o Flash reconheça (variável = valor), além do caractere '&' para separarem as variáveis.
while($n = mysql_fetch_array($sql)){
$dados .= '&id' . $nLoop . '=' . $n['id'];
$dados .= '&nome' . $nLoop . '=' . $n['nome'];
$dados .= '&mensagem' . $nLoop . '=' . $n['mensagem'];
$nLoop++; //soma 1 a cada loop.
};

// Imprime os dados obtidos no loop e o codifica para UFT-8
// e em seguida concatena (une) o número total de loops para que seja impresso junto aos dados.
echo utf8_encode($dados) . '&nLoop=' . $nLoop;

?>
Agora o actionscript fica da seguinte forma:
//objeto LoadVars.
var retorno:LoadVars = new LoadVars();
// Carrega o arquivo PHP 'retorno.php'.
retorno.load('http://localhost/retorno.php');
// Ao arquivo ser carregado a função 'carregarDados' é chamada.
retorno.onLoad = carregarDados;

function carregarDados():Void{
// Executa um loop até chegar ao número total de resultados.
for(var n:Number = 0; n trace(this['id' + n] + ' - ' + this['nome' + n] + ': ' + this['mensagem' + n]);
};
};
Inserindo os dados em um layout
Ok. Agora que os dados já estão sendo retornados, vamos inserí-los em um layout. O actionscript fica da seguinte forma:

//objeto LoadVars.
var retorno:LoadVars = new LoadVars();
// Carrega o arquivo PHP 'retorno.php'.
retorno.load('http://localhost/retorno.php');
// Ao arquivo ser carregado a função 'carregarDados' é chamada.
retorno.onLoad = carregarDados;

function carregarDados():Void{
listaNomes.removeAll(); //limpa o listBox.
// Executa um loop até chegar ao número total de resultados.
for(var n:Number = 0; n // Adiciona o nome como etiqueta ao listbox, e o número do loop com valor.
listaNomes.addItem({label:this['nome' + n], data:n});
};
};

// Objeto ouvinte do listbox 'listaNomes'.
var listObjt:Object = new Object();
// Quando um novo item for selecionado o evento change é chamado.
listObjt.change = function(mudar:Object){
// Grava a ID do item selecionado na variável 'listIdSelecionado'.
listIdSelecionado = mudar.target.value;

// Insere o nome selecionado no textField 'nomeText'.
nomeText.text = retorno['nome' + listIdSelecionado];
// Insere a mensagem selecionado no textField 'mensagemText'.
mensagemText.text = retorno['mensagem' + listIdSelecionado];
};
// Registra o objeto 'listObjt' como ouvinte.
listaNomes.addEventListener("change", listObjt);
Scripts PHP para a Atualização, Inserção e Exclusão de dados no db.
Script PHP para a atualização dos dados. Salve-o como 'update.php'.

// Inclui o script de conexão.
require_once('conexao.php');

// Resgatando os dados vindos do Flash e os converte para ISO-8859-1.
$id = utf8_decode($_POST['id']);
$novoNome = utf8_decode($_POST['nome']);
$novaMensagem = utf8_decode($_POST['mensagem']);

// Query responsável por atualizar o db.
$query = "UPDATE guestbook SET nome='$novoNome', mensagem='$novaMensagem' WHERE id='$id'";

// Através da função mysql_query() a query é executada.
$sql = mysql_query($query);

// Retorna 1 (true) ou 0 (false), será usado para verificar no Flash se o SQL foi completado com sucesso.
echo 'sucesso=' . $sql;

?>
Script PHP para a inserção de novos dados. Salve-o como 'inserir.php'.

// Inclui o script de conexão.
require_once('conexao.php');

// Resgatando os dados vindos do Flash e os converte para ISO-8859-1.
$id = utf8_decode($_POST['id']);
$novoNome = utf8_decode($_POST['nome']);
$novaMensagem = utf8_decode($_POST['mensagem']);

// Query responsável por inserir novos dados no db.
$query = "INSERT INTO guestbook (nome, mensagem) VALUES ('$novoNome', '$novaMensagem')";

// Através da função mysql_query(), a query é executada.
$sql = mysql_query($query);

// Retorna 1 (true) ou 0 (false), será usado para verificar no Flash se o SQL foi completado com sucesso.
echo 'sucesso=' . $sql;

?>
Script PHP para a exclusão de dados. Salve-o como 'excluir.php'.

// Inclui o script de conexão.
require_once('conexao.php');

// Resgatando osdados vindos do Flash e os converte para ISO-8859-1.
$id = utf8_decode($_POST['id']);

// Query responsável pela exlusão de dados no db.
$query = "DELETE FROM guestbook WHERE id='$id'";

// Através da função mysql_query() a query é executada.
$sql = mysql_query($query);

// Retorna 1 (true) ou 0 (false), será usado para verificar no Flash se o SQL foi completado com sucesso.
echo 'sucesso=' . $sql;

?>
E, por fim, o actionscript final:
// Objeto LoadVars.
var retorno:LoadVars = new LoadVars();
// Carrega o arquivo PHP 'retorno.php'.
retorno.load('http://localhost/retorno.php');
// Ao arquivo ser carregado a função 'carregarDados()' é chamada através do evento onLoad.
retorno.onLoad = carregarDados;

function carregarDados():Void{
listaNomes.removeAll(); // Limpa o listBox.
// Executa um loop até chegar ao número total de resultados.
for(var n:Number = 0; n // Adiciona o nome como etiqueta ao listbox, e o número do loop com valor.
listaNomes.addItem({label:this['nome' + n], data:n});
};
};

// Objeto ouvinte do listbox 'listaNomes'.
var listObjt:Object = new Object();
// Quando um novo item for selecionado o evento change é chamado.
listObjt.change = function(mudar:Object){
// Grava a ID do item selecionado na variável 'listIdSelecionado'.
listIdSelecionado = mudar.target.value;

// Insere o nome selecionado no textField 'nomeText'.
nomeText.text = retorno['nome' + listIdSelecionado];
// Insere a mensagem selecionado no textField 'mensagemText'.
mensagemText.text = retorno['mensagem' + listIdSelecionado];

habilitar(false); // Desabilita o botão 'btnExecutar' e os textFields 'nomeText' e 'mensagemText'.
status.text = 'OK'; // Insere na caixa de texto 'status' a palavra 'OK'.
};
// Registra o objeto 'listObjt' como ouvinte.
listaNomes.addEventListener("change", listObjt);

// Objeto loadVars
var lvguestbook:LoadVars = new LoadVars();
// Função chamada após o arquivo PHP ser carregado.
lvguestbook.onLoad = function(){
// É adicionado ao textField, se 'sucesso' for 'true', 'sucesso', caso contrário 'Erro'.
status.text = this.sucesso ? 'SUCESSO' : 'ERRO';

atualizaListBox(); // Função responsável por atualizar o listBox.
};

// Função a ser chamada ao clicar no botão 'btnExecutar'.
function enviarReceberDados():Void{
lvguestbook.id = retorno['id'+ listIdSelecionado]; // Envia o id.
lvguestbook.nome = nomeText.text; // Envia o nome.
lvguestbook.mensagem = mensagemText.text; // Envia a mensagem.
lvguestbook.sendAndLoad(urlPHP, lvguestbook, 'POST'); // Envia as variáveis e carrega o arquivo PHP.
};

function habilitar(valor:Boolean):Void{
// Habilita ou desabilita a edição dos textFields 'nomeText' e 'mensagemText'.
nomeText.editable = valor;
mensagemText.editable = valor;
//habilita ou desabilita o botão 'btnExecutar'.
btnExecutar.enabled = valor;
};
habilitar(false); // Desabilita o botão 'btnExecutar' e os textFields 'nomeText' e 'mensagemText'.

// Função do botão inserir
function funcInserir():Void{
habilitar(true); // Habilita o botão 'btnExecutar' e os textFields 'nomeText' e 'mensagemText'.

// Limpa os textFields 'nomeText' e 'mensagemText'.
nomeText.text = '';
mensagemText.text = '';

// Seta o arquivo PHP a ser usado.
urlPHP = 'http://localhost/inserir.php';
status.text = 'INSERINDO'; // Insere na caixa de texto 'status' a palavra 'INSERINDO'.
};

// Função do botão Editar
function funcEditar():Void{
habilitar(true); // Habilita o botão 'btnExecutar' e os textFields 'nomeText' e 'mensagemText'.

// Seta o arquivo PHP a ser usado.
urlPHP = 'http://localhost/update.php';
status.text = 'EDITANDO'; // Insere na caixa de texto 'status' a palavra 'EDITANDO'.
};

// Função do botão Exluir
function funcExcluir():Void{
// Seta o arquivo PHP a ser usado.
urlPHP = 'http://localhost/excluir.php';

enviarReceberDados(); // Chama função 'enviarReceberDados()'.
};

// Função responsável por atualizar o listBox após os dados serem atualizados.
function atualizaListBox():Void{
// Recarrega o arquivo PHP 'retorno.php'.
retorno.load('http://localhost/retorno.php');
// Ao arquivo ser carregado a função 'carregarDados()' é chamada através do evento onLoad.
retorno.onLoad = carregarDados;

habilitar(false); // Desabilita o botão 'btnExecutar' e os textFields 'nomeText' e 'mensagemText'.

// Limpa os textFields 'nomeText' e 'mensagemText'.
nomeText.text = '';
mensagemText.text = '';
};

btnInserir.onRelease = funcInserir; // Seta a função do botão 'btnInserir'.
btnEditar.onRelease = funcEditar; // Seta a função do botão 'btnEditar'.
btnExcluir.onRelease = funcExcluir; // Seta a função do botão 'btnExcluir'.
btnExecutar.onRelease = enviarReceberDados; // Seta a função do botão 'btnExecutar'.
Neste exercício, simplifiquei o máximo possível e não deixei o foco do artigo. Por este motivo não foi adicionado verificações nos textFields e não houveram otimizações no layout e na forma com que se efetuam as operações para uma melhor usabilidade, o que poderia deixar o desenvolvimento complexo e dificultando o entendimento do assunto proposto.
Anexos
flash-php-mysql.zip Download dos fontes.Você não tem permissão para fazer download dos arquivos anexados.(416 Kb) Baixado 1 vez(es)

__________________________________________

_____________Programação em Foco____________

_________________Seu Fórum__________________


Bruno Cavalcante
Acesse: [Você precisa estar registrado e conectado para ver este link.]
avatar
Bruno Cavalcante
Turma 20.911

Mensagens : 89
Reputação : -1
Data de inscrição : 30/03/2011
Localização : DF

http://www.kavalcanty.blogspot.com/

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 :: Programando :: PHP

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum