Fórum WebTuga
Tecnologia => Programação => Tópico iniciado por: t_e_e_m em Junho 21, 2009, 09:52:52 pm
-
Boas. num site estou a querer colocar um formulario para contacto atraves de php.
o formulario:
o codigo em html fica:
<form name="form1" method="post" action="email.php">
<table width="100" border="0" cellspacing="0" cellpadding="0" align="center">
<tr bgcolor="#F4F4F4">
<td valign="top" width="100" nowrap><h3><font class="texto">Nome:</font></h3></td>
<td>
<input class="form_campos" type="text" name="nome" size="34"> </td>
</tr>
<tr bgcolor="#EFEFEF">
<td valign="top" width="100" nowrap><h3><font class="texto">E-mail:</font></h3></td>
<td>
<input class="form_campos" type="text" name="email" size="34"> </td>
</tr>
<tr bgcolor="#F4F4F4">
<td valign="top" width="100" nowrap><h3><font class="texto">Assunto:</font></h3></td>
<td>
<select class="form_campos" name="assunto">
<option class="form_campos" value="Opinião" selected>Opinião</option>
<option class="form_campos" value="Sugestão">Sugestão</option>
<option value="Marcação">Marcação</option>
<option class="form_campos" value="Reclamação">Reclamação</option>
<option class="form_campos" value="Outros">Outros</option>
</select> </td>
</tr>
<tr bgcolor="#EFEFEF">
<td valign="top" width="100" nowrap><h3><font class="texto">Mensagem:</font></h3></td>
<td>
<textarea class="form_campos" name="mensagem" cols="34" rows="4"></textarea> </td>
</tr>
<tr bgcolor="#F4F4F4">
<td colspan="2" valign="middle">
<div align="center">
<input class="form_botao" type="submit" name="Enviar" value="Enviar Mensagem">
<input class="form_botao" type="reset" name="Limpar" value="Limpar">
</div> </td>
</tr>
</table>
</form>
um codigo php da configuração
config.php
<?
/*
* Configurações do formulário de Contato
* Altere a variavel $mail_destino para o seu email
*
*/
//Seu email, para onde irao as informações do formulário
$mail_destino = "xxxxxxxx@sapo.pt";
//Mensagem de cabeçalho do email
$mail_header = "Mensagem enviada pelo formulário do Formulário de Contato.";
//Mensagem para o email de resposta
$msg_reply = " $nome, recebemos o seu email com o assunto $assunto. Obrigado por nos contactar";
//Mensagem de Erro
$msg_erro = "Os campos <font color=$cor_site>Nome, Mensagem e E-mail</font> não podem estar em branco.";
?>
ficheiro php email_form.php
<form name="form1" method="post" action="email.php"
<table width="100" border="0" cellspacing="0" cellpadding="0" align="center">
<tr bgcolor="">
<td valign="top" width="100" nowrap><font class="texto">Nome:</font></td>
<td>
<input class="form_campos" type="text" name="nome" size="29"> </td>
</tr>
<tr bgcolor="">
<td valign="top" width="100" nowrap><font class="texto">E-mail:</font></td>
<td>
<input class="form_campos" type="text" name="email" size="29"> </td>
</tr>
<tr bgcolor="">
<td valign="top" width="100" nowrap><font class="texto">Assunto:</font></td>
<td>
<select name="assunto" class="form_campos">
<option class="form_campos" value="Opinião" selected>Opinião</option>
<option class="form_campos" value="Marcação">Marcação</option>
<option class="form_campos" value="Sugestão">Sugestão</option>
<option class="form_campos" value="Reclamação">Reclamação</option>
<option class="form_campos" value="Sem assunto">Outros</option>
</select> </td>
</tr>
<tr bgcolor="">
<td valign="top" width="100" nowrap><font class="texto">Mensagem:</font></td>
<td>
<textarea class="form_campos" name="mensagem" cols="29" rows="4"></textarea> </td>
</tr>
<tr bgcolor= bgcolor="">
<td colspan="2" valign="middle">
<div align="center">
<input class="form_botao" type="submit" name="Enviar" value="Enviar Mensagem">
<input class="form_botao" type="reset" name="Limpar" value="Limpar">
</div> </td>
</tr>
</table>
</form>
e por fim
Ficheiro email.php
<?php
include("config.php");
//Testa campos obrigatórios
if ($nome!="" and $mensagem!="" and $email!="")
{
$msg.="Nome: $nome\n";
$msg.="E-mail: $email\n";
$msg.="Assunto: $assunto\n";
$msg.="$mensagem\n";
if (@ mail ($mail_destino, $assunto, $msg, $mail_header))
{
//Imprimindo confirmação de envio
echo
"
<html>
<meta http-equiv=refresh content=5;URL=formcall.html></html>";
echo "$nome, a mensagem:
$mensagem
.Foi enviada com sucesso!
";
echo "Obrigado!
";
//Enviando mensagem de confirmação para o email do internauta
@ mail ($email, "Re: $assunto", $msg_repy, $mail_header);
}
else
echo
"
<meta http-equiv=refresh content=5;URL=formcall.html>
</html><center>
<font color=red>
Erro ao enviar e-mail!
</font></center>
";
}
else
{
//Alerta sobre os campos obrigatórios
echo
"
<center>
$msg_erro
<a href=\"java script:window.history.go(-1)\" class=\"links\">Preencha correctamente os campos.[/url]
</center>
";
}
?>
TAl ccomo podem constactar este codigo tem uma confrimação de preencimento dos campos nome, mensagem e e-mail. aqquando o preenchimento do fromulario apesar de ter toos os campos preenchidos, aparece sempre a informação de que os campos em causa nao estao preenchidos, e nao é enviada a mensagem.
O que estarei a afzer mai, o servidor suporta php.
-
Por uma vista rápida, tu não estás a declarar a variável $nome...
-
[quote name=\'cenourinha]Por uma vista rápida\' date=\' tu não estás a declarar a variável $nome...[/quote\']
Mais concretamente, onde pode ver essa falta??
-
Alguns servidores tem o envio de email desactivado no PHP. Onde é que estás?
-
if ($nome!="" and $mensagem!="" and $email!="")
Isto nunca vai ocorrer, por as variáveis vão dar sempre vazio. Tens que dar um valor antes a variável.
$nome = $_POST['nome'];
$mensagem = $_POST['mensagem'];
$email = $_POST['email'];
Algo deste género, que vai associar as variáveis o valor do formulário.
-
Alguns servidores tem o envio de email desactivado no PHP. Onde é que estás?
alojamentogratuito.com
Isto nunca vai ocorrer, por as variáveis vão dar sempre vazio. Tens que dar um valor antes a variável.
$nome = $_POST['nome'];
$mensagem = $_POST['mensagem'];
$email = $_POST['email'];
Algo deste género, que vai associar as variáveis o valor do formulário.
entao sera aqui que tenho de alterar ???
//Testa campos obrigatórios
if ($nome!="" and $mensagem!="" and $email!="")
{
$msg.="Nome: $nome\n";
$msg.="E-mail: $email\n";
$msg.="Assunto: $assunto\n";
$msg.="$mensagem\n";
if (@ mail ($mail_destino, $assunto, $msg, $mail_header))
{
-
ninguem, tem mais nada para me ajudar???
-
O que provavelmente se passa é que quem criou esse script tinha as register_globals on, se não souberes o que isso é vê aqui,
http://pt2.php.net/manual/en/ini.core.php#...egister-globals (http://\"http://pt2.php.net/manual/en/ini.core.php#ini.register-globals\")
Provavelmente o teu servidor tem e diga-se de passagem muito correctamente as register_globals OFF visto ser um buraco de todo tamanho na segurança, o que tens que fazer é meramente declarar as tuas variáveis passando os valores do POST do formulário
Podes saber mais acerca de POST aqui : -> http://www.w3schools.com/php/php_post.asp (http://\"http://www.w3schools.com/php/php_post.asp\")
Assim:
$nome = $_POST['nome'];
$email = $_POST['email'] ;
$assunto= $_POST['assunto'] ;
$mensagem = $_POST['mensagem'];
antes da validação que tens ou seja antes de
if ($nome!="" and $mensagem!="" and $email!="")
Para concluir o código que tens aí está pobremente construido, muito mau e com imensas falhas de segurança
Força aí
-
Exacto.
-
O que provavelmente se passa é que quem criou esse script tinha as register_globals on, se não souberes o que isso é vê aqui,
http://pt2.php.net/manual/en/ini.core.php#...egister-globals (http://\"http://pt2.php.net/manual/en/ini.core.php#ini.register-globals\")
Provavelmente o teu servidor tem e diga-se de passagem muito correctamente as register_globals OFF visto ser um buraco de todo tamanho na segurança, o que tens que fazer é meramente declarar as tuas variáveis passando os valores do POST do formulário
Podes saber mais acerca de POST aqui : -> http://www.w3schools.com/php/php_post.asp (http://\"http://www.w3schools.com/php/php_post.asp\")
Assim:
$nome = $_POST['nome'];
$email = $_POST['email'] ;
$assunto= $_POST['assunto'] ;
$mensagem = $_POST['mensagem'];
antes da validação que tens ou seja antes de
if ($nome!="" and $mensagem!="" and $email!="")
Para concluir o código que tens aí está pobremente construido, muito mau e com imensas falhas de segurança
Força aí
Com essa alteração fica seguro??
-
Fica meramente mais seguro em relação as register_globals, mas no fundo não, repara por exemplo a única validação que tens para o email é ver se o valor do campo de email não está vazio, quando fazes no if $email != "" a única coisa que tás a fazer é ver se o valor $email é diferente de vazio, significa que facilmente poderia colocar o que quiser no valor do email basta la colocar um simples "a" ou fazer um ataque por injecção no email , saber mais aqui -> http://www.bl0g.co.uk/20060214/php-mail-em...-to-send-email/ (http://\"http://www.bl0g.co.uk/20060214/php-mail-email-injection-attack-allows-spammers-to-send-email/\")
Cuidado com os cabeçalhos do e-mail
O que podes fazer para resolver isso mais simplesmente é fazer uma validação do valor do e-mail por expressão regular
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
if (preg_match($regexp, $email)) {
echo "Email address is valid.";
} else {
echo "Email address is <u>not</u> valid.";
}
Acima de tudo, estudar mais um pouco e procurares saber quais os problemas existem ao enviar mails pela função mail() do PHP
-
[quote name=\'ilovehentai]Fica meramente mais seguro em relação as register_globals\' date=\' mas no fundo não, repara por exemplo a única validação que tens para o email é ver se o valor do campo de email não está vazio, quando fazes no if $email != "" a única coisa que tás a fazer é ver se o valor $email é diferente de vazio, significa que facilmente poderia colocar o que quiser no valor do email basta la colocar um simples "a" ou fazer um ataque por injecção no email , saber mais aqui -> http://www.bl0g.co.uk/20060214/php-mail-em...-to-send-email/ (http://\"http://www.bl0g.co.uk/20060214/php-mail-email-injection-attack-allows-spammers-to-send-email/\"\')
Cuidado com os cabeçalhos do e-mail
O que podes fazer para resolver isso mais simplesmente é fazer uma validação do valor do e-mail por expressão regular
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
if (preg_match($regexp, $email)) {
echo "Email address is valid.";
} else {
echo "Email address is <u>not</u> valid.";
}
Acima de tudo, estudar mais um pouco e procurares saber quais os problemas existem ao enviar mails pela função mail() do PHP[/quote]
Então acha arriscado ter o formulario num site?
eu não percebop muito de php. Eu vou alterar o codigo e depois posso pedir para que me reveja o mesmo?
-
Agora coloquei assim o codigo:
<?php
include("config.php");
//Testa campos obrigatórios
if ($nome!="" and $mensagem!="" and $email!="")
$nome = $_POST['nome'];
$email = $_POST['email'] ;
$assunto= $_POST['assunto'] ;
$mensagem = $_POST['mensagem'];
if (@ mail ($mail_destino, $assunto, $msg, $mail_header))
{
//Imprimindo confirmação de envio
echo
"
<html>
<meta http-equiv=refresh content=5;URL=formcall.html></html>";
echo "$nome, a mensagem:
$mensagem
.Foi enviada com sucesso!
";
echo "Obrigado!
";
//Enviando mensagem de confirmação para o email do internauta
@ mail ($email, "Re: $assunto", $msg_repy, $mail_header);
}
else
echo
"
<meta http-equiv=refresh content=5;URL=formcall.html>
</html><center>
<font color=red>
Erro ao enviar e-mail!
</font></center>
";
}
else
{
//Alerta sobre os campos obrigatórios
echo
"
<center>
$msg_erro
<a href=\"java script:window.history.go(-1)\" class=\"links\">Preencha correctamente os campos.[/url]
</center>
";
}
?>
Mas ao enviar a mensagem aparece a seguointe mensagem:
Parse error: syntax error, unexpected '}' in /home/crbpt/public_html/email.php on line 34
Alguem me pode ajudar neste problema!! ainda nao consegui por isto de pé e estou mesmo a precisar de uma coisa deste genero.
Podem dar uma maozinha?
-
Acho que já te respondemos a tudo... deves analisar a informação que te foi passada e tirar proveito dela.
-
Acho que já te respondemos a tudo... deves analisar a informação que te foi passada e tirar proveito dela.
E agradeço bastante a informação passado, mas tentei fazer o que ilovehentai e da o erro que citei em cima.
-
Na linha 34 tens uma chaveta a mais ou então esquecestes do ponto e vírgula, confirma
-
Tirei a chaveta e da erro na linha 25!! lol
-
Moço precisas de começar pelo básico mesmo antes de te aventurar mais, quando inicias uma condição um IF por exemplo usas as chavetas para englobar o procedimento a tomar caso essa condição for verdadeira
assim temos
if($condicao){
//procedimento da condição 1 caso ela seja veradeira
}else if($condicao2){
//caso a condição tiver sido falsa e a condição 2 verdadeira executa este procedimento
}else{
// se nenhuma das anteriores for veradeiras executa o que tiver aqui
}
No teu caso o script é assim
include("config.php");
//Testa campos obrigatórios
if ($nome!="" && $mensagem!="" && $email!=""){
$nome = $_POST['nome'];
$email = $_POST['email'];
$assunto= $_POST['assunto'];
$mensagem = $_POST['mensagem'];
if (@mail($mail_destino, $assunto, $msg, $mail_header))
{
//Imprimindo confirmação de envio
echo
"
<html>
<meta http-equiv=refresh content=5;URL=formcall.html></html>";
echo "$nome, a mensagem:<br> $mensagem <br>.Foi enviada com sucesso!<br>";
echo "Obrigado!<br><br>
";
//Enviando mensagem de confirmação para o email do internauta
@mail($email, "Re: $assunto", $msg_repy, $mail_header);
}else{
echo
"
<meta http-equiv=refresh content=5;URL=formcall.html>
</html><center><br><br><font color=red>
<b>Erro ao enviar e-mail!</b>
</font></center>
";
}
}else{
//Alerta sobre os campos obrigatórios
echo
"
<br><br><center>
$msg_erro <br><br>
<a href=\"java script:window.history.go(-1)\" class=\"links\">Preencha correctamente os campos.</a>
</center>
";
}
?>
-
Passado algum tempo cá estou eu, por questões de saude tive de me ausentar.
eu coloquei o codigo que o ilovehentai me indicou corrigido, e mantem os erros! o que se passara?
-
apesar de completar todos os campos, da a informação que nao preenchi os dados.