Criando um Portal de Notícias baseado em PHP/MySQL

Postado por Plinio Cruz em 19 de março de 2004 na categoria Banco de Dados, PHP, Programação, Tutorial | Leia o primeiro comentrio

1.º Passo – Criando e preparando o Banco de Dados (MySQL)Comece criando um banco de dados dedicado a este tutorial. Por exemplo, com o nome notícias; se já estiver no cliente MySQL, digite o seguinte:

create database noticias;

Por conseguinte, abra o banco de dados criado:

use noticias;

Agora é criar uma tabela para cadastro das suas notícias. Você pode seguir o exemplo abaixo, superprático:

CREATE TABLE noticias (
id int(5) NOT NULL auto_increment,
nome char(30) NOT NULL ,
sobrenome char(30) NOT NULL ,
cidade char(50) NOT NULL ,
estado char(2) NOT NULL ,
email char(80) ,
data date NOT NULL,
hora time NOT NULL ,
titulo char(100) NOT NULL ,
subtitulo char(200) ,
texto text NOT NULL ,
ver char(3) DEFAULT ‘off’ ,
PRIMARY KEY (id),
UNIQUE id (id)
);

Se você já tiver uma base de conhecimento em SQL, poderá saber o que cada linha acima realizará. Irei especificar o que você irá cadastrar em cada campo:

  • id = Campo de identificação da notícia (não é necessário cadastrar nenhum dado, pois ele já está habilitado com a função auto_increment que, automaticamente, irá inserindo novos valores)
  • nome = Primeiro nome do autor da notícia
  • sobrenome = Sobrenome do autor da notícia
  • cidade = Cidade do autor
  • estado = Estado da cidade (especificada com apenas 2 caracteres)
  • email = Email do autor, para contatos
  • data = Data utilizada, para saber quando foi realizado o cadastro (não será necessário nenhum cadastro, pois faremos isso no php automaticamente, inserindo a data atual)
  • hora = Hora utilizada no cadastro da notícias (também não é necessário o cadastro, pois será feito automaticamente com o PHP)
  • título = Título da notícia (máximo de 100 caracteres)
  • subtítulo = Pequeno resumo da sua notícia (máximo de 200 caracteres)
  • texto = Agora sim, o texto da sua notícia, sem limite de caracteres
  • ver = Este campo é curioso. Ele será utilizado para o webmaster poder autorizar cada notícia, pois caso não tivesse um campo parecido, toda notícia cadastrada iria para o site. É como um controle de notícias. O padrão aqui, é off, assim toda notícia primeiro será passada para o webmaster, para depois ser validada.

* são campos obrigatórios no cadastro Agora com o banco de dados preparado, é hora de criarmos o sistema de cadastro de notícias do seu site. Este será o 2.º passo! 2º Passo – Criando o sistema de cadastro de notíciasEste é um passo importante, onde um script criado em PHP irá inserir dados no banco de dados MySQL. Aqui iremos utilizar os conhecimentos passados no tutorial anterior, sobre questões básicas de PHP/MySQL. Primeiramente será criado o arquivo em HTML (formulário) para o cadastro de notícias. Vamos lá:

ARQUIVO cadastra.php

$data = date(“Y-m-d”);
$hora = date(“H:i:s”);
$novadata = substr($data,8,2) . “/” .substr($data,5,2) . “/” . substr($data,0,4);
$novahora = substr($hora,0,2) . “h” .substr($hora,3,2) . “min”;

echo “<h1>Sistema de Cadastro de Notícias</h1>”;
echo “<hr><br>”;
echo “<form action=’inserir.php’ method=’post’>”;
echo “Nome:<input name=’nome’ type=’text’ size=30> *<br>”;
echo “Sobrenome:<input name=’sobrenome’ type=’text’ size=30> *<br>”;
echo “Cidade:<input name=’cidade’ type=’text’ size=30> *<br>”;
echo “Estado:<i>(Exemplo: SP, RS, BA)</i><input name=’estado’ type=’text’ size=5> *<br>”;
echo “Email: <i>(Exemplo: feitosac@yahoo.com)</i><input name=’email’ type=’text’ size=30><br><br>”;
echo “Título do Texto:<input name=’titulo’ type=’text’ size=30> *<br>”;
echo “Subtítulo do Texto:<textarea name=’subtitulo’ rows=5 cols=30></textarea><br>”;
echo “Texto:<textarea name=’texto’ rows=10 cols=30></textarea> *<br>”;
echo “<input name=’data’ type=’hidden’ value=’$data’<>input name=’hora’ type=’hidden’ value=’$hora’>”;
echo “<input type=’submit’ value=’Cadastrar’>”;
echo “</form>”;
echo “<br><hr>”;
echo “<i>Campos marcados com <b>*</b> são obrigatórios no cadastro.<br>”;
echo “<b>Observação</b>: Será inserido no seu cadastro a data atual, bem como a hora atual do cadastro<br>”;
echo “Data: $novadata – Hora: $novahora<br>”;

FIM DO ARQUIVO cadastra.php

Vamos realizar uma pequena análise neste arquivo. Repare que os dados do formulário serão enviados para o script “inserir.php”, este, por conseguinte, será o responsável pela inserção desta notícia no MySQL. Outro ponto, é que não existem os campos id, ver, estes, como expliquei, serão inseridos automaticamente pelo MySQL, e os campos data, hora, serão inseridos pelo PHP.
Agora é hora de criar o script PHP responsável por isto tudo. Vamos nessa:

ARQUIVO inserir.php

//Vamos definir as variáveis de data e hora
//para inserção no banco de dados

//Agora com as variáveis de data e hora criadas
//vamos criar uma variável especial para a querie sql

$sql = “INSERT INTO noticias (nome, sobrenome, cidade, estado, email, data, hora,
titulo, subtitulo, texto) VALUES (‘$nome’, ‘$sobrenome’, ‘$cidade’, ‘$estado’,
‘$email’, ‘$data’, ‘$hora’, ‘$titulo’, ‘$subtitulo’, ‘$texto’)”;

//Agora é hora de contatar o mysql

$conexao = mysql_connect(“localhost”, “root”, “root”)
or die (“Configuração de Banco de Dados Errada!”);

//Substitua os valores acima caso não esteje de acordo com sua máquina
//Selecionando o banco de dados…

$db = mysql_select_db(“noticias”)
or die (“Banco de Dados Inexistente!”);

//Inserindo os dados

$sql = mysql_query($sql)
or die (“Houve erro na gravação dos dados, por favor, clique em voltar e verifique os campos obrigatórios!”);

echo “<h1>Cadastro efetuado com sucesso!</h1>”;

FIM DO ARQUIVO inserir.php

Você pode aperfeiçoar muito mais o script. Por exemplo, personalizar a mensagem de erro e de êxito, inserir um link para cadastrar novamente, etc.

Agora vamos para o próximo e último passo, “Recuperando os dados cadastrados” 3.º Passo – Recuperando os dados cadastradosIrei mostrar como selecionar, por exemplo, as últimas 15 notícias inseridas no MySQL; isto é muito útil, para sites que têm seções do tipo “Últimas Notícias”. Isto é feito com PHP novamente; faça conforme o exemplo abaixo, e salve como um arquivo em PHP.

ARQUIVO noticias.php

//Vamos precisar contar o MySQL novamente

$conexao = mysql_connect(“localhost”,”root”,”root”);
$db = mysql_select_db(“noticias”);

//Agora é realizar a querie de busca no banco de dados

$sql = “SELECT * FROM noticias WHERE ver = ‘on’ ORDER BY id DESC LIMIT 15″;

// Irá selecionar as últimas 15 notícias inseridas

// O curioso aqui, é que ele só irá selecionar os campos onde
// estiver o ver=on, isto foi discutido logo atrás, como um
// controle de notícias pelo webmaster
// Por padrão o MySQL colocou off, mas o webmaster terá que
// revisar as notícias e alterar o campo ver para as que quiser validar.

$resultado = mysql_query($sql)
or die (“Não foi possível realizar a consulta ao banco de dados”);

// Agora iremos “pegar” cada campo da notícia
// e organizar no HTML

while ($linha=mysql_fetch_array($resultado)) {

$id = $linha["id"];
$nome = $linha["nome"];
$sobrenome = $linha["sobrenome"];
$cidade = $linha["cidade"];
$estado = $linha["estado"];
$email = $linha["email"];
$data = $linha["data"];
$hora = $linha["hora"];
$titulo = $linha["titulo"];
$subtitulo = $linha["subtitulo"];
$texto = $linha["texto"];
$ver = $linha["ver"];

$novadata = substr($data,8,2) . “/” .substr($data,5,2) . “/” . substr($data,0,4);
$novahora = substr($hora,0,2) . “h” .substr($hora,3,2) . “min”;

echo “<b>Código da Notícia</b>: $id”;
echo “<br>”;
echo “Autor: $nome $sobrenome – ($email)”;
echo “<br>”;
echo “Cidade: $cidade – Estado: $estado”;
echo “<br>”;
echo “Data: $novadata – Horário: $novahora”;
echo “<br>”;
echo “Título da Notícia: $titulo”;
echo “<br>”;
echo “Subtítulo da Notícia: <i> $subtitulo </i>”;
echo “<br>”;
echo “Notícia: $texto”;
echo “<br>”;
echo “Validado pelo Webmaster: “;
if ($ver=on) { echo “Sim”; } else { echo “Não”; }
echo “<hr>”;

}

FIM DO ARQUIVO noticias.php

Viu como é super simples? Neste script criamos uma variável para cada campo da tabela, assim fica mais fácil de manusear os dados de qualquer forma. Nas variávels novadata, novahora, crie uma função para mostrar as variáveis de uma forma melhor. (agradecimentos a RENAS – Amigão!). Você ainda pode personalizar estas notícias, deixando o layout do seu jeito!

OBS: para mostrar todas as notícias em vez de só as últimas 15, apenas crie uma nova variável $sql, como esta: $sql = “SELECT * FROM noticias WHERE ver = ‘on’ ORDER BY id DESC”;

Pronto! Foi só retirar “LIMIT 15″. ;) 4.º Passo – Controle de Notícias para WebmasterNeste passo irei explicar como mostrar todos os dados da tabela, para podermos modificá-los, apagá-los, etc. Primeiramente, devemos criar um arquivo PHP para mostrar todos os dados na tela, para depois podermos manuseá-los. Faça como o exemplo abaixo:

ARQUIVO controle.php

$conexao = mysql_connect(“localhost”,”root”,”root”);
$db = mysql_select_db(“noticias”);
$sql = “SELECT * FROM noticias ORDER BY id DESC”;
$resultado = mysql_query($sql)
or die (“Não foi possível realizar a consulta ao banco de dados”);

echo “<table width=740 border=1 cellpadding=1 cellspacing=1>”;
echo “<tr>”;
echo “<th width=15>ID:</th>”;
echo “<th width=100>Nome:</th>”;
echo “<th width=100>Sobrenome:</th>”;
echo “<th width=100>Cidade:</th>”;
echo “<th width=15>UF:</th>”;
echo “<th width=100>Email:</th>”;
echo “<th width=30>Data:</th>”;
echo “<th width=30>Hora:</th>”;
echo “<th width=100>Título:</th>”;
echo “<th width=50>Disponível?</th>”;
echo “<th width=50>Alterar</th>”;
echo “<th width=50>Excluir</th>”;
echo “</tr>”;

while ($linha=mysql_fetch_array($resultado)) {
$id = $linha["id"];
$nome = $linha["nome"];
$sobrenome = $linha["sobrenome"];
$cidade = $linha["cidade"];
$estado = $linha["estado"];
$email = $linha["email"];
$data = $linha["data"];
$hora = $linha["hora"];
$titulo = $linha["titulo"];
$ver = $linha["ver"];

$novadata = substr($data,8,2) . “/” .substr($data,5,2) . “/” . substr($data,0,4);
$novahora = substr($hora,0,2) . “h” .substr($hora,3,2) . “min”;

echo “<tr>”;
echo “<th width=15>$id<br></th>”;
echo “<th width=100>$nome<br></th>”;
echo “<th width=100>$sobrenome<br></th>”;
echo “<th width=100>$cidade<br></th>”;
echo “<th width=15>$estado<br></th>”;
echo “<th width=100>$email<br></th>”;
echo “<th width=30>$novadata<br></th>”;
echo “<th width=30>$novahora<br></th>”;
echo “<th width=100>$titulo<br></th>”;
echo “<th width=50>$ver<br></th>”;
echo “<th width=50><a href=’alterar.php?id=$id’>Alterar</a><br></th>”;
echo “<th width=50><a href=’excluir.php?id=$id’>Excluir</a><br></th>”;
echo “</tr>”;
echo “<br>”;

}

echo “</table>”;

FIM DO ARQUIVO controle.php

O próximo passo agora é criar os arquivos alterar.php e excluir.php, responsáveis pela alteração e exclusão dos dados. É muito simples o código, veja só:

ARQUIVO excluir.php

$conexao = mysql_connect(“localhost”,”root”,”root”);
$db = mysql_select_db(“noticias”);
$sql = “DELETE FROM noticias WHERE id=’$id’”;
$resultado = mysql_query($sql)
or die (“Não foi possível realizar a exclusão dos dados.”);
echo “<h1>A notícia foi excluída com êxito!</h1>”;

FIM DO ARQUIVO excluir.php

ARQUIVO alterar.php

$conexao = mysql_connect(“localhost”,”root”,”root”);
$db = mysql_select_db(“noticias”);
$sql = “SELECT * FROM noticias WHERE id=’$id’”;
$resultado = mysql_query($sql)
or die (“Não foi possível realizar a consulta ao banco de dados”);

while ($linha=mysql_fetch_array($resultado)) {
$id = $linha["id"];
$nome = $linha["nome"];
$sobrenome = $linha["sobrenome"];
$cidade = $linha["cidade"];
$estado = $linha["estado"];
$email = $linha["email"];
$data = $linha["data"];
$hora = $linha["hora"];
$titulo = $linha["titulo"];
$subtitulo = $linha["subtitulo"];
$texto = $linha["texto"];
$ver = $linha["ver"];

$novadata = substr($data,8,2) . “/” .substr($data,5,2) . “/” . substr($data,0,4);
$novahora = substr($hora,0,2) . “h” .substr($hora,3,2) . “min”;

echo “<h1>Alterar Cadastro…</h1>”;
echo “<hr><br>”;
echo “<form action=’alterar_db.php?id=$id’ method=’post’>”;
echo “Código da Notícia: <input name=’id_novo’ type=’text’ value=’$id’ size=20><br>”;
echo “Data: $novadata<br>”;
echo “Hora: $novahora<br>”;
echo “Nome:<input name=’nome_novo’ type=’text’ value=’$nome’ size=30> *<br>”;
echo “Sobrenome:<input name=’sobrenome_novo’ type=’text’ value=’$sobrenome’ size=30> *<br>”;
echo “Cidade:<input name=’cidade_novo’ type=’text’ value=’$cidade’ size=30> *<br>”;
echo “Estado:<i>(Exemplo: SP, RS, BA)</i><input name=’estado_novo’ type=’text’
value=’$estado’ size=5> *<br>”;
echo “Email: <i>(Exemplo: feitosac@yahoo.com)</i><input name=’email_novo’ type=’text’
value=’$email’ size=30><br><br>”;
echo “Título do Texto:<input name=’titulo_novo’ type=’text’ value=’$titulo’ size=30> *<br>”;
echo “Subtítulo do Texto:<textarea name=’subtitulo_novo’ rows=5 cols=30>$subtitulo</textarea><br>”;
echo “Texto:<textarea name=’texto_novo’ rows=10 cols=30>$texto</textarea> *<br>”;
echo “Disponibilizar? (on ou off): <input name=’ver_novo’ type=’text’ value=’$ver’ size=5><br>”;
echo “<input type=’submit’ value=’Alterar’>”;
echo “</form>”;
echo “<br><hr>”;
}

FIM DO ARQUIVO alterar.php

Agora basta criarmos o arquivo alterar_db.php que irá receber os dados deste arquivo (alterar.php) e alterará seus respectivos dados no MySQL. É muito simples:

ARQUIVO alterar_db.php

$conexao = mysql_connect(“localhost”,”root”,”root”);
$db = mysql_select_db(“noticias”);
$sql = “UPDATE noticias SET id=’$id_novo’,nome=’$nome_novo’
,sobrenome=’$sobrenome_novo’,cidade=’$cidade_novo’,estado=’$estado_novo’
,email=’$email_novo’,titulo=’$titulo_novo’,subtitulo=’$subtitulo_novo’
,texto=’$texto_novo’,ver=’$ver_novo’ WHERE id=’$id’”;
$resultado = mysql_query($sql)
or die (“Não foi possível realizar a consulta ao banco de dados”);
echo “<h1>Notícia alterada com sucesso!</h1>”;

FIM DO ARQUIVO alterar_db.php
 

Ciro Feitosa
feitosac@yahoo.com

Componentes de correio eletrônico

Postado por Plinio Cruz em 12 de março de 2004 na categoria ASP, Programação | Seja o primeiro a comentar

Não tão fácil quanto a função mail( ) do PHP, utilizar um servidor SMTP com o ASP não é tão complicado como se pensa. Basta seguir algumas regrinhas básicas e pronto … lá vai você enviar mensagens através do seu website.

A grande dificuldade para o ASP é que como a linguagem está vinculada a objetos (Response, Request, Server, etc.) o sistema de correio eletrônico funciona do mesmo jeito; você precisa ter um componente de e-mail instalado e registrado para poder utilizar o servidor de SMTP. No caso do Windows versões NT, 2000, XP e 2003, o IIS (Internet Information Server) já vem com o Microsoft CDONTS (Collaborative Data Objects), conjunto de objetos como o CDONTS.NewMail. Para os que usam versões 9X do Windows, podem usar os objetos Mail ASPMAIL ou JMAIL. Neste artigo abordarei a utilização do CDONTS e do JMAIL.

Abaixo estão as configurações para utilizar o NewMail do CDONTS. Leia com atenção.

<%
'Configurações necessárias do objeto CDONTS
Set Mail = Server.CreateObject("CDONTS.NewMail")
 
'Destinatários ... somente endereços eletrônicos. Repare no ponto-e-vírgula ...
Mail.To = "<a href="mailto:carlosroberto@zipmail.com.br">carlosroberto@zipmail.com.br</a>; <a href="mailto:pedropereira@bol.com.br">pedropereira@bol.com.br</a>"
 
'O endereço eletrônico do remetente ...
Mail.From = "<a href="mailto:josedasilva@hotmail.com">josedasilva@hotmail.com</a>"
 
'Cópias e outras providências ...
Mail.CC = "<a href="mailto:pedrosilva@zipmail.com.br;carlospereira@bol.com.br">pedrosilva@zipmail.com.br;carlospereira@bol.com.br</a>"
Mail.BCC = "<a href="mailto:admin@hotmail.com">admin@hotmail.com</a>"
 
Mail.Subject = "Sim ... é bom ter um assunto"
 
corpo="Qualquer coisa que represente o corpo, inclusive &lt;b&gt;HTML&lt;/b&gt;"
Mail.Body = corpo
 
'Prioridade ... use com cuidado ... 0 = baixa, 1 = normal (padrão), 2 = alta(!)
Mail.Importance = 1
 
'Formato do corpo da mensagem ... 0 = com HTML, 1 = modo texto (padrão)
Mail.BodyFormat = 0
 
'Coisas da Microsoft ... 0 = modo texto (padrão), 1 = com HTML
Mail.MailFormat = 1
 
On Error Resume Next
Mail.Send
 
If Err &lt;&gt; 0 Then
  Response.write "Erro ! Problemas com o servidor SMTP"
Else
  Response.write "Mensagem enviada com sucesso !"
End if
 
'Libere o objeto Mail ... o servidor agradece.
Set Mail = Nothing
%>

No código abaixo estão as configurações para enviar mensagens utilizando o JMAIL.

<%
'Configurações necessárias do objeto JMAIL
Set Mail = Server.CreateObject("JMail.SMTPMail")
Mail.ServerAddress = "mail.thewesthorse.com"
Mail.Logging = True
 
'O endereço eletrônico do remetente ...
Mail.Sender = "<a href="mailto:josedasilva@hotmail.com">josedasilva@hotmail.com</a>"
 
'Nome do rementente ...
Mail.SenderName = Request.Form("seuNome")
 
'Destinatários ... somente endereços eletrônicos.
Mail.AddRecipient "<a href="mailto:carlosroberto@zipmail.com.br&quot;,&quot;pedropereira@bol.com.br">carlosroberto@zipmail.com.br","pedropereira@bol.com.br</a>"
Mail.Subject = "Sim ... é bom ter um assunto"
 
corpo="Qualquer coisa que represente o corpo, inclusive &lt;b&gt;HTML&lt;/b&gt;"
 
'Lembre-se ... você precisa definir se vai incorporar HTML na mensagem ...
Mail.ContentType = "text/html"
Mail.Body = corpo
On Error Resume Next
Mail.Execute
 
If Err &lt;&gt; 0 Then
  Response.write "Erro ! Problemas com o servidor SMTP"
Else
  Response.write "Mensagem enviada com sucesso !"
End if
 
'Libere o objeto Mail ... o servidor agradece.
Set Mail = Nothing
%>

Em outra oportunidade estarei falando de reply e envio de anexos. Até.

André Mattos
Designer gráfico, programador e consultor para soluções em Internet
[DHTML, PHP/mySQL, ASP/MS SQL Server e ActionScript]
Fale comigo agora Visite o meu site

Desvendando a programação “Client/Server”

Postado por Plinio Cruz em na categoria Delphi, Programação, Rede | Seja o primeiro a comentar

O que é “Client/server”

 

A filosofia cliente/servidor nasceu do conceito de processamento distribuído, originalmente idealizados pelos desenvolvedores de sistemas operacionais de rede. É aquele tipo de invenção que começa direcionada para aplicações complexas, e um dia acaba vindo parar em nossas mãos, como a suspensão ativa e o telefone celular.

Mas a idéia é muito simples. Você tem que envelopar 1.000 cartas, depois colá-las e pedir a um ajudante que as leve até o correio. Ora, que tal pedir para o ajudante ir colando algumas enquanto você ainda está envelopando outras? Isto é processamento distribuído, ou serviço distribuído. E é sobre este tão simples conceito que repousa a filosofia da programação cliente/servidor.

Desta forma, a máquina cliente (a máquina do usuário final) não fica encarregada de todo o processamento. Ela funciona como front-end, sendo utilizada basicamente para entrada e visualização de dados. O processamento mais pesado é feito no servidor.

O servidor recebe pedidos, ou requisições, do cliente e as processa, enviando imediatamente uma resposta. Para quem leu o primeiro artigo da série “O Delphi e a Internet” (publicado neste site) verá que os conceitos apresentados naquele artigos são similares aos agora mencionados.

Mas como tudo isto acontece na prática? É necessário haver uma aplicação servidora, instalada em uma máquina, e uma aplicação cliente, instalada em outras máquinas. As aplicações cliente fazem pedidos à aplicação servidora, que as atende. Isto já deixa claro que o equipamento onde será instalada a aplicação servidora deve ser provido de maiores quantidades de recursos, tais como memória, disco e velocidade de processamento.

No mundo comercial de hoje, o principal objetivo das organizações é processar dados, e disparar processamentos a estes relacionados. Assim, a aplicação servidora é na verdade um servidor de banco de dados. Nele são concentrados todos os dados da empresa, e podem ser concentrados ainda os processamentos ligados a estes dados, sobre o que falaremos a frente.

O cliente é qualquer sistema que acesse o servidor, e que em nosso caso será uma aplicação Delphi. Como servidor (a título de exemplo) usaremos o Microsoft SQL Server 6.5, por ser muito fácil de usar, bastante robusto e relativamente barato.

 

Quais são suas vantagens

 

Mas talvez esteja agora perguntando: para que serve toda esta tecnologia, toda esta mudança nos métodos de programação? Qual será a real vantagem de se usar estas técnicas, se é que realmente existem alguma?

Existem várias vantagens. Uma delas é a escalabilidade que a filosofia Client/Server oferece. Imagine que trabalhe com uma rede de 50 máquinas ligadas a apenas 1 servidor. Com o passar do tempo, cada vez mais sistemas são adicionados a esta rede, que vai ficando cada vez mais lenta. O processamento não é distribuído, ou seja, é feito sempre na parte cliente, e o servidor serve apenas para centralizar os dados. O que seria necessário para melhorar a performance da rede? Como o processamento é feito basicamente no lado cliente, precisaríamos acrescentar recursos aos 50 computadores clientes, talvez memória. Se decidíssemos adicionar 16 MB Ram em cada máquina, e se cada pente de 16 custasse R$ 35,00, teríamos um custo total de R$ 1.750,00. E este custo aumentaria muito se tivéssemos mais clientes na rede.

Agora vamos mudar de cenário. Nesta rede rodam aplicações que adotaram a filosofia Client/Server. Deste modo, a maior parte do processamento é feito no servidor, digamos em nosso Sql Server. Assim, para melhorar a performance de toda a rede, seria necessário acrescentar recursos basicamente no equipamento servidor, que responderia mais rapidamente aos clientes, desafogando assim toda a rede. Digamos então que a decisão é adicionar 128 MB Ram ao equipamento servidor (o que representa uma significativa melhora). Chegaríamos a um custo de R$ 280,00, assumindo que compraríamos 8 pentes de 16 MB Ram. Este custo ainda poderia diminuir um pouco, levando-se em consideração que 2 pentes de 64 MB custariam um pouco menos do que 8 pentes de 16 MB.

A escalabilidade que a filosofia Client/Server oferece é uma de suas grandes vantagens.

 

Velocidade

 

Os programas que operam com técnicas Client/Server trafegam uma quantidade muito menor de dados pela rede. Isto se dá porque o cliente faz um pedido ao servidor, e o pedido é todo processado por ele (o servidor), retornando apenas uma pequena quantidade de dados para o cliente como resposta. Assim, as únicas transações em rede são o pedido do cliente e a resposta do servidor.

Isto deixa a rede muito mais leve, com menos tráfegos de dados. O resultado final, é um ganho na velocidade de todas as aplicações na rede. É claro que isto significa para nós programadores uma mudança na forma de programar, e até de analisar nossos sistemas. Em breve falaremos mais diretamente sobre este assunto.

 

Segurança

 

A segurança é talvez a mais notável vantagem da filosofia Client/Server. Os servidores de banco de dados são muito robustos e preparados para fornecer a maior segurança possível. Os métodos de armazenamento e de cache já são em si mesmos uma grande fonte de segurança, e contam com os algoritmos mais complexos que se possa imaginar para garantir isso.

Os sistemas de Backup, manuais e automáticos, disponibilizam à organização um grau ainda maior de segurança, oferecendo também uma grande flexibilidade para recuperar dados em pouco tempo.

Quanto a nós, programadores, passamos a contar com um eficiente sistema de transações, que garantem aos nossos sistemas que processamentos não serão interrompidos no meio. Um exemplo disto é uma baixa de Nota Fiscal. Digamos que ao dar a baixa da Nota, o sistema lance duplicatas a receber, e lance também a saída no estoque. Se houver uma interrupção de energia, ou qualquer outro problema durante o processamento, pode acontecer que este seja interrompido no meio, deixando a Nota baixada, as duplicatas geradas e sem os lançamentos de saída no estoque. Este tipo de problema pode ser facilmente evitado usando-se as técnicas de transações oferecidas pelos sistemas gerenciadores de banco de dados, como o Sql Server.

 

Mudanças de conceito

 

Mas algumas mudanças conceituais devem ser feitas. Os velhos e bons grids que exibiam todos os registros de uma tabela, e que permitiam ao usuário “passear” por estes registros, deixa de existir na programação Client/Server. O problema é que agora precisamos trafegar a menor quantidade de dados possível na rede, o que significa que não podemos abrir tabelas inteiras, ou usar comandos SQL do tipo “select * from tabelatal”. As tabelas estão centralizadas no servidor, e se abrimos uma tabela, todos os seus registros trafegam pela rede até chegar ao equipamento cliente. Só então são aplicados filtros ou processamentos a estes dados.

O que queremos é aplicar os filtros e processamentos na fonte dos dados, ou seja, no servidor. É por isso que passaremos a programar usando basicamente componentes TQuery, em nossos comandos SQL usaremos sempre a cláusula WHERE.

 

Onde ficam as regras de negócios?

 

“Regras de negócios” é apenas um nome bonito para “rotinas de processamento”. Assim, a pergunta é: onde ficam nossas rotinas de processamento? Sim, agora aquelas rotinas pesadas, tipo fechamento de mês, recalculo de saldos e outras mais, podem ficar tanto no servidor quanto no cliente.

Quando as regras de negócio ficam no cliente, isto significa que as rotinas de processamento ficam em nosso programa Delphi, acessando os dados no servidor. A vantagem deste método é que o sistema inteiro pode ser migrado para um banco de dados diferente, sem grandes traumas. A desvantagem é que o processamento destas rotinas ficam um pouco mais lentos, e dependem da máquina cliente – se for uma máquina rápida, o processamento vai ser rápido, se for uma máquina lenta, o processamento vai ser lento.

Quando as regras de negócio ficam no servidor, isto significa que as rotinas de processamento ficam no próprio servidor, acessando os dados ali mesmo. Neste caso, as rotinas de processamento devem ser escritas na linguagem que o servidor entenda, e armazenadas em unidades conhecidas como Store Procedures. A grande vantagem é a velocidade de processamento, que é muito maior. E a principal desvantagem é que em caso de uma eventual migração para outro banco de dados, seria necessário migrar todas as Store Procedures para o outro banco de dados, o que pode envolver muito trabalho, uma vez que as linguagens possuem muitas diferenças.

Este artigo é o primeiro de uma série, que vai ajudá-lo a efetivamente programar dentro do conceito Client/Server. Falaremos sobre os componente apropriados a este conceito, e a melhor forma de usá-los.

Publicação do Administrador do site Active Delphi

PHP e Imagens (Gerando thumbnails – miniaturas)

Postado por Plinio Cruz em na categoria PHP, Programação, Soluções | Seja o primeiro a comentar

Um belo dia você acorda, toma um café preto e uma aspirina e decide colocar as fotos da festa de ontem na internet. Aquela, que fez você ter de tomar uma aspirina e o café preto.

Você tem na sua frente um bom editor de textos, um Apache com PHP, um browser e 60 fotos para botar no ar. Melhor fazer de uma vez, antes que a vontade passe.

Possibilidades

Para ser rápido, você pensa em botar as fotos uma em cima da outra, separadas por um <br />, e era isso. Mas aí você tem de aturar os amigos reclamando que a página demora um século para abrir e tem muita rolagem.

Também pode fazer o resize direto no HTML, forçando o IMG tag para 160x120px, e as suas fotos demorariam igual para carregar e ficariam com uma aparência pior que a sua neste momento.

A última maluquice seria fazer thumbnails (miniaturas) das fotos num editor gráfico, e criar um link para a foto em tamanho natural. Genial! Mas fazer thumbnails de 60 imagens??? E quando os outros mandarem as fotos deles para serem incluídas, você vai fazer tudo de novo? Larry Wall já disse que o bom programador é meio preguiçoso. Faça bem feito para não ter de fazer de novo.

A Solução

Aí então, você lembra de, um dia, ter lido em algum lugar que o PHP trabalha com imagens. Bem lembrado. Neste artigo você vai aprender a criar thumbnails em realtime com o PHP e a biblioteca GD.

Para isso tenha certeza de que o seu PHP foi compilado com suporte a GD 2.0.1 (no win32 é padrão. No *nix, –with-gd[=DIR]) e que ele está sendo carregado no PHP.INI. Se você está hospedando o seu site numa empresa de host, peça gentilmente para o admin habilitar o GD2 no PHP.INI. Não compromete em nada a performance do server e dá uma possibilidade a mais para os clientes.

O script vai receber a imagem da qual o thumbnail deve ser gerado pela querystring, com o endereço completo da imagem no servidor. Uma IMG tag vai ficar mais ou menos assim:

<img src=”thumb.php?dir/imagem.jpg”>

Explicações dadas, vamos ao que interessa: show me the code…

Clique aqui e veja o código fonte comentado

Mauricio Wolff

Postado por Plinio Cruz em na categoria Colaboradores | Seja o primeiro a comentar

Mauricio Wolff é o fundador, criador, programador e fazedor de cafézinho da organiKa. Gosta de PHP, XML, CSS, Sânscrito, Vedanta, Cinema, Artes, Kung-Fu, Física e História. Sim, ele gosta de bastante coisa… é casado e tem uma filha. Clique aqui e fale com o autor.

Switch to our mobile site