• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nuno

Formulario com anexo - problema

14 mensagens neste tópico

Boas people!

bem criei um formulario para enviar email e até ai tudo bem, funciona...

tentei agora por a enviar com ficheiro em anexo e fikei com alguns problemas.

tipo se testar so o respectivo email, ou seja, sem o incorporar na página ele funciona mas se o meter exactamente igual na página deixa de funcionar...o.O

pa me explicar melhor:

este funciona:

http//:www.boxcolor.pt/teste.php

quando o meto aqui na página deixa de funcionar:

http://www.boxcolor.pt/index2.php?pagina=emprego

aki fika o codigo k estou a utilizar..

<?
if (!$_POST){
?>       

<form name="emprego" action="/index2.php?pagina=emprego" method="post" >
<input type="hidden" name="form" value="emprego">
<input type="hidden" name="lang" value="pt">
<table width="500" border="0" CELLPADDING=0 CELLSPACING=0>
.
.
.
.
.
</Table>
</Form>
<?
}else{
   //Estou a receber o formulário, componho o corpo
   $texto = "Formulário enviado\n";
   $texto .= "\nNome: " . $_POST["nome"] . "\n";
   $texto .= "\nApelido: " . $_POST["apelido"] . "\n";
   $texto .= "\n Dia de nascimento: " . $_POST["dia_nascimento"] . "\n";
   $texto .= "\n Mes de nascimento: " . $_POST["mes_nascimento"] . "\n";
   $texto .= "\n Ano de nascimento: " . $_POST["ano_nascimento"] . "\n";
   $texto .= "\n Telemovel: " . $_POST["telemovel"] . "\n";
   $texto .= "\n Email: " . $_POST["email"] . "\n";
   $texto .= "\n Página: " . $_POST["web_page"] . "\n";
   $texto .= "\n Situação Militar: " . $_POST["situacao_militar"] . "\n";
   $texto .= "\n rua: " . $_POST["rua"] . "\n";
   $texto .= "\n Codigo postal: " . $_POST["codigo_postal"] . "\n";
   $texto .= "\n Localidade: " . $_POST["localidade"] . "\n";
	$texto .= "\n CURRICULUM: " . $_POST["curriculum"] . "\n";

$texto   = wordwrap( $texto, 50, "", 1);
  
   $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 .= "$texto\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\" <boxcolor@boxcolor.pt>\r\n"; 
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n"; 
$headers .= "$boundary\n";

//envio o email com o anexo    
mail("boxcolor@boxcolor.pt","Candidatura de emprego",$mens,$headers);
   //agradeço pelo envio
   echo "Obrigado por preencher o formulário. Foi enviado corretamente.";
}
   //envio o correio...
  // mail("boxcolor@boxcolor.pt","Candidatura de emprego",$texto);
}
?> 

agrecia ajuda urgente pois já tenho o site online e nao tá a funcionar.. o.O

thnks...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui funcionou correctamente, na página emprego.

Se se identifica com os nossos valores - Inovação e Quantificação - e o que tem para oferecer á BOXCOLOR é uma mais valia, preencha o Formulário que se segue e envie-nos juntamente com o seu Curriculum Vitae. Obrigado.

* - Campos Obrigatórios

Obrigado por preencher o formulário. Foi enviado corretamente.

Privacidade

A BOXCOLOR respeita a sua privacidade, por isso os seus dados não serão vendidos, alugados ou partilhados com outras entidades sem o seu prévio consentimento..

Já agora e só um aparte é à e não á como tens e no fim de consentimento tens dois pontos finais.

Qual/Quais são os erros que dizes que te dá, confesso que nem olhei para o código, testei primeiro e deu-me bem.

PS: Erro muito grave, não fazes tratamento dos ficheiros enviados?

Acabei de enviar um ficheiro com extensão .php (vazio) ... imagina se meto lá código =)

****EDIT****

Já agora, uma restrição do tamanho do ficheiro, tipo 2Mb dava jeito, não vá alguém lembrar-se de enviar um vídeo LOOl

Se quiseres vai aqui: http://cgoncalves.com/upload-basico-de-ficheiros-com-php/

Apesar de ser um formulário simples, dá-te uma noção de como deves fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui funcionou correctamente, na página emprego.

Já agora e só um aparte é à e não á como tens e no fim de consentimento tens dois pontos finais.

Qual/Quais são os erros que dizes que te dá, confesso que nem olhei para o código, testei primeiro e deu-me bem.

PS: Erro muito grave, não fazes tratamento dos ficheiros enviados?

Acabei de enviar um ficheiro com extensão .php (vazio) ... imagina se meto lá código =)

****EDIT****

Já agora, uma restrição do tamanho do ficheiro, tipo 2Mb dava jeito, não vá alguém lembrar-se de enviar um vídeo LOOl

Se quiseres vai aqui: http://cgoncalves.com/upload-basico-de-ficheiros-com-php/

Apesar de ser um formulário simples, dá-te uma noção de como deves fazer.

Dá porque não quis que a página tivesse online e a dar erro de envio.. o.O

mas neste momento não está a anexar ficheiros...

quanto ao teamnho dos ficheiros e o devido tratamento vou fazer tratar disso quando resolver este problema..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dá porque não quis que a página tivesse online e a dar erro de envio.. o.O

mas neste momento não está a anexar ficheiros...

quanto ao teamnho dos ficheiros e o devido tratamento vou fazer tratar disso quando resolver este problema..

Mas na página que dizes que funciona teste.php enviei o ficheiro teste.php ... depois apaga

Mas ainda não esclareceste que erro dá, ou o que é que não faz...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas na página que dizes que funciona teste.php enviei o ficheiro teste.php ... depois apaga

Mas ainda não esclareceste que erro dá, ou o que é que não faz...

ok agora já podes testar em http://www.boxcolor.pt/index2.php?pagina=emprego

tipo não dá nenhum erro em concreto, simplesmente não xega a executar o código.

o código é examente o que está em teste.php mas aqui não funciona.. :S

já me indicaram que poderia ser de eu estar a usar Includes mas sem certezas.. :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta algo assim, não testei

<?
else{

        $headers  = "MIME-Version: 1.0\n"; 
$headers. = "From: \"$nome\" <boxcolor@boxcolor.pt>\r\n"; 
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
        $headers. = "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n"; 
        $headers.= "$boundary\n";

//Estou a receber o formulário, componho o corpo
   	$texto = "Formulário enviado\n";
   	$texto.= "\nNome: " . $_POST["nome"] . "\n";
   	$texto.= "\nApelido: " . $_POST["apelido"] . "\n";
   	$texto.= "\n Dia de nascimento: " . $_POST["dia_nascimento"] . "\n";
   	$texto.= "\n Mes de nascimento: " . $_POST["mes_nascimento"] . "\n";
   	$texto.= "\n Ano de nascimento: " . $_POST["ano_nascimento"] . "\n";
   	$texto.= "\n Telemovel: " . $_POST["telemovel"] . "\n";
   	$texto.= "\n Email: " . $_POST["email"] . "\n";
  	$texto.= "\n Página: " . $_POST["web_page"] . "\n";
   	$texto.= "\n Situação Militar: " . $_POST["situacao_militar"] . "\n";
   	$texto.= "\n rua: " . $_POST["rua"] . "\n";
   	$texto.= "\n Codigo postal: " . $_POST["codigo_postal"] . "\n";
  	$texto.= "\n Localidade: " . $_POST["localidade"] . "\n";
   	$texto.= "\n CURRICULUM: " . $_POST["curriculum"] . "\n";

$texto = wordwrap( $texto, 50, "", 1);
  
   	$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);
        
	$mens. = "Content-Transfer-Encoding: 8bits\n";
    		$mens. = "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
    		$mens. = "$texto\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"; 

	$destinatario = "boxcolor@boxcolor.pt";
	$assunto = "Candidatura de emprego";

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

   		echo "Obrigado por preencher o formulário. Foi enviado corretamente.";
}
}
?> 

E utiliza algo como isto:

function validaEmail($email)
{
    	if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $email, $check))
    		return true;
    	return false;
}

http://www.phpclasses.org/browse/file/22565.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nepia.

dá examente a mesma coisa que o anterior.. :)

ups testei agora o teu fora da página e envia o email, mas vazio, ou seja, nem anexos nem o texto.. o.o

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok tinhas um pequeno erro

mail($destinatario, $assunto, $mensagem, $headers); --> mail($destinatario, $assunto, $mens, $headers);   

. agora já envia com anexo mas apenas aki http://www.boxcolor.pt/teste2.php..

dentro da página continua a nao funcionar.. lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok tinhas um pequeno erro

mail($destinatario, $assunto, $mensagem, $headers); --> mail($destinatario, $assunto, $mens, $headers);   

. agora já envia com anexo mas apenas aki http://www.boxcolor.pt/teste2.php..

dentro da página continua a nao funcionar.. lol

Quando dizes que não funciona, referes-te que não aparece a mensagem de confirmação ou que nem sequer envia (nada, email, e/ou anexo)?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando dizes que não funciona, referes-te que não aparece a mensagem de confirmação ou que nem sequer envia (nada, email, e/ou anexo)?

Que não envia nada tambem..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta ver o conteúdo do $_POST nas duas páginas ... a ver se detectas alguma diferença

/* ... */
} else {
    echo '<pre>'; print_r($_POST); echo '</pre>';
/* ... */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta colocar este código na página emprego:

<html>
<form action="/index2.php?pagina=emprego" method="post" enctype="multipart/form-data" name="email">
  <table width="32%"  border="0" align="center">
    <tr>
      <td>Nome</td>
      <td><input name="nome" type="text" id="nome"></td>
    </tr>
    <tr>
      <td width="33%"><div align="right" class="texto">De:</div></td>
      <td width="67%"><input name="email_from" type="text" class="email"></td>
    </tr>
    <tr>
      <td><div align="right" class="texto">Assunto</div></td>
      <td><input name="assunto" type="text" id="assunto"></td>
    </tr>
    <tr>
      <td><div align="right" class="texto">Mensagem</div></td>
      <td><textarea name="mensagem" cols="50" rows="10" id="mensagem"></textarea></td>
    </tr>
    <tr>
      <td><div align="right" class="texto">Anexo</div></td>
      <td><input name="arquivo" type="file"></td>
    </tr>
    <tr>
      <td> </td>
      <td><input type="submit" name="Submit" value="Enviar"></td>
    </tr>
  </table>
</form>
</body>
</html>

<?php

$nome       = $_POST["nome"];
$email      = "boxcolor@boxcolor.pt";
$mensagem   = $_POST["mensagem"];
$assunto    = $_POST["assunto"];
$email_from = $_POST["email_from"];

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

$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";
  
mail($email,$assunto,$mens,$headers);
        echo"Email enviado!";
}
?>

Se funcionar é só adicionares os campos que faltam.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok ta feito... :)

brigado mesmo...

Agora sugiro-te que valides o email porque o email a@b.c é aceite

E filtra os ficheiros que aceitas para .rar, word, pdf, etc... limitação do tamanho dos ficheiros, etc...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora