Integração mySQL + PHP + Flash

Fala comunidade!

Iremos iniciar uma série de estudos sobre como integrar mySQL + PHP +
Flash para fazer um catálogo de produtos.
Este é um catálogo
simples, onde não irei cadastrar as empresas, nem fazer validação
de usuário
para ver se ele pode ou não cadastrar produtos. Este tutorial tem
como intuito dar-lhe uma direção de como começar.
Veremos hoje sobre o mySQL e PHP (parte de cadastro). Para que possamos
concluir este tutorial, você irá precisar:

  • Servidor que rode PHP e mySQL;
  • Noções de XML (para um estudo sobre XML, clique
    aqui
    )
  • Flash MX 2004.

Criando as tabelas no mySQL

Caso você não tenha permissões de criar bancos de dados, fale com seu
administrador de sistema. Para nosso estudo, criei uma base de dados chamada catalogo.
– cria a tabela de tipos de produtos
Create table tipos (
idtipo Int NOT NULL AUTO_INCREMENT,
nome Char(35) NOT NULL,
data_cadastro Date,
Primary Key (idtipo)) TYPE = InnoDB
ROW_FORMAT = Default;

– cria a tabela de produtos
Create table produtos (
idproduto Int NOT NULL AUTO_INCREMENT,
idtipo Int NOT NULL,
nome Char(35) NOT NULL,
descricao Text,
valor Float NOT NULL,
foto Longblob,
destaque Bool DEFAULT 0,
data_cadastro Date NOT NULL,
Primary Key (idproduto)) TYPE = InnoDB
ROW_FORMAT = Default;

– adiciona um index para o campo idtipo
Alter table produtos add Index IX_Relationship1 (idtipo);
– adiciona uma chave estrangeira na tabela de produtos com referência à tabela
de tipos
Alter table produtos add Foreign Key (idtipo) references tipos (idtipo) on
delete restrict on update restrict;

– insere alguns registros na tabela de tipos
insert into tipos (nome, data_cadastro) values (‘CDs’,current_date);
insert into tipos (nome, data_cadastro) values (‘DVDs’,current_date);
insert into tipos (nome, data_cadastro) values (‘Mouses’,current_date);
insert into tipos (nome, data_cadastro) values (‘Monitores’,current_date);
insert into tipos (nome, data_cadastro) values (‘Teclados’,current_date);
insert into tipos (nome, data_cadastro) values (‘Gabinetes’,current_date);
insert into tipos (nome, data_cadastro) values (‘Impressoras’,current_date);
insert into tipos (nome, data_cadastro) values (‘Scanners’,current_date);

Ok, agora que criamos nossas tabelas e populamos nossa tabela de tipos, vamos
começar com os arquivos PHP.
Crie um arquivo chamado config.php com os dados abaixo:

<?php
/* conecta no banco e seleciona a base de dados */
$cn = mysql_connect (“host”,”usuario”,”senha”);
mysql_select_db(“catalogo”,$cn);

/* função que
converte as imagens para JPG e retorna o conteudo como string */
function imgToJpg ($srcFile) {
/* pega o conteúdo do arquivo */
$str = @file_get_contents($srcFile) or die(“Arquivo não encontrado”);

/* cria uma imagens de origem */
$simg = imagecreatefromstring($str);

/* inicia o buffer, o que impede que tudo que vá para a tela de saída
apareça para o usuário */
ob_start();

/* joga a imagem transformada em JPG para o buffer */
imagejpeg($simg, ”, 90);

/* pega a imagem do buffer */
$jpg = ob_get_contents();

/* termina o buffer */
ob_end_clean();

/* destrói a imagem */
imagedestroy($simg);

/* retorna a string */
return $jpg;
}

?>

Vamos fazer o arquivo que será responsável por fazer a validação
e salvar o registro no banco de dados. Salve-o como salvar.php

<?php
/* var que checa se tem algum erro */
$erro = false;
/* checa se o campo nome foi digitado alguma coisa */
if($_POST["nome"] == ”) {
$_REQUEST["nome_error"] = “Informe um nome”;
$erro = true;
}
/* checa se o campo tipo foi informado */
if($_POST["idtipo"] == ”) {
$_REQUEST["idtipo_error"] = “Informe um tipo de produto”;
$erro = true;
}
/* checa se o campo descricao foi digitado alguma coisa */
if($_POST["descricao"] == ”) {
$_REQUEST["descricao_error"] = “Informe uma descricao para o produto”;
$erro = true;
}
/* checa se o campo valor foi digitado alguma coisa */
if($_POST["valor"] == ”) {
$_REQUEST["valor_error"] = “Informe um valor para o produto”;
$erro = true;
}
/* checa se o usuário enviou uma imagem */
if(is_uploaded_file($_FILES["arquivo"]["tmp_name"])) {
/* checa se o cara enviou uma imagem MESMO */
if(!preg_match(“/(jpeg|bmp|gif|png|jpg)/i”, $_FILES["arquivo"]["type"],
$r)) {
/* danadinho! enviou outra coisa que não é uma das imagens permitidas
acima */
$_REQUEST["arquivo_error"] = “Quer um curso para saber o que é uma
imagem? :o )”;
$erro = true;
} else {

/* legal, ele realmente mandou uma imagem */
$img = imgToJpg($_FILES["arquivo"]["tmp_name"]);
}
} else {
/* ele não mandou nada */
$_REQUEST["arquivo_error"] = “Você deve enviar uma imagem”;
$erro = true;
}

/* bom, se deu tudo certo, vamos inserir no banco */
if($erro === false) {
/* formata a SQL para não haver erros de inserção */
$sql = sprintf(“insert into produtos (idtipo,nome,descricao,valor,destaque,foto,data_cadastro)”.
“values (%d,’%s’,'%s’,%0.2f,%d,’%s’,current_date)”,
$_POST["idtipo"], $_POST["nome"],$_POST["descricao"],$_POST["valor"],$_POST["destaque"],mysql_escape_string($img));

/* insere no banco */
mysql_query($sql);

/* mostra uma mensagem para o usuário informando que a inserção
foi um sucesso */
echo “<script>alert(‘Inserção realizada’);</script>”;

/* zera as variaveis */
unset($_POST,$_REQUEST, $img);
}
?>

Iremos agora fazer o PHP que mostra o formulário.
Salve como cadastro.php.

<?php
/* pega o arquivo de configuração */
require_once “config.php”;

/* se o cara clicar no botão salvar, chama
o PHP que insere no banco de dados */
if(isset($_POST["acao"]) && $_POST["acao"]
== “Salvar”) {
require_once “salvar.php”;
}

/* função para imprimir o campo do formulário com
o valor se tiver na variavel post */
function input ($type, $va, $extra=”) {
/* se não for do tipo textarea */
if($type != “textarea”) {
/* começa a input */
$input = “<input type=’$type’ name=’$va’”;
/* se a variavel post com o mesmo nome do que o campo
estiver setada */
if(isset($_POST[$va])) {
/* coloca na input */
$input .= ” value=’”.$_POST[$va].”‘”;
}
/* adiciona alguma coisa extra e termina a input */
$input .= ” $extra>”;
} else {
/* começa a textarea */
$input = “<textarea name=’$va’ cols=’50′ rows=’5′>”;
/* se a variavel post com o mesmo nome do que o campo
estiver setada */
if(isset($_POST[$va])) {
/* coloca o valor na textarea */
$input .= $_POST[$va];
}
/* termina a textarea */
$input .= “</textarea>”;
}
/* checa se tem mensagem de erro para este input */
if(isset($_REQUEST[$va."_error"])) {
$input .= “<font color=red>”.$_REQUEST[$va."_error"].”</font>”;
}
/* retorna a input */
return $input;
}

/* formulario */
$form = “<html>”.
“<head><title>Formulário de cadastro</title>”.
“<style type=’text/css’>”.
“td, body, textarea { “.
“font-family: Verdana; font-size: 11px; “.
“background-color: #FFFFFF;”.
“}”.
“</style>”.
“</head>”.
“<body>”.
“<form action=’”.$_SERVER["PHP_SELF"].”‘ method=’post’
enctype=’multipart/form-data’ name=’cadastro’>”.
“<table cellpadding=’2′ cellspacing=’1′ bgcolor=’#CCCCCC’ width=’100%’>”.

“<tr><td colspan=’2′><b>Formulário de
cadastro</b></td></tr>”.
“<tr><td width=’30%’ align=’right’>Nome:</td><td>”.input(‘text’,'nome’).”</td></tr>”.
“<tr><td align=’right’>Tipo:</td><td><select
name=idtipo>”;

/* pega todos os tipos */
$rs = mysql_query(“select * from tipos order by nome asc”);
while($row = mysql_fetch_assoc($rs)) {
$form .= “<option value=’”.$row["idtipo"].”‘”;
if(isset($_POST["idtipo"]) && $row["idtipo"] ==
$_POST["idtipo"]) {
$form .= ” selected”;
}
$form .= “>”.$row["nome"].”</option>”;
}

/* continuando o formulário */
$form .= “</td></tr>”.
“<tr><td align=’right’>Descrição:</td><td>”.input(“textarea”,”descricao”).”</td></tr>”.
“<tr><td align=’right’>Valor:</td><td>”.input(“text”,”valor”).”</td></tr>”.
“<tr><td align=’right’>Foto:</td><td>”.input(“file”,”arquivo”).”</td></tr>”.
“<tr><td align=’right’>Destaque:</td><td>”.
input(“checkbox”,”destaque”,($_POST["destaque"]==1?”checked”:”value=’1′”)). “</td></tr>”.
“<tr><td colspan=2 align=center>”. input(“submit”,”acao”,($_POST["acao"]
== “”?”value=’Salvar’”:”")).”</td></tr>”.
“</table></form>”.
“</body></html>”;

/* mostra na tela */
echo $form;
?>

O exemplo de formulário de cadastro que fiz é bem simples, somente para
que possamos cadastrar nossos produtos.
Na próxima coluna, irei mostrar como transformar os dados que estão no
banco de dados em XML e como pegar uma imagem do BD e jogar para Flash.

Um exemplo disso online? Está
aqui
!

@braços e fiquem com Deus!

Hugo Ferreira da Silva

Escrito por hugo on junho 22, 2005. Arquivado em Flash. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

6 respostas a Integração mySQL + PHP + Flash

  1. Ola amigo, eu segui todos os passos corretamente(quase certeza pq c não nem teria permitido a inserção de dados), porém acho que quando o script envia os dados da imagem para o BD acontece algum erro, pois eu fiz a primeira inserção e fui vizualizar no BD se estava tudo correto, aí o BD entra em Loop!, eu removi o registro e inseri novamente e… mesmo erro! lol
    Se puder ajudar… ah e essas funções que voce usou não consegui encontrar no manual do php…

  2. iae, cara já procurei por toda internet mas não consegui intender o mysql

    depois de digitado todo o código como eu salvo? uq eu fasso?

  3. Pessoal, é muito útil o uso da linguagem de Scripts PHP no lado do servidor. Embora tenha dado início minha carreira com Java, desejo colocar ela – PHP, na minha lista de aprendizado. É rápido e para tarefas simples é o recomendado. Pois bem, segue alguns links que poderam ajudar. O primeiro, um excelente tutorial de como integrar o PHP + MySQL e Flash, e o segundo um SGBD excelente para administração de BD MySQL, para mim o melhor.

    1- http://imasters.uol.com.br/artigo/4615/fla…itar_e_excluir/

    2 -
    http://www.baixaki.com.br/download/ems-mysql-manager-professional-for-windows-single-license-.htm

    Falou pessoal.
    Se alguem desejar saber como fazer funcionar o WordPress MU, Apache 2.x, PHP e MySQL envie um e-mail.

    Hugo, agradeço pelo espaço, e excelente artigo :)

  4. Muito bom seus tutoriais, porém sou iniciante, em php com mysql,

    não compreendi o que eu vou fazer nesse passo

    – adiciona um index para o campo idtipo
    Alter table produtos add Index IX_Relationship1 (idtipo);
    – adiciona uma chave estrangeira na tabela de produtos com referência à tabela
    de tipos
    Alter table produtos add Foreign Key (idtipo) references tipos (idtipo) on
    delete restrict on update restrict;

    – insere alguns registros na tabela de tipos
    insert into tipos (nome, data_cadastro) values (’CDs’,current_date);
    insert into tipos (nome, data_cadastro) values (’DVDs’,current_date);
    insert into tipos (nome, data_cadastro) values (’Mouses’,current_date);
    insert into tipos (nome, data_cadastro) values (’Monitores’,current_date);
    insert into tipos (nome, data_cadastro) values (’Teclados’,current_date);
    insert into tipos (nome, data_cadastro) values (’Gabinetes’,current_date);
    insert into tipos (nome, data_cadastro) values (’Impressoras’,current_date);
    insert into tipos (nome, data_cadastro) values (’Scanners’,current_date);

    isso ainda é no mysql?
    ou outro arquivo que faço ja no php?

    Muito grata!
    Carol

  5. Carol,

    isso ai é o código que vc deve digitar para alterar as tabelas no banco de dados do mysql

    ele vai coloca uma referencia no index da tabela produtos e criar uma chave de registro no id tbm

    e logo embaixo ele só vai inserir alguns dados pra tabela tipos

    qualquer duvida comente ^_^

  6. esta bem explicado mas o link esta quebrado
    seria possivel mandarme o link p download
    obrigado

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>