HTML – Melhores técnicas de programação

5

Posted by John-Henrique | Posted in Básico, Desenvolvimento, Utilidades | Posted on 01-10-2007

Na linguagem HTML temos diversas tags que podem nos ajudar a melhorar diversos itens de nossos sites e sistemas web, desde segurança até mesmo acessibilidade e desempenho.

Neste irei mostrar algumas tags que facilitam o trabalho do desenvolvedor e também facilitam a vida de usuário.

Auto completar campos

Você já deve ter notado que em diversos sites onde o usuário precisa logar-se digitando seu email ou nome de usuário, por diversas vezes aparece o login ou email de outros usuários que já utilizaram o mesmo computador anteriormente, pois bem, a maioria dos navegadores permitem que seja desativado este recurso, para computadores públicos este recurso deveria estar desabilitado, mas, nem sempre isso acontece. O problema é que alguém mal intencionado pode utilizar o seu endereço de email ou usuário para alguma ação sem sua autorização, ou mesmo, para enviar spam. O que quase ninguém sabe é que o HTML permite que nós desabilitemos este recurso com um parâmetro bem simples de lembrar.

<input name=”login” autocomplete=”off” type=”text” />

Produz:

Para testar, digite algum texto e envie clique no botão testar, ao recarregar a página tente digitar o mesmo texto e verá que o campo não tenta autocompletar o texto.

O parâmetro AUTOCOMPLETE aceita dois tipos de valores ON e OFF (maiúsculo ou minúsculo, tanto faz) o padrão é ON, por este motivo qualquer campo sem autocomplete OFF exibe as últimas palavras digitadas nos campos.Observação: Apesar de tudo este parâmetro não é seguro devido ao fato de alguns navegadores não aceitarem ou não suportarem sua funcionalidade. De qualquer forma sempre que puder use-o.

Impedir alterações nos valores de um campo de texto

Em alguns projetos precisamos exibir determinadas informações em campos, mas, não podemos permitir que o usuário possa edita-las, normalmente isso ocorre em formulários onde exista um valor padrão. Em HTML é possível fazer isso utilizando o parâmetro READONLY, este parâmetro deixa o campo com o estado somente leitura, de forma que o usuário poderá apenas ler e selecionar o valor do campo. Este parâmetro não possui um valor, para usa-lo apenas é necessário informa-lo na tag do input.

<input name=”login” type=”text” readonly=”readonly” value=”Tente digitar algo” />

Produz:

Observação: READONLY não funciona em campos do tipo SELECT ou SELECT BOX.

Desabilitar campos de textos

Em alguns casos é preciso exibir alguma informação em um campo, mas, sem permitir que o usuário realize alguma seleção do valor do campo, melhor ainda, impedindo que o usuário realize alguma ação com o campo. Em HTML podemos fazer isso utilizando o parametro DISABLED, este parametro também não possui valor.

<input name=”login” type=”text” disabled=”disabled” value=”Tente copiar ou digitar algo” width=”50″ />

Produz:

Botões de formulários personalizados com imagens

Muitas vezes precisamos estilizar nossos elementos HTML e algumas vezes deixamos de fazer determinada estilização devido ao fato de alguns itens não serem compativeis com o nosso objetivo, isso acontece sempre com botões de formulário os SUBMITs e os BUTTONs, no HTML podemos personalizar estes elementos utilizando imagens, podendo assim, criar botões em formas diferentes como triangulos, circulos entre outros que desejar. Esta estilização pode ser feita usando o atributo SRC.

<input src=”wp-content/themes/dapit_hapon/images/dapithapon_subhead.gif” type=”button” />
<input src=”wp-content/themes/dapit_hapon/images/dapithapon_subhead.gif” type=”submit” />

Produz:

Atualmente o w3c adotou o imagefield como padrão, sendo assim, alguns navegadores mais recentes não interpretam os exemplos acima, em todo caso utilize este exemplo.
<input type=”image” name=”imageField” id=”imageField” src=”wp-content/themes/dapit_hapon/images/dapithapon_subhead.gif” />
Produz:

Selecionar mais de um item em um SELECT

Em alguns casos é preciso selecionar mais de uma opção dentro de um select ou menu de lista, enfim, SELECT. Podemos definir que um SELECT permita selecionar mais de uma opção utilizando o atributo MULTIPLE da seguinte forma.
Para selecionar mais de um item o usuário precisa manter a tecla CONTROL ou SHIFT precionada enquanto seleciona as opções.

<select name=”frutas[]” size=”3″ multiple=”multiple”>
<option value=”maçã”>maçã</option> <option value=”banana”>banana</option> <option value=”uva”>uva</option>
<option value=”pera”>pera</option>
<option value=”melancia”>melancia</option>
<option value=”morango”>morango</option>
</select>

Produz:

Ao selecionar mais de um item eles ficaram disponíveis em um array, neste caso seria assim: frutas[0] com o valor do primeiro item selecionado e frutas[1] com o valor do segundo item selecionado.

Destacar itens de um select

Para melhor organizar um select podemos separar as opções em grupos utilizando o atributo OPTGROUP. Também pode-se utilizar o atributo MULTIPLE como citado anteriormente.

<select name=”comidas”>
<optgroup label=”Frutas”></optgroup>
<option value=”maçã”>maçã</option>
<option value=”banana”>banana</option>
<option value=”uva”>uva</option>
<optgroup label=”Bebidas”></optgroup>
<option value=”água”>água</option>
<option value=”refrigerante”>refrigerante</option>
<option value=”suco”>suco</option>
<option value=”outros”>Outros</option>
</select>

Com multiple produz:

Sem multiple produz:

Conclusão, vimos que existem elementos HTML úteis e que ainda possuem atributos e parametros que os tornam ainda mais úteis, mas, o fato deles permitirem uma melhor apresentação somente com HTML não quer dizer que você não possa melhora-los com algumas pitadas de CSS e Java Script e um pouco de criatividade.

A importância de realizar um backup sempre

10

Posted by John-Henrique | Posted in Bronca, Básico, Desenvolvimento, Macetes, Problemas, Segurança | Posted on 22-08-2007

Desde que conheci o procedimento de realizar cópias de [bp]segurança[/bp] chamada backup, realizo freqüentemente uma cópia dos dados importantes em minha máquina. Todas as sextas-feiras, até pra aproveitar que é sexta e enrrolar o trampo :D .

Tenho feito isso a mais de 5 anos, porém na última segunda feira, ao realizar o backup, pensei “ah, vou fazer o backup na unidade D e depois peço pro técnico da empresa formatar a máquina pra mim, assim eu fico livre…”, que pensamento idiota, me arrependerei amargamente para o resto de minha vida.

Nos últimos nove meses tenho desenvolvido um sistema acadêmico para uma rede de universidades particulares do estado de Mato Grosso, inclusive o sistema encontra-se em uso, mas, devido ao meu inocente pensamento, os nove meses de trabalho foram pelo ralo…

Tudo por que eu pedi para o técnico da universidade formatar a máquina pra mim, eu sempre fazia isso, aliás, eu sempre fazia o [bp]backup[/bp] dos projetos importantes no Gmail, gravava em CD e ainda salva-va tudo na unidade D, nunca tive problema algum, porém na segunda feira passada, nunca me esquecerei da data 20/08/2007, deixei bem claro para o técnico.

“Formate apenas a unidade C, não mexa na unidade D, ela possui muitos arquivos importantes.”

Ele ficou a manhã toda mechendo na máquina quando voltei no periodo da tarde, lá pelas duas da tarde, ele ainda estava mexendo na máquina, achei extranho e questionei o por que dele não ter terminado. Para minha tristeza o cara tinha feito o serviço perfeito.

E ainda sorridente disse, olha só, a máquina está leve, rápida e você nunca viu ela trabalhar tão bem assim, realmente o sistema operacional estava trabalhando como deveria, abria os menus rápidamente e listava os diretórios de rede e arquivos tão rápido que eu pensei que era outra máquina não a minha.

Ao sentar-me na cadeira a primeira coisa que veio a minha cabeça foi, “Vou instalar os programas que estão salvos na unidade D e trabalhar…”, tomei um susto quando vi que a unidade D possuia apenas uma pasta com o nome Windows, fiquei puto da vida, o cara formatou meu computador todo.

Alterei as configurações pra exibir arquivos ocultos, executei o recovery (programa para recuperar dados perdidos) e nada os meus dados foram todos perdidos.

O cara formatou tudo unidade C, D acho que ele só não formatou a unidade A, por que eu não possuo uma. Cara nove meses de desenvolvimento perdidos somente por que eu quis ficar livre na segunda-feira, devia ser praga do meu chefe.

Nenhum dos programas de recuperação de dados conseguiu recuperar algum arquivo importante, realizei o scanner 5 vezes e recuperei mais de 80 Gb de dados, somente arquivos do sistema, músicas, vídeos, fotos e nada dos arquivos dos sites, softwares e sistemas já desenvolvidos.

Aprendi uma coisa com tudo isso, sempre devo realizar o backup, sempre devo formatar minha própria máquina, sempre devo configurar minha máquina. Sempre eu, sempre sempre.

Cartão virtual, mais um vírus

0

Posted by John-Henrique | Posted in Básico, Pragas virtuais, Problemas | Posted on 25-06-2007

Estava verificando minha caixa de emails e me deparei com mais uma mensagem de spam com link apontando para um vírus. Veja o trecho do conteúdo do email.

Olá. johnhenrique@servidor.com
(*)(L)(*) Géssica Fernanda(*)(L)(*), enviou um Cartão virtual para você !!!
para visualizar
clique no Link Abaixo

http://h1.ripway.com/SempreUmaNovaEmocao/?name=johnhenrique@servidor.com&Rname=gessicarebel@hotmail.com

Esse Cartão e Válido por 15 dias

O que mais me chamou a atenção neste email foi o título do email, ele vem personalizado com meu email (do receptor) e no texto sempre tem um email de alguém que por acaso não existe em minha lista de contatos.

Outra coisa que me chamou a atenção foi o fato de o email do suposto remetente (pessoa que envia) ser bem parecido com o nome de pessoas que eu tenho em minha lista, na minha lista existem duas Géssicas, uma com sobrenome iniciando em “Rei”.

Ambas não me enviaram nada. Por via das dúvidas entrei em contato com o servidor afim de avisa-los.

Trabalhando com funções

0

Posted by John-Henrique | Posted in Básico, Desenvolvimento | Posted on 18-04-2007

Durante o desenvolvimento de um projeto necessitamos realizar a mesma operação várias vezes e com isso acabamos reescrevendo códigos e mais códigos. Para resolver este problema podemos usar funções definidas pelo usuário.

Um ótimo exemplo para ilustrar onde seria ideal usar uma função definida pelo usuário seria em uma lista onde o título das notícias são listadas, mas, não podem ocupar duas linhas e nem ultrapassar a margem do layout, algo como:

18/04/2007 – Todos os sites de notícia estão publicando algo relacionado ao papa bento XVI
19/04/2007 – Esta notícia não ultrapassa o tamanho máximo

Note que a primeira notícia ocupou duas linhas deixando o layout um pouco “desajeitado”, podemos corrigir isso tanto no título da notícia quanto em outros locais onde julgarmos necessário utilizando uma função similar a esta.

<?PHP
function cortaString($strVar, $intMax){
echo Substr($strVar, 0, $intMax);
}

?>

$titulo = “Todos os sites de notícia estão publicando algo relacionado ao papa bento XVI”;
cortaString($titulo, 30);

Que isso?
Esta função precisa de dois parâmetros, o primeiro $strVar deve ser uma string de qualquer tamanho, o segundo, $intMax que deve ser um número inteiro.

O que isso faz?
Esta função “corta” parte da string informada em $strVar quando ela alcançar o valor máximo de caracteres permitido que for informado por $intMax, ou seja, quando a string tiver mais de trinta caracteres o excedente não será apresentado.

Outras formas

Você pode também precisar definir um valor padrão para a sua função, isso permite que você possa utilizá-la com outros valores que não foram estipulados por você quando a criou.
Vamos supor que você precisa cortar parte de um texto title existente em um link.

<a href="http://www.vibemidia.com/blog/todos_os_sites_de_notícia_estao_publicando_algo_relacionado_ao_papa_bento_XVI" title="Todos os sites de notícia estão publicando algo relacionado ao papa bento XVI">Primeira notícia do dia 18/04/2007</a>

Note que neste caso tanto o link como o atributo title são muito grandes, o atributo title por sua vez não poderá ser visto por completo, sendo assim, estaremos enviando código inútil para o navegador do usuário, podemos então remover parte do valor deste atributo com a nossa função.
Vamos fazer um tuning na função

<?PHP
function cortaString($strVar, $intMax = 30){

echo Substr($strVar, 0, $intMax);
}
?>

Adicionei agora um valor padrão para nossa função, este valor será usado somente se na chamada da função não for informado o valor, sendo assim, qualquer valor informado será utilizado e o valor padrão é ignorado.
<a href=”http://www.vibemidia.com/blog/todos_os_sites_de_notícia_estao_publicando_algo_relacionado_ao_papa_bento_XVI” title=”<?PHP echo cortaString($titulo, 20); ?>”>Primeira notícia do dia 18/04/2007</a>

Caso precisar utilizar a mesma função para apresentar no máximo 30 caracteres (nosso valor padrão) poderíamos usar assim.

<a href="http://www.vibemidia.com/blog/todos_os_sites_de_notícia_estao_publicando_algo_relacionado_ao_papa_bento_XVI" title="<?PHP echo cortaString($titulo); ?>">Primeira notícia do dia 18/04/2007</a>

Note que não informei o segundo parâmetro da função, isso por que quero que sejam apresentados apenas os trinta primeiros caracteres da string $titulo.
É muito importante observar que os valores padrão somente iram funcionar de forma esperada se forem os últimos parâmetros declarados na função.

Também é possível utilizar a função apenas para retornar valores sem que este valor seja exibido no navegador, esta é a forma mais utilizada já que possibilita trabalhar os valores antes de exibi-los.

<?PHP
function cortaString($strVar, $intMax = 30){

return Substr($strVar, 0, $intMax);
}
?>

A mudança na função foi realizada apenas na troca de echo por return.

O que faz esse tal de return?
R.: Ele retorna o valor informado em seu argumento e para a execução.

Qual a vantagem de usar return ou echo?
R.: Quando usamos echo ficamos presos a usar a função apenas quando não precisamos trabalhar o valor retornado pela função. Com o return podemos utilizar o valor retornado e trabalhar com ele em outra função, classe ou mesmo adicionar tags HTML para somente depois exibir o valor no navegador.

Agora quando formos exibir o resultado de nossa função precisamos usar o echo algo assim…
<?PHP
echo cortaString($strVar, 30);
?>

Como traduzir seu site de graça

32

Posted by John-Henrique | Posted in Básico, Ferramentas, Livre, Web | Posted on 15-04-2007

Muita gente gostaria de fornecer o conteúdo de seus sites ou blogs em outras línguas, mas, por pouco conhecimentos em língua estrangeira acabam desistindo, pensando nisso encontrei uma alternativa para realizar a tradução de todo o site gratuitamente em sem esforço algum.

Como todos sabem o google oferece diversos serviços online e gratuitos, com estes serviços podemos realizar diversas tarefas de forma mais simples e é isso que vou divulgar aqui. Deixando de conversa vamos logo pro finalmente, lápis, papel e tesoura sem ponta em mãos…

Realizando a tradução de páginas

Há mais de três anos o google oferece o serviço Google Translator, como o próprio nome já diz é um serviço de tradutor online, com ele você pode traduzir textos inteiros em diversas línguas como Japonês, Alemão, Russo e Chinês.

Vou mostrar aqui como utiliza-lo para traduzir seu site inteiro, sem precisar se preocupar com as atualizações de seu site, quando você atualizar o site os novos textos também vão ser traduzidos.

Para realizar a tradução automaticamente você precisa ter acesso ao código fonte do seu site. Em meu exemplo irei criar apenas uma tag A para criar um botão para realizar a tradução.

  1. Acesse o site do Google Translator
  2. Você verá duas caixas de texto na parte inferior, na caixa da esquerda informe o domínio do seu site incluindo http e no outro você escolhe para qual língua traduzir, selecione “Portuguese to English”.
  3. Clique no botão “Translate”, o domínio informado será traduzido.
  4. Copie a URL que aparece agora no navegador, é ela que nos interessa.
  5. Agora com esta URL vamos criar um link que será na realidade um botão “English version”.
  6. Seu link deve ficar mais ou menos assim:
  7. <a href= “http://google.com/translate?u=SEU_SITE.COM.BR&langpair=pt%7Cen&hl=en&ie=UTF8”%3e English" >English version</a>

  8. Agora precisamos fazer a mudança do URL automaticamente, para isso vamos utilizar a GLOBAL $_SERVER[] para pegar o domínio do seu site. Então seu link ficaria assim
  9. <a href=”http://google.com/translate?u=<?PHP echo $_SERVER[“SERVER_NAME”]; ?>&langpair=pt%7Cen&hl=en&ie=UTF8” >English version</a>

  10. Com isso dá para traduzir apenas a página principal do site, mas, precisamos traduzir tudo então vamos adicionar outra GLOBAL, ficando assim nosso link
  11. <a href=”http://google.com/translate?u=<?PHP echo $_SERVER[“SERVER_NAME”] . $_SERVER[“REQUEST_URI”]; ?>&langpair=pt%7Cen&hl=en&ie=UTF8” >English version</a>

  12. Agora temos um link automático que pega todo o url em que o usuário estiver incluindo também QUERY STRING se houver, sendo assim, precisamos agora adicionar este link em nosso site e testar.

Observações:
Em alguns servidores a GLOBAL $_SERVER[] com parâmetro SERVER_NAME retornara o nome do domínio sem barras o que irá resultar em um erro 404.

Finalizamos aqui este tutorial que tenho a certeza de que irá beneficiar muitos blogueiros e webmasters.

Aguardo comentários, duvidas e sugestões.

Apenas ter um blog não basta é preciso investir

4

Posted by John-Henrique | Posted in Anúncios, Básico, Livre, Retorno financeiro, Web | Posted on 30-03-2007

Assim como você me aventurei na idéia de criar um blog onde eu pudesse expor algumas idéias e soluções que pudessem de alguma forma ajudar outros internautas e webmasters a melhorar seu dia-a-dia e etc. Ter um blog não é tão simples assim, é caro!

Talvez você tenha estranhado minha afirmação, mas, pretendo mudar esta primeira impressão que causei a você, primeiramente gostaria de dizer que no mundo de hoje as pessoas dão muito valor ao dinheiro, mas, elas as vezes nem se dão conta de que o dinheiro é algo singelo se comparado ao valor maior existente em nosso meio.

Não, concertesa com certeza o maior valor não é ouro nem diamante. Nos dias de hoje o maior valor é o tempo, sim, o tempo, pois sem ele não é possível realizar diversas ações.

O tempo e os blogs

Quando você iniciou sua idéia de blog imaginou que seria simples como criar uma conta e depois publicar algum artigo, e já estaria recebendo centenas e por que não dizer milhares de visitantes diários. Se você não pensou que seria assim sorte a sua, existem diversos blogueiros que pensam assim, outros ainda pensam que depois de criar o blog já estaram ganhando muito dinheiro com anúncios no estilo AdSense e por falar nisso eu havia lido o artigo do Bruno Torres no brunotorres.net, onde ele fala sobre retorno financeiro em blogs, eu recomendo a leitura.

Os blogueiros iniciantes pensam que é uma forma de lucrar sem muito esforço, na realidade para lucrar em qualquer área seja na internet ou não, é necessário algum tipo de investimento, neste caso o investimento principal é tempo e antes que alguém diga:

    -Quando alguém ganha o Big Brother que investimento ela fez?

Bom, evidentemente ela teve que gravar um vídeo para enviar ao programa :D acima disso tudo a pessoa investiu seu tempo para gravar o vídeo.

Para se ter um blog que gere renda é necessário que você invista nele quando eu digo “invista” não estou falando de fazer propaganda na tv ou no rádio, estou falando de dedicar-se ao blog, sempre que puder publique um artigo sem pressa e que faça o leitor se interessar em ler seu artigo até o fim, bom, pra faze-lo ler até o fim você pode simplesmente escrever duas linhas :D .

Qualidade é tudo

Quantas vezes você se deparou com algum blog que possuía um artigo idêntico a um outro artigo que você viu não sei onde? concertesa com certeza o responsável pelo blog que copiou imaginava que ninguém iria notar…

    -Claro a internet é imensa nunca isso iria acontecer.

Esse é o pensamento de quem não conhece ou não sabe a fundo o que é internet. Blogueiros que pensam assim não vão ter muito sucesso em seus blogs, pois o que vai fazer seu leitor continuar a ler mais ou retornar ao seu blog mais tarde é justamente a credibilidade coisa que no exemplo citado não existe (o blogueiro copiou um artigo de outra pessoa).

Existe alguma dica pra criar um bom artigo ou um bom blog?

Sim, existe.
São muito simples.

  1. Invista no seu blog
    Dedique um tempo para seu blog, ele é seu amigo, e vai mostrar aos leitores como você é realmente.
  2. Organize-se
    Reserve uma ou duas horas por dia para criar algum artigo.
  3. Tenha calma
    Não vá digitando e digitando, pense em algo que torne seu artigo interessante.
  4. Revise o que já foi escrito
    Independente de seu blog ser pessoal seria interessante você evitar ao máximo erros de ortografia e gramática, você pode revisar seu texto em algum programa editor de texto como o Microsoft Word ou o OpenOffice.org Writer, fazendo isso tenha a certeza que seu leitor entenderá perfeitamente o que você quis dizer.
  5. Crie
    Quando for publicar ao invés de procurar algo que já foi ou é bastante discutido tente criar uma versão que exponha outro ponto de vista sobre o assunto, isso dará a você e seu blog uma grande vantagem única.
  6. Seja simples
    Evite usar palavras cultas, algumas vezes o leitor não lê todo o artigo pois algumas palavras desconhecidas por ele deixa todo o resto do texto sem sentido.
  7. Escolha seu assunto
    Realmente o assunto ou tema do artigo faz diferença quando se trata de aumentar o numero de visitantes, quando você trata de um assunto especifico o leitor percebe que ele pode encontrar outras informações sobre o mesmo tema quando ele retornar ao seu blog, ou seja, confiança.
  8. Faça feedback do feedback
    Algo que deve ser extremamente levado a sério é o feedback do feedback, ou seja, o retorno do retorno (estranho concorda?), esse negócio estranho ocorre quando o leitor comenta um artigo ou envia a você uma mensagem, e você dá a esta mensagem total importância respondendo a mensagem deste leitor, agradecendo ou explicando algum mal entendido. Fazendo isso você passa a idéia de que este leitor é único e que pra você ele é importante, sendo bem tratado ele com serteza retornará ao seu blog, sendo assim, não deixe ele esperando.
  9. Lembre-se é para o leitor
    Não sei por que mais alguns sites e blogs apresentam uma forma estranha no tratamento dos visitantes e leitores, isso é totalmente errado, afinal o seu blog foi feito para o visitante não pra você, concorda? sendo assim, seria legal entender o que seus leitores querem, se você recebe muitos comentários em determinado assunto, aposte nele, publique mais coisas sobre este assunto. Encontrei por acidente o blog do Carlos Brando onde ele publicou um artigo muito interessante sobre este item veja seu blog NÃO TE PERTENCE
  10. A verdade é a realidade
    Evite publicar artigo sobre assuntos duvidosos que você leu por ai e que não tem certeza da veracidade das informações, prefira ser o último a publicar, mas, publique a verdade, lembre se do item cinco, ser único é melhor.

Talvez você tenha pensado:

    -Ele não falou sobre como lucrar com o blog…

Com essas informações você pode melhorar ainda mais o seu blog e com o tempo ele será um sucesso e com o sucesso também virão os lucros.

Solução para envio de emails em grande quantidade

37

Posted by John-Henrique | Posted in Básico, Livre, Problemas, Segurança, Web | Posted on 29-03-2007

Tenho visto que muitos webmasters tem tido dificuldades para enviar algum informativo (newsletter) devido ao limite de envio de emails imposto por alguns hosts, normalmente o limite fica entre 100 e 400 emails por hora.

Este problema acaba gerando um grande desconforto, pois, imagine você que nosso site possua 1000 assinantes se você tivesse que enviar tudo isso manualmente (existe essa possibilidade?) iria demorar várias horas se não dias.

Os hosts que possuem este limite fazem isso justamente para evitar envio de emails em massa comumente conhecido como SPAM, que nada mais é do que envio de email não solicitado. Apesar do limite imposto alguns usuários talvez até sem saber acabam enviando emails acima do limite, então os emails que ultrapassam o limite são barrados, algumas empresas devolvem o email ao remetente outras apenas cancelam o envio e notificam o remetente. Algumas vezes os administradores do host chegam a decisões extremas como cancelamento da conta de hospedagem quando o envio é continuo.

Pois bem, pensando numa solução para o problema criei um pequeno e simples script em PHP/MySQL que se encarrega de enviar os emails dentro do limite imposto pelo host (ou servidor).

Antes de tudo gostaria de destacar que este material foi criado com intuito de resolver o problema, sendo assim estou me baseando na idéia de que você tenha no mínimo conhecimentos básicos em PHP e MySQL.

Primeiramente crie esta tabela em seu banco MySQL para que você possa utilizar o script.
CREATE TABLE newsletter (
id INT(4) NOT NULL AUTO_INCREMENT,
nome VARCHAR(60) NOT NULL,
email VARCHAR(120) NOT NULL,
codStatus INT(1) NOT NULL DEFAULT 0,
PRIMARY KEY(id)
);

Esta tabela possui quatro campos (id, nome, email e codStatus) estes campos são responsáveis pelo armazenamento e organização dos dados contidos na tabela, a organização consiste em:

  1. ID
    Este campo serve apenas para identificar cada registro como único.
  2. NOME
    Este campo é responsável por armazenar o nome de nosso assinante.
  3. EMAIL
    Este campo é responsável por armazenar o endereço eletrônico (email) de nosso assinante.
  4. CODSTATUS
    Este campo possui papel importante no envio, através dele é que o script identificará pra quem já foi enviado a newsletter. Isso é possível devido ao tipo de campo inteiro tamanho 1, sendo que o valor 0 representa emails que ainda não foram enviados e 1 representa a emails que já foram enviados.

Bom, eu criei a estrutura da tabela, mas, não irei disponibilizar os registros para que a tabela seja populada, sendo assim, você terá que criar ai seus próprios registros.

Tendo nossa tabela criada vamos então (finalmente) ver o tal script.

// DADOS DE ACESSO AO BANCO MYSQL
$host = "HOST";
$banco = "BANCO";
$usuario = "USUARIO";
$senha = "SENHA";

Adicionamos aqui os dados necessários para a conexão com nosso servidor MySQL não há nada extraordinário aqui, se você não sabe quais são estes dados entre em contato com seu servidor de hospedagem para solicita-los.

// NOME DA TABELA
$tabela = "newsletter";
// CAMPOS UTILIZADOS PARA A CONSULTA
$campos = "id, nome, email";
// NUMERO MÁXIMO DE ENVIO
$quant = 10;
// TEMPO ENTRE UM PROCESSO DE ENVIO E OUTRO
$seg = 36;

Na segunda linha informamos o nome da tabela onde se encontram os emails de nossos assinantes, eu criei a variável “$tabela” somente para facilitar as coisas pra quem está utilizando uma tabela com nome diferente.

Na quarta linha informamos os campos que vão ser utilizados no processo do envio. O campo id precisa ser informado pois é através dele que vamos informar qual email acaba de ser enviado.

O campo nome e email (nem precisa falar) são obrigatórios pois vão informar ao script o nome e email do destinatário.

Na sexta linha informamos a quantidade de emails que deve ser enviado por vez. Note que eu adicionei o valor “10″ você pode alterar este valor se quiser.

Na oitava linha informamos o tempo (em segundos) que deve ser aguardado entre um processo de envio e outro.

// DADOS DO EMAIL A SER ENVIADO
$assunto = "Envio de newslleter";
$msg = "Meu primeiro email enviado por pacotes em PHP/MySQL";
$nome_remetente = "Nome Remetente";
$email_remetente = "Email Remetente";

Na segunda linha informamos o título do email a ser enviado, este título corresponde ao assunto do email.

Na terceira linha informamos a mensagem do email, ou seja, a informação que deve ser enviada ao destinatário.

Na quarta e quinta linha informamos o nome e email do remetente (pessoa que envia), este ponto é importante, sempre que possível adicione um email verdadeiro pois é através dele que seu usuário poderá respondê-lo e também por que alguns servidores não permitem o envio de emails via PHP a menos que o campo “remetente” seja um email verdadeiro e principalmente existente no servidor, sendo assim, se seu site chama-se “site.com” seu email deve ser “algumacoisa@site.com”.

// ADICIONA AO CABEÇALHO DO EMAIL AS INFORMAÇÕES DO REMETENTE (QUEM ENVIA)
$cabecalho = "From: ". $nome_remetente ." <". $email_remetente .">";

// ADICIONA O CABEÇALHO PARA ENVIAR FORMATAÇÃO HTML
$cabecalho .= “MIME-Version: 1.0\r\n”;
$cabecalho .= “Content-type: text/html; charset=iso-8859-1\r\n”;

// CONECTA COM O SERVIDOR MYSQL
mysql_connect($host,$usuario,$senha);

// SELECIONA O BANCO
mysql_select_db($banco);

// RESGATA O VALOR DA GLOBAL INICIO
$inicio = $_GET["inicio"];
// ATRIBUI O RESULTADO DA SOMA ENTRE INICIO E QUANT
$fim = $inicio + $quant;

Nestas linhas fazemos (nesta ordem):

  1. Adicionamos as informações do remetente ao cabeçalho do email para que seja usado posteriormente.
  2. Adicionamos as informações para que o email aceite formatação HTML.
  3. Conectamos com o servidor MySQL, utilizando os dados de usuário, senha e host informados no inicio do script.
  4. Resgatamos o valor de uma variável global que será responsável por informar em qual registro deve ser iniciado o processo de envio dos emails.
  5. Atribuímos variável “$fim” o resultado da soma entre as variáveis “$inicio” e “$quant”.

// VERIFICA SE FOI ATRIBUIDO VALOR A VARIAVEL "INICIO"
if($inicio == ""){
// ATRIBUI O VALOR 0 CASO NÃO EXISTA VALOR ATRIBUIDO
$inicio = 0;
}else{
// ATRIBUI O VALOR DA GLOBAL INICIO CASO JA EXISTA VALOR ATRIBUIDO
$inicio = $_GET["inicio"];
}

  1. Verificamos se o valor da variável “$inicio” é igual a nada.
  2. Caso a verificação retorne verdadeiro, a variável “$inicio” passe a possuir o valor 0 (zero), indicando que ainda não foi enviado nenhum email, ou seja, o processo de envio ainda não começou.
  3. Caso a verificação retorne falso (o valor da variável pode ser qualquer coisa), ou seja, indica que o processo de envio já foi iniciado então a variável “$inicio” passe a possuir o valor que existir na global inicio.

// EXECUTA A CONSULTA OU INFORMA UM ERRO CASO OCORRA
$sql = mysql_query("SELECT ". $campos ." FROM ". $tabela ." WHERE codStatus = 0 LIMIT ". $inicio .",". $quant)or die(mysql_error());

  1. Montamos a consulta SQL necessária para retornar os dados solicitados pelo script.
  2. Adicionamos através das variáveis “$campos”, “$tabela”, “$inicio” e “$quant” os valores aos campos que vão ser utilizados no envio, nome da tabela onde encontram-se os dados dos assinantes, o valor que identifica de onde deve iniciar o envio e o valor que informa a quantidade máxima a ser enviada

// VERIFICA SE AINDA EXISTEM EMAILS A SEREM ENVIADOS
if(mysql_num_rows($sql) == 0){

// ALTERANDO O VALOR DO CAMPO CODSTATUS PARA 0
@mysql_query(“UPDATE “. $tabela .” SET codStatus = 0″);

// INFORMO O TÉRMINO DO PROCESSO
echo “Fim do processo de envio!”;
}else{

// CONTINUA EFETUANDO O ENVIO
echo “<meta http-equiv=\”refresh\” content=\”" . $seg . “,URL=?inicio=”. $fim .”\”>”;
}
Esta é uma parte importante no sistema.

  1. Verificamos se a quantidade de registros retornados é 0 (zero), ou seja, nenhum registro encontrado.
  2. Caso a quantidade de registros retornados seja 0 (zero), o script atualiza todos os registros existentes na tabela informada na variável “$tabela” (no meu exemplo “newsletter”), note que a atualização informa que o valor do campo codStatus deve ser alterado para 0. Você deve ter lido isso no início deste artigo.
  3. Após finalizar a atualização de todos os registros exibimos a mensagem informando o término do processo.
  4. Caso a quantidade de registros não seja 0 (zero), ou seja, foi encontrado um ou mais registros é “impresso” a meta refresh, está meta atualiza a página a cada intervalo de segundos, no nosso caso ela será atualizada a cada 10 segundos que foram informados através da variável $seg.
  5. Note que a meta refresh possui dois paramentos content que é o tempo em segundos que devem ser aguardados antes de atualizar a página e URL que é o endereço da página que deve ser carregada após o tempo informado em content, em nosso caso adicionei a parâmetro de url “inicio” que receberá o valor da variável “$fim”, esta variável informa em que número foi finalizado o último processo de envio.
  6. Se o item anterior foi executado o script irá aguardar o tempo informado e depois continuará enviando os emails.

// CRIA O LAÇO REPETITIVO
while($r = mysql_fetch_array($sql)){

// ADICIONAMOS OS PADRÕES DE DESTINATÁRIO
$para = $r["nome"] .”<”. $r["email"] .”>”;

// ENVIA O EMAIL PARA O DESTINATÁRIO
if(mail($para, $assunto, $msg, $cabecalho)){

// INFORMA SE A MENSAGEM FOI ENVIADA
echo “Mensagem enviada para:
\r”. $para;

// ALTERO O CODSTATUS PARA 1
@mysql_query(“UPDATE”. $tabela .” SET codStatus = 1 WHERE id = “. $id);
}else{

// INFORMO SE A MENSAGEM NÃO FOI ENVIADA
echo “Mensagem não enviada para:
\r”. $para;
}

}

  1. Criamos um laço repetitivo que será responsável por transferir os valores retornados na consulta SQL realizada anteriormente.
  2. Com os dados do destinatário, tentamos enviar o email
  3. Caso o envio seja bem sucedido é exiba a mensagem informando para quem foi enviado e em seguida atualizamos o registro referente ao email que acabamos de enviar, note que agora atualizamos o campo “codStatus” para conter o valor 1 (Email enviado).
  4. Caso a mensagem não seja enviada o script exibe a mensagem informando pra quem não foi possível enviar.

// LIBERA MEMORIA USADA NA CONSULTA
mysql_free_result($sql);
// FECHA A CONEXÃO COM O BANCO
mysql_close($conexao);

  1. Depois de ter realizado a consulta liberamos a memória utilizada no processo. Isso é necessário apenas para grandes consultas, ou para quem tem limite de processamento (CPU).
  2. Fechamos a conexão que haviamos criado anteriormente.

Bom, espero que isso seja útil para você (Demorei muito tempo digitando isso aqui e explicando tudo :D ).

Para aqueles que queiram saber mais sobre as funções utilizadas aqui disponibilizo aqui os links para tais.

mysql_connect()
mysql_close()
mysql_select_db()
mysql_fetch_array()
mysql_free_result()
mysql_query()
mysql_num_rows()
while()
mail()

E por fim disponibilizo aqui o script completo para quem quiser testa-lo ou utiliza-lo.

<?PHP

############################
# O CONTEÚDO DESTE NÃO FOI
# CRIADO COM O INTUITO DE
# DISTRIBUIR SPAM, OBRIGADO.
############################

// DADOS DE ACESSO AO BANCO MYSQL
$host = “HOST”;
$banco = “BANCO”;
$usuario = “USUARIO”;
$senha = “SENHA”;

// NOME DA TABELA
$tabela = “newsletter”;
// CAMPOS UTILIZADOS PARA A CONSULTA
$campos = “id, nome, email”;
// NUMERO MÁXIMO DE ENVIO
$quant = 10;
// TEMPO ENTRE UM PROCESSO DE ENVIO E OUTRO
$seg = 36;

// DADOS DO EMAIL A SER ENVIADO
$assunto = “Envio de newslleter”;
$msg = “Meu primeiro email enviado por pacotes em PHP/MySQL”;
$nome_remetente = “Nome Remetente”;
$email_remetente = “Email Remetente”;

// ADICIONA AO CABEÇALHO DO EMAIL AS INFORMAÇÕES DO REMETENTE (QUEM ENVIA)
$cabecalho = “From: “. $nome_remetente .” <”. $email_remetente .”>”;

// ADICIONA O CABEÇALHO PARA ENVIAR FORMATAÇÃO HTML
$cabecalho .= “MIME-Version: 1.0\r\n”;
$cabecalho .= “Content-type: text/html; charset=iso-8859-1\r\n”;

// CONECTA COM O SERVIDOR MYSQL
mysql_connect($host,$usuario,$senha);

// SELECIONA O BANCO
mysql_select_db($banco);

// RESGATA O VALOR DA GLOBAL INICIO
$inicio = $_GET["inicio"];

// VERIFICA SE FOI ATRIBUIDO VALOR A VARIAVEL “INICIO”
if($inicio == “”){
// ATRIBUI O VALOR 0 CASO NÃO EXISTA VALOR ATRIBUIDO
$inicio = 0;
}else{
// ATRIBUI O VALOR DA GLOBAL INICIO CASO JA EXISTA VALOR ATRIBUIDO
$inicio = $_GET["inicio"];
}

// ATRIBUI O RESULTADO DA SOMA ENTRE INICIO E QUANT
$fim = $inicio + $quant;

// EXECUTA A CONSULTA OU INFORMA UM ERRO CASO OCORRA
$sql = mysql_query(“SELECT “. $campos .” FROM “. $tabela .” WHERE codStatus = 0 LIMIT “. $inicio .”,”. $quant)or die(mysql_error());

// VERIFICA SE AINDA EXISTEM EMAILS A SEREM ENVIADOS
if(mysql_num_rows($sql) == 0){

// ALTERANDO O VALOR DO CAMPO CODSTATUS PARA 0
@mysql_query(“UPDATE “. $tabela .” SET codStatus = 0″);

// INFORMO O TÉRMINO DO PROCESSO
echo “Fim do processo de envio!”;
}else{

// CONTINUA EFETUANDO O ENVIO
echo “<meta http-equiv=\”refresh\” content=\”" . $seg . “,URL=?inicio=”. $fim .”\”>”;
}

// CRIA O LAÇO REPETITIVO
while($r = mysql_fetch_array($sql)){

// ADICIONAMOS OS PADRÕES DE DESTINATÁRIO
$para = $r["nome"] .”<”. $r["email"] .”>”;

// ENVIA O EMAIL PARA O DESTINATÁRIO
if(mail($para, $assunto, $msg, $cabecalho)){

// INFORMA SE A MENSAGEM FOI ENVIADA
echo “Mensagem enviada para:
\r”. $para;

// ALTERO O CODSTATUS PARA 1
@mysql_query(“UPDATE”. $tabela .” SET codStatus = 1 WHERE id = “. $id);
}else{

// INFORMO SE A MENSAGEM NÃO FOI ENVIADA
echo “Mensagem não enviada para:
\r”. $para;
}

}

// LIBERA MEMORIA USADA NA CONSULTA
mysql_free_result($sql);
// FECHA A CONEXÃO COM O BANCO
mysql_close($conexao);
?>

Criando meu próprio site

16

Posted by John-Henrique | Posted in Básico, Livre, Retorno financeiro, Web | Posted on 22-02-2007

Não é de hoje que vejo diversos endereços eletrônicos com a maior descombinação de cores ideias e seguimentos, navegando de página em página sempre acabamos nos deparando com sites onde o layout não se define não dá pra saber onde é o menu e onde é o rodapé.

Neste vou dar algumas ideias do que seria um site e o que seria um monte de gambiarras, por falar em gambiarras elas são muito bem vindas quando se trata de solução rápida principalmente quando isso envolve algum pagamento :D .

Hoje eu me inspirei a publicar alguns artigos e comecei a fazer buscas garimpando a web afim de encontrar informações sobre o assunto escolhido, durante estas “andanças” me deparei com alguns sites realmente desconcertantes. Dois “sites” que classifiquei foram Guia de Mídia e o TecMarcos, basicamente seriam apenas dois sites como qualquer outro a não ser pelos fatos que vou expor mais adiante…

Não estou aqui julgando qual site é bem feito ou bem organizado mas apenas alertando sobre o que é e o que não é um site, até por que se você observou bem o layout deste blog não foi feito por mim, peguei ele pronto, quem sabe daqui alguns dias eu faça o meu próprio layout.

Muitas pessoas devem ter se deparado com algum site que oferecem serviços, produtos ou apenas conteúdo mas que em si próprio não inspirava o mínimo de confiança e falando em confiança você talvez já conheça o Verdes Trigos é um blog de conteúdo cultural, o layout dele não é lá estas coisas mas, o conteúdo sim este vale por muitos layouts bem planejados que existem por ai, de alta qualidade.

Voltando aos fatos, algumas pessoas não pensam muito na hora de decidir que é um “webdesigner“, digo decidir pois na maioria das vezes é uma pessoa que nunca fez um curso de HTML e já vai criando dezenas e dezenas de páginas com tanta informação que no final nem ele mesmo sabe onde se encontra o foco principal do site.

Não faço a mínima ideia de como seria se alguém do nada resolvesse ser médico e na mesma hora já começasse a fazer cirurgias. Não estou dizendo que pra ser webdesigner tem que ter um registro, diploma ou certificado, apenas acho que deve-se ter um conhecimento na área e principalmente planejamento.

Outras centenas de sites (e por que não milhares) assim como os dois citados anteriormente estão “jogados” na web, em sua maioria parecem apenas ter um único objetivo, exibir anúncios ou links, talvez você se pergunte:

“-O que tem de errado nisso?”

Simples, o que é um site? vou recorrer WikiPedia
Resumidamente:
Um site (lê-se como "sai-te"), é um conjunto de páginas Web, isto é, de hipertextos acessíveis geralmente pelo protocolo HTTP na Internet.
Sendo assim, os sites citados não deixam de ser sites, mas, ao ver do autor eles não passam de outdoors, já que possuem tantos anúncios exibidos simultaneamente, isso tira a atenção do visitante. E já que é assim o visitante não vai voltar a visitar o site e o anunciante não vai ter interesse em investir, com o passar do tempo este site vai se tornar apenas mais um site perdido.

Provavelmente você deve ter notado que em um deles não foi publicado o nome do autor, será que ele não tem orgulho de sua obra? Eu teria principalmente se meu site estivesse com quatro anos de existência e com toda esta idade eu teria obrigação de honra-lo com um novo layout bem planejado.

Para que você evite problemas como estes e principalmente evitar que pessoas como eu fique publicando coisas que de certa forma “difamam” seu site tomei a liberdade de listar algumas dicas.

  1. Escolha o tema que seu site abordará, não fica legal um site cuja o domínio dê a ideia de ser um site evangélico e possua conteúdo pornográfico.
  2. Definido o item acima você precisa saber qual o publico alvo deste site jovens, adultos, crianças ou ambos. Estes fatores podem definir o sucesso de seu projeto. Tente entender o que o usuário vai fazer no site e principalmente o por que.
  3. E por falar em usuário, de todas as pessoas que visitam seu site você é uma das pessoas que não podem ter a opinião levada em consideração, justamente pelo fato de que você está criando o site, mesmo sendo você o autor a pessoa que irá usa-lo frequentemente será o visitante que ao sentir-se bem em seu site realiza outras visitas e passa a ser um usuário.
  4. Tome cuidado com os anúncios, eles são grandes armadilhas que podem fazer um usuário não visitar seu site permanentemente. Já foi bastante discutido o problema da janela pop-up que irrita o usuário, evite exibir vários anúncios pelo site.

    Independente da quantidade de anúncios existentes em seu site o usuário só vai clicar se ele se interessar pelo conteúdo ou informação que a peça apresentar, tenho certeza que você não fica clicando nos anúncios dos outros sites patrocinados.

  5. Evite adicionar links e mais links pelo site, o excesso de informação prejudica a visão do usuário, quer um exemplo? visite este site e tente localizar o formulário de contato, leve o tempo que quiser.

    Para evitar este problema defina o que é conteúdo necessário e o que é conteúdo extra

  6. Evite colocar todo tipo de conteúdo numa só página ou site, isso tem o mesmo resultado do item anterior
  7. Defina um layout que tenha uma relação visual com o tema abordado pelo site, se possível relacione também ao nome do domínio escolhido.
  8. Esqueça o uso de imagens para ilustrar o site utilize apenas se realmente for necessário. Quanto maior o número de imagens maior será o tempo para que seu site seja carregado no computador do usuário que nem sempre possui internet banda larga como você
  9. Pesquise em sites de conteúdo direcionado a webmaster a melhore maneira de criar determinado serviço

Estas e outras dicas são muito antigas e estão disponíveis em dezenas de sites espalhados pela web, você só precisa pesquisar.

Para que você consiga encontrar outros materiais referentes ao assunto escolhi alguns sites e listo-os aqui.
Imasters
Wmonline
Maujor
WebTutoriais

Espero que este enorme texto sirva pra alguma coisa :D .

Sobre o formulário de contato do site, não existe mesmo por isso você não encontrou.