Conexão ao MySQL

No php:

<?php
if ($conexao = mysql_connect("servidor","usuario","senha"))
{
if (!$banco = mysql_select_db("banco"))
{
die("Erro ao conectar ao banco: ".mysql_error());
}
} else {
die("Erro ao conectar ao servidor: ".mysql_error());
}
?>

Em asp:

<%
strConnection = "Driver={MySQL ODBC 3.51 Driver}; SERVER=servidor; DATABASE=nome_do_banco; UID=usuario; PWD=senha;"
%>

Comentarios

Caminho físico x caminho virtual para BD Access

Um erro relativamente comum por parte de desenvolvedores ainda sem muita experiênia, e que os leva frequentemente a achar que existe algum problema no servidor, é o caminho de Bancos de Dados Access.

Comumente o usuário tem, em sua máquina local, um banco no caminho…
c:\inetpub\wwwroot\bd\meubanco.mdb

Funciona em sua máquina local, e quando a página que usa o banco é enviada para o servidor… “A página não pode ser exibida”. A conclusão precipitada, muitas vezes, é que “há um problema no servidor, porque a página está correta, e roda em minha máquina“.

O desenvolvedor deve usar sempre um Caminho Virtual para não ter problemas se houver alguma mudança na configuração do servidor, ou se mudar de provedor e ainda para manter a compatibilidade, usando o mesmo código em seu servidor local e no servidor do produção (o do provedor). Se criou uma pasta “/data” e para lá enviou “meubanco.mdb” deverá usar, como caminho…

Server.MapPath(”\data\meubanco.mdb”)

A função Server.MapPath retorna (ou ‘traduz’) o caminho físico correspondente ao caminho virtual informado. No servidor local, como exempleficado, um…

Response.Write Server.Mappath(”\”) vai gerar…

c:\inetpub\wwwroot\

… e provavelmente será diferente no servidor do provedor. Assim é mantida a compatibilidade, não sendo necessário alterar o código para fazer o ‘upload’.

Comentario (1)

Página de contato usando o AspEmail

O código abaixo é um modelo de página de contato que faz uso do componente AspEmail, cujo manual pode ser encontrado aqui, e não deve ser confundido com o AspMail, da ServerObjects!

Como estamos considerando e exigência de autenticação, o remetente não pode ser o usuário que preencheu o formulário. Para contornar o problema e permitir que seja possível responder diretamente por um cliente de correio, um endereço do próprio domínio do site é utilizado como remetente e ao mesmo tempo destinatário. O endereço do solicitante é utilizado como ReplyTo.

É importante lembrar que nesse exemplo não há nenhum teste de consistência. Para uso realmente profissional o desenvolvedor precisa considerar que campos devem ser obrigatórios e se o endereço preenchido é coerente. Isso pode ser feito facilmente usando-se funçôes JavaScript.

<% if Request.Form(”botao”) = “” then %>
<form method=”post”>
<table border=”1″ align=”center” cellPadding=”5″ cellSpacing=”0″>
<tr>
<td>Seu nome
<input name=”nome” /></td>
</tr>
<tr>
<td>Seu email
<input name=”email” /></td>
</tr>
<tr>
<td>Mensagem
<textarea cols=”60″ rows=”6″ name=”mensagem”></textarea></td>
</tr>
<tr>
<td><input name=”botao” type=”submit” /></td>
</tr>
</table>
</form>
<%
else
Set oMail = Server.CreateObject(”Persits.MailSender”)
oMail.Host = “mail.dominio.com.br”
oMail.From = “contato@dominio.com.br”
oMail.UserName = “contato@dominio.com.br”
oMail.PassWord = “senha”
oMail.FromName = Request.Form(”nome”)
oMail.AddAddress “contato@dominio.com.br”, “Página de contato”
oMail.AddReplyTo Request.Form(”email”), Request.Form(”nome”)
oMail.Subject = “Contato pelo site”
oMail.Body = Request.Form (”mensagem”)
oMail.Send

If Err <> 0 Then
Response.Write “<H2>Ocorreu um erro: ” & Err.Description & “</h2>”
else
Response.Write(”<H2>Obrigado, seu e-mail foi enviado com sucesso!</H2>”)
End If
Set oMail = Nothing
end if %>

O código-fonte está em http://noticias.aspecto.net/asp/contato.txt.

Comentarios

Sistema Monitor

Quantos são e quem são os usuários online?
Qual o tempo médio de navegação por usuário?
Quais são os horários de maior atividade?
Qual o máximo de usuários navegando simultaneamente?

Os procedimentos utilizados no Sistema Monitor aqui descrito não são necessariamente os melhores em código ou performance. São, no entanto, o que considerei (segundo meu próprio julgamento) ao alcance da maioria dos usuários. Aqueles que esperam apenas “código mastigado” dificilmente farão proveito desse artigo. Um outro detalhe importante é que estou fazendo uso do Global.asa. Mais tarde vou escrever uma adaptação para quem não pode utilizar global.asa (normalmente em hospedagem gratuita).

O primeiro ponto a ser abordado será a contagem, pura e simples, dos usuários online. Isso é possível através das “Subs” Session_OnStart e Session_OnEnd (no global.asa), conforme descrito abaixo. Inicialmente você deverá ter definido uma variável Application no Application_OnStart

Sub Application_OnStart
    Application(”Max”) = 0
    Application(”OnlineVisit”) = 0
End Sub


Sub Session_OnStart
    Application(”OnlineVisit”) = Application(”OnlineVisit”) + 1
    if Application(”OnlineVisit”) > Application(”Max”) then
         Application(”Max”) = Application(”OnlineVisit”)
    End if
End Sub


Sub Session_OnEnd
    Application(”OnlineVisit”) = Application(”OnlineVisit”) - 1
End Sub


Session_OnStart é executada a cada vez que uma sessão é iniciada, o navegador é “instanciado”. A Session_OnEnd é executada a cada encerramento de sessão, e isso pode ocorrer de 2 maneiras.

a)     Através de Session.Abandon. Se existe um botão “fim” e o desenvolvimento foi correto, haverá uma “chamada” a Session.abandon. O navegador será fechado, ou haverá redirecionamento para página padrão…

b)     Não ocorreu nenhum “request” nos últimos “n” minutos, sendo “n” o valor de Session.TimeOut. é muito utilizado por quest?de segurança, e o valor padrão é 20 (minutos). Se o usuário simplesmente fechar o navegador (como normalmente acontece), a sessão expirará pelo tempo, e Session_OnEnd será executada.

Até aqui podemos saber, com uma pequena margem de erro (podemos até mesmo desconsiderar, uma vez que o s servidor precisa tratar a sessão até sua expiração) o número de usuários online, mas ainda não podemos saber QUEM são eles.

Esse é o segundo ponto, e para isso vamos utilizar uma tabela de um banco de dados, lembrando que não é necessariamente a melhor opção quanto à performance, mas sim quanto ao entendimento, à didática.

Vamos identificar o usuário pelo Session.SessionID, gerado a cada sessão. É um identificador único, podendo ser utilizado como chave primária, diferente do IP, que pode ser compartilhado. E ainda há a possibilidade, muito comum, de um mesmo usuário, em uma mesma máquina, abrir o mesmo site várias vezes. Por essa razão, não podemos utilizar o IP como identificador do usuário.

Essa tabela contará, para nosso simples exemplo, com um campo SessionID (numérico), e outro DtLastMov (Data&Hora).

Uma vez que o usuário faça o acesso à primeira página (e isso deve ser tratado, pois o usuário já tarimbado pode ir diretamente à página que deseja), seu SessionID deve ser inserido, juntamente com a Data & Hora. A cada novo request (mudança de página ou “submit” de formulário são casos típicos) o registro com seu SessionID deve ser atualizado com now().

Uma vez que Session_OnStart e Session_OnEnd nos informam o número de usuários online, se fizermos um select to tipo…

 sql = “SELECT TOP ” & Application(OnlineVisit) & ” * FROM tabela ORDER BY DtLastMov DESC”

… saberemos exatamente QUEM está online! Um campo IP pode ser utilizado ou USER (para sites que cadastram usuários), ou mesmo a combinação de ambos. é possível saber quem são os usuários logados e quem são os visitantes.

Se somarmos “n” minutos, sendo n o valor de Session.TimeOut ao último movimento de cada usuário podemos ter o tempo que cada um ficou online.

Vamos ver como podemos trabalhar com soma e subtração em campo Data & Hora. Utilizaremos, inicialmente, a função now()

Now() + 1 = Data&hora atual + 1 dia
Now() + (1/24) = Data&hora atual + 1 hora

Now() + (1/24/60) = Data&Hora atual + 1 minuto

Com DateDiff(”n”, DataHora1, Datahora2) calculamos o intervalo, em minutos, de duas variáveis “datahora”. é importante que os segundos serão desconsiderados. Por exemplo:

DateDiff(”n”,d1, d2) retornará 3.

Uma vez calculado o tempo individual, podemos obter facilmente a média (um pouco de matemática, não mais ASP), além de detalhes como horas de maior tráfego e o que mais o desenvolvedor achar por bem. é importante lembrarmos que o ASP é tão din⭩co quanto nós pudermos ser. A limitação é nossa própria criatividade e capacidade de analisar dados. O número máximo de visitantes já está sendo tratado em Application(”Max”), no Global.asa, e para que o proposto acima funcione corretamente é necessário tratar cada movimento do usuário. A utilização do Global.asa e as duas variáveis Application são suficiente para saber quantos são os visitantes do momento. A implementação do QUEM tem um certo custo e é necessário que cada movimento do usuário seja rastreado. Você poderá, assim, tratar seus usuários cadastrados e visitantes…

Vimos com um bom nível de detalhamento a teoria para a criação de um sistema monitor. Qualquer esclarecimento maior, ou dúvida quanto à implementação, basta enviar-me um e-mail.

Elildo Mancebo Reis
elildo@aspecto.net
www.aspecto.net

Comentarios

Como enviar mensagens com anexo a partir de páginas ASP

O envio de mensagens eletrônicas à partir de uma página usando anexos normalmente gera dificuldades para os desenvolvedores. Qualquer caminho referenciado em uma página ASP considera o caminho de pastas do servidor. Isso significa, então, que os anexos referenciados nas páginas precisam estar no servidor.

É preciso desenvolver uma página, relativamente sofisticada, que faça primeiro o upload, faça o envio com o anexo, envie a mensagem e, finalmente, exclua o anexo do servidor (para não utilizar espaço indevidamente). O manual do AspUpload (que ajuda nisso) está em

http://www.aspupload.com/manual.html

Comentarios

« Anteriores