Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Danilo Alemeras

Problema com formulário e anexo

Recommended Posts

Bom dia, estou a dias tentando implementar um formulario que envia anexo...mas até então eu consigo receber o anexo mas os dados da pessoa não vem no corpo do email, tais como Nome, email, telefone e por ai vai...segue abaixo o meu código html e php..e ao final dos dois códigos vou postar um print de um erro que da assim que eu envio o formulário.

 

HTML:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Camanducaia</title>
<script src="http://ajax.googleap...n.js"></script>
<link rel="stylesheet" type="text/css" href="css/estilo-global.css" />
<script language="javascript" type="text/javascript">
function checa_formulario(email){
if (email.nome.value == ""){
alert("Por Favor não deixe o seu nome em branco!!!");
email.nome.focus();
return (false);
}
if (email.email_from.value == ""){
alert("Por Favor não deixe o seu email em branco!!!");
email.email_from.focus();
return (false);
}
if (email.phone.value == ""){
alert("não deixe o telefone em branco!!!");
email.phone.focus();
return (false);
}
if (email.cargo.value == ""){
alert("não deixe o cargo em branco!!!");
email.cargo.focus();
return (false); 
}
}
</script>
 
</head>
<body onLoad="document.email.nome.focus();" id="pg-trabalheConosco" >
<div id="CM-top-bar"></div>
<div id="CM-Container">
<div id="CM-topConteudo">
<a href="javascript:;"><div class="CM-logo">Camanducaia</div></a>
<?php include("_menu.php"); ?>
<?php include("_forms-side.php"); ?>
</div>
<div id="CM-conteudo-trabConosco">
<h2>TRABALHE CONOSCO</h2>
 
<ul class="tabs">
<li><a href="#tab1" class="menu-01">Financeiro</a></li>
<li><a href="#tab2" class="menu-02">Administrativo</a></li>
<li><a href="#tab3" class="menu-03">Comercial</a></li>
</ul>
 
<div id="tab1">
 
<div class="list-vagas">
<h2 class="title-vagas">Vagas no setor Financeiro</h2>
<p>Assistente Financeiro - <strong>3 VAGAS</strong></p>
<p>Assistente Financeiro - <strong>1 VAGAS</strong></p>
<p>Assistente Financeiro - <strong>3 VAGAS</strong></p>
<p>Assistente Financeiro - <strong>1 VAGAS</strong></p>
<p>Assistente Financeiro - <strong>3 VAGAS</strong></p>
</div>
<div class="form-trabalhe">
<p class="title-form-vaga"><strong>Se interessou por alguma de nossas vagas? <br>Envie seu curriculo.</strong></p>
<form onSubmit="return checa_formulario(this)" action="mail.php" method="post" enctype="multipart/form-data" name="email">
<label>
<p>Nome: </p>
<input type="text" name="nome">
</label>
 
<label>
<p>E-mail: </p>
<input type="text" name="email_from">
</label>
 
<label>
<p>Telefone: </p>
<input type="text" class="fone" name="phone">
</label>
 
<label>
<p>Cargo Pretendido: </p>
<input type="text" name="cargo">
</label>
<label>
<p><u>Enviar Curriculo</u> </p>
<input type="file" value="arquivo" name="arquivo" class="file-input">
</label>
<input class="btn-enviar-cv" type="submit" name="Submit">
</form>
</div>
</div>
</div>
</div>
<?php include("_footer.php"); ?>
</body>
</html>
 

PHP:

 

<?php
//pego os dados enviados pelo formulario
$nome = $_POST["nome"];
$email = "danilo.lopes@sowercomunicacao.com.br";
$phone = $_POST["phone"];
$cargo = $_POST["cargo"];
$email_from = $_POST["email_from"];
//formato o campo da mensagem
$mensagem = wordwrap( $mensagem, 50, "
", 1);
//valido os emails
if (!ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$", $email)){
echo"<center>Digite um email valido</center>";
echo "<center><a href=\"java script:history.go(-1)\">Voltar</center></a>";
exit;
}
if (!ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$", $email_from)){
echo "<center>Digite um email valido</center>";
echo "<center><a href=\"java script:history.go(-1)\"><center>Voltar</center></a>";
exit;
}
$arquivo = isset($_FILES["arquivo"]) ? $_FILES["arquivo"] : FALSE;
if(file_exists($arquivo["tmp_name"]) and !empty($arquivo)){
$fp = fopen($_FILES["arquivo"]["tmp_name"],"rb");
$anexo = fread($fp,filesize($_FILES["arquivo"]["tmp_name"]));
$anexo = base64_encode($anexo);
fclose($fp);
$anexo = chunk_split($anexo);
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
$mens = "--$boundary\n";
$mens .= "Content-Transfer-Encoding: 8bits\n";
$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
$mens .= "$mensagem\n";
$mens .= "--$boundary\n";
$mens .= "Content-Type: ".$arquivo["type"]."\n";
$mens .= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n";
$mens .= "Content-Transfer-Encoding: base64\n\n";
$mens .= "$anexo\n";
$mens .= "--$boundary--\r\n";
$headers = "MIME-Version: 1.0\n";
$headers .= "From: \"$nome\" <$email_from>\r\n";
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n";
$headers .= "$boundary\n";
//envio o email com o anexo
mail($email,$cargo,$mens,$headers);
echo"Email enviado com Sucesso!";
}
//se não tiver anexo
else{
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: \"$nome\" <$email_from>\r\n";
//envia o email sem anexo
mail($email,$cargo,$mensagem, $headers);
echo"Email enviado com Sucesso!";
}
?>
 

 

ERRO AO ENVIAR O FORMULÁRIO

wQLNp1.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma olhada nos logs do servidor, para ver qual o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É uma hospedagem compartilhada ?

 

Geralmente, lá no teu ftp, está antes da pasta "public" ou "htdocs", uma pasta chamada "logs"

Entra nela, baixa o último arquivo(erro), e abre com um editor de texto.

 

Caso tenha acesso ssh, olhe em /var/log/apache2/*

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entra pelo ftp, e olha ai na raiz do ftp.

 

Vai ter uma pasta chamada logs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O próprio servidor cria novamente, caso você tenha deletado.

 

Só depois de você achar o error_log podemos continuar tentando te ajudar.

Não tem nenhum erro aparente de sintaxe, por isso preciso do error log.

 

Veja:

http://wiki.locaweb.com.br/pt-br/Como_localizar_erros_ou_depurá-los_em_minha_aplicação_(PHP_em_Linux,_Perl_em_Linux,_Python_e_Ruby_on_Rails)%3F

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionar header no lugar da mensagem não vai funcionar.
Adicione somente o html na mensagem e o anexo no cabeçalho.

E outra, a função mail é diferente em sistemas windows. O melhor a fazer é abrir uma conexão com o servidor SMTP, autenticar e escrever a mensagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eh que assim Mestre de Linguagem C...tipo o form q eu fiz nao tem mensagem saca..eh só Nome, Email, Telefone, Cargo pretendido e Anexo...só q o php eu peguei de um q tem mensagem..mas como sou newbie com php...eu nem tirei...mas enfim...ja tentei milhoes de formas e nda....ele envia o anexo mas nao vai nda na mensagem q no caso seria os dados da pessoa....e sempre q eu envio da esse erro 500 ai q nao sei oq eh...e os logs de erro do ftp tmb nao consegui achar...e nem conectar via SSH pra poder ver...tenso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos tentar, coloca isso no início do script:

 

<?php
ini_set('display_errors', true);
//pego os dados enviados pelo formulario
talvez, talvez, apareça o erro na tela, no lugar do 500.

 

Ali no teu email, vc não está mandando nada mais que o anexo. Que no caso, vc teria q adicionar:

$mens .= "$anexo\n";
$mens .= "--$boundary--\r\n";

$mens .= '<b>nome:</b> '. $nome. '<br />';//adicionei aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um teste ae com esse script:

<?php
$arquivo = $_FILES["arquivo"];
$html 	 = "<h1>Testando envio de e-mail</h1>";
$assunto = "Testando envio de e-mail";
$destinatario = "danilo.lopes@sowercomunicacao.com.br";
 
$boundary 	= "XYZ-".date("dmYis")."-ZYX";
$fp 		= fopen($arquivo["tmp_name"], "rb");
$anexo 		= fread($fp, filesize($arquivo["tmp_name"]));
$anexo 		= base64_encode($anexo);
fclose($fp);
 
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; ";
$headers .= "boundary=".$boundary."\r\n";
$headers .= "$boundary\n";
 
$mensagem = "--$boundary\n";
$mensagem .= "Content-Type: text/html; charset='utf-8'\n";
$mensagem .= $html."\r\n";
$mensagem .= "--$boundary \n";
 
$mensagem .= "Content-Type: ".$arquivo["type"]."; name=\"".$arquivo['name']."\"\n";
$mensagem .= "Content-Transfer-Encoding: base64\n";
$mensagem .= "Content-Disposition: attachment; filename=\"".$arquivo['name']."\"\r\n";
$mensagem .= $anexo."\n";
$mensagem .= "--".$boundary."\n";
 

mail($destinatario, $assunto, $mensagem, $headers);
?>

Bom, o erro 500 provavelmente está sendo causado por uma função que está obsoleta na versão do PHP utilizada pelo servidor.


Ou também pode ser algum erro no seu código PHP.
Pra saber o erro é preciso habilitar display_errors, como foi mencionado anteriormente.


Mas se no php.ini display_errors estiver desabilitado, não dará pra ativar com ini_set('display_errors', true).


Sobre não estar enviando a mensagem, o erro está nessa linha:

$mensagem = wordwrap( $mensagem, 50, "", 1);


A variável mensagem não foi definida antes dessa linha e não tem valor algum para ser enviado.


Outro erro, você está passando uma string vazia para wordwrap.

$mensagem = wordwrap( $mensagem, 50, "", 1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra saber o erro é preciso habilitar display_errors, como foi mencionado anteriormente.

 

Mas se no php.ini display_errors estiver desabilitado, não dará pra ativar com ini_set('display_errors', true).

Vamos ler o manual:

http://php.net/manual/en/errorfunc.configuration.php

display_errors "1" PHP_INI_ALL

 

http://php.net/manual/en/configuration.changes.modes.php

PHP_INI_ALL Entry can be set anywhere

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ler os comentários?

Quem deu a sugestão foi o William Bruno eu só copiei...

E outra, muitos servidores desabilitam o display_errors e não da pra ativá-lo no PHP, se você não sabe, o problema não é da documentação do PHP e muito menos meu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você não sabe, o problema não é da documentação do PHP e muito menos meu.

Concordo plenamente, apenas lamento que você prefira levar isto para o lado pessoal, em vez de provar que é possível desabilitar a função sem dar change dela ser ativada, ao contrário do que o próprio manual cita, conforme citei anteriormente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, quando não tem a pasta logs no ftp, normalmente existe na raiz do site (pasta www ou public_html, etc) um arquivo chamado error_log, é um arquivo sem extensão, abra ele e veja os erros, caso não consiga entre em contato com o helpdesk da sua hospedagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também se tiver erro de mais (uns 2GB pra lá) no arquivo de log pode não exibir novos erros.
Da uma olhada lá...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.