Ir para conteúdo

POWERED BY:

Arquivado

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

Rogério Dias

[Resolvido] Upload de Imagem via Form em PHP

Recommended Posts

Amigos, tenho um form no site onde o visitante pode enviar um depoimento incluindo uma imagem que o mesmo escolhe em seu pc, porém, ao fazer o teste, só vem texto, a imagem não vem. Estou errando em algum lugar, e não sei onde. Alguém pode me dar uma ajuda?

 

Código do Form:

<form action="sucesso.php" method="post" enctype="multipart/form-data">
             <p>
               <input type="hidden" />
             </p>
             <table width="374" border="0" align="center">
               <tr>
                 <th scope="col"> </th>
                 <th align="center" class="textos" scope="col"><p align="center"><strong>Para dúvidas, sugestões, elogios e reclamações,                        envie-nos uma mensagem preenchendo os campos abaixo.</strong></p></th>
                 <th scope="col"> </th>
               </tr>
             </table>
             <center>
               <table width="39" border="0" align="center" cellspacing="0" cellpadding="0">
                 <tr>
                   <td><span class="textos"><strong>Nome:</strong></span><br />
                     <input type="text" name="nome" class="estilotextarea20" maxlength="80" style="width: 350px; height: 15px; font-size: 11px; background: #dde5bc; border: 1 solid #57612d;" /></td>
                 </tr>
                 <tr>
                   <td><span class="textos"><strong>E-mail:</strong></span><br />
                     <input type="text" name="email" class="estilotextarea20" maxlength="100" style="width: 350px; height: 15px; font-size: 11px; background: #dde5bc; border: 1 solid #57612d;" /></td>
                 </tr>
                 <tr>
                   <td><span class="textos"><strong>Cargo:</strong></span><br />
                     <input type="text" name="cargo" class="estilotextarea20" maxlength="80" style="width: 350px; height: 15px; font-size: 11px; background: #dde5bc; border: 1 solid #57612d;" onKeyDown="Formatar_Telefone(this,10,event);" /></td>
                 </tr>
                 <tr>
                   <td><span class="textos"><strong>Nome da Empresa</strong>:</span><br />
                     <input type="text" name="empresa" id="assunto" class="estilotextarea20" maxlength="50" style="width: 350px; height: 15px; font-size: 11px; background: #dde5bc; border: 1 solid #57612d;" /></td>
                   </td>
                 </tr>
                 <tr>
                   <td><span class="textos"><strong>Enviar logomarca</strong>:</span><br />
                   <input type="file" id="imagem" class="estilotextarea20" name="imagem" style="background: #dde5bc; height: 15px; border: 1 solid #57612d;"></td>
                 </tr>
                 <tr>
                   <td><span class="textos"><strong>Depoimento:</strong></span><br />
                     <textarea type="text" name="depoimento" class="estilotextarea2031" style="width: 350px; height: 100px; font-size: 11px; background: #dde5bc; border: 1 solid #57612d;"></textarea></td>
                 </tr></p><br />
                 <tr>
                   <td>
                     <p>
                       <input name="submit" src="imgs/enviar.png" type="image" class="not1" value="" />
                       <b><b><b> </b> <img src="imgs/limpar.png" alt="" style="cursor:hand" onClick="document.forms[0].reset()" /> </p></td>
                 </tr>
               </table>
             </center>
           </form>

 

 

Código da página sucesso.php:

<?
$nome      = $_POST["nome"];
$email     = $_POST["email"];
$cargo   = $_POST["cargo"];
$empresa  = $_POST["empresa"];
$imagem   = $_POST["imagem"];
$depoimento  = $_POST["depoimento"];
global $email; 

$data      = date("d/m/y");                    
$ip        = $_SERVER['REMOTE_ADDR'];           
$hora      = date("H:i");                      
mail ("contato@seusite.com.br",                     
     "$assunto",
     "Data: $data\nIp: $ip\nHora: $hora\nNome: $nome\nE-mail: $email\nCargo: $cargo\nEmpresa: $empresa\nImagem: $imagem\nDepoimento: $depoimento",
     "From: $email"
    );
$site   = "contato@seusite.com.br";              
$titulo = "contato";                  
$msg    = "Obrigado pelo depoimento!";
mail("$email",
    "$titulo",
    "$msg",
    "From: $site"
   );
echo "<p align=center></p>";
echo "<p align=center></p>";
?>

 

Grato a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui amigão.

Um erro bem tensinho.

Verifica essa linha aqui que você colocou...

<tr>
<td><span class="textos"><strong>Enviar logomarca</strong>:</span><br />
<input type="file" id="imagem" class="estilotextarea20" name="imagem" style="background: #dde5bc; height: 15px; border: 1 solid #57612d;"></td>
</tr>

 

E você declarou...

$imagem = $_POST["imagem"];

 

Quando você declara um campo do tipo FILE... Você ao invez de usar POST vai passar a utilizar $_FILES;

 

E pelo que eu vi, você deve caçar um tutorial na internet para saber como fazer um upload de imagem.

Eu faria mais ou menos assim...

 

$dir = "upload/"; // Declara o nome da pasta para onde serão movidas as imagens
$imagem = $_FILES['imagem']; // Pega o valor do campo Imagem
$tipos = array("image/jpeg","image/bmp"); // Declara os tipos permitidos
try{

if($imagem[name]){ // Verifica se o campo foi preenchido.

 if(array_in($imagem[type],$tipos)){ // Verifica se o tipo da imagem enviada foi permitida

   if(move_uploaded_file($imagem[tmp_name],$dir)){ // Verifica se o arquivo foi movido

     throw new Exception("Imagem movida com sucesso.");

   } else {

     throw new Exception("Não foi possível mover o arquivo.");

   }

 } else {

  throw new Exception("Tipos permitidos: ".print_r($tipos));

 }

}else{
  throw new Exception("Preencha o campo! Pois ele está vazio.");
}

}catch(Exception $e){

echo $e->getMessage(); // Imprime as mensagens

}

 

Bom, acho que isso resolve o seu problema.

 

Atenciosamente,

Diego.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu mensagem de erro, o formulário foi enviado, porém a imagem não.

Criei a pasta no servidor, direcionei tudo direitinho.

O texto do formulário chega no meu e-mail mas só vem o nome da imagem, mas a imagem não. :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca assim no seu 'sucesso.php'.

<?php
      $nome = $_POST[ 'nome' ];
      $email = $_POST[ 'email' ];
      $cargo = $_POST[ 'cargo' ];
      $empresa = $_POST[ 'empresa' ];
      $imagem = $_POST[ 'imagem' ];
      $depoimento = $_POST[ 'depoimento' ];
      $data = date( 'd/m/Y' );
      $ip = $_SERVER[ 'REMOTE_ADDR' ];
      mail ("contato@seusite.com.br",                     
     "$assunto",
     "Data: $data\nIp: $ip\nHora: $hora\nNome: $nome\nE-mail: $email\nCargo: $cargo\nEmpresa: $empresa\nImagem: $imagem\nDepoimento: $depoimento",
     "From: $email"
    );
      $site   = "contato@seusite.com.br";              
      $titulo = "contato";                  
      $msg    = "Obrigado pelo depoimento!";
      mail(  "$email",
             "$titulo",
             "$msg",
             "From: $site"
      );
      echo "<p align=center></p>";
      echo "<p align=center></p>";

      if( count( $_FILES ) > 0 ){
             if( move_uploaded_file( $_FILES[ 'imagem' ][ 'tmp_name' ] , 
                 sprintf( './%s/%s.%s' , 'uploads' , md5( uniqid() ) , array_pop( explode( '.' , $_FILES[ 'imagem' ][ 'name' ] ) ) ) ) ) { 
                          echo 'Imagem enviada com sucesso';
                 }
      }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não deu certo... :o

 

Veja como está minha página "sucesso.php"

 

<?php
      $nome = $_POST[ 'nome' ];
      $email = $_POST[ 'email' ];
      $cargo = $_POST[ 'cargo' ];
      $empresa = $_POST[ 'empresa' ];
      $imagem = $_FILES[ 'imagem' ];
      $depoimento = $_POST[ 'depoimento' ];
      $data = date( 'd/m/Y' );
      $ip = $_SERVER[ 'REMOTE_ADDR' ];
      mail ("contato@seusite.com.br",                     
     "$assunto",
     "Data: $data\nIp: $ip\nHora: $hora\nNome: $nome\nE-mail: $email\nCargo: $cargo\nEmpresa: $empresa\nImagem: $imagem\nDepoimento: $depoimento",
     "From: $email"
    );
      $site   = "contato@seusite.com.br";              
      $titulo = "contato";                  
      $msg    = "Obrigado pelo depoimento!";
      mail(  "$email",
             "$titulo",
             "$msg",
             "From: $site"
      );
      echo "<p align=center></p>";
      echo "<p align=center></p>";
    if( count( $_FILES ) > 0 ){
             if( move_uploaded_file( $_FILES[ 'imagem' ][ 'tmp_name' ] , 
                 sprintf( './%s/%s.%s' , 'uploads' , md5( uniqid() ) , array_pop( explode( '.' , $_FILES[ 'imagem' ][ 'name' ] ) ) ) ) ) { 
                          echo 'Imagem enviada com sucesso';
                 }
      }
   $dir = "img_depoimento/"; // Declara o nome da pasta para onde serão movidas as imagens
$imagem = $_FILES['imagem']; // Pega o valor do campo Imagem
$tipos = array("image/jpeg","image/bmp"); // Declara os tipos permitidos
try{

if($imagem[name]){ // Verifica se o campo foi preenchido.

 if(array_in($imagem[type],$tipos)){ // Verifica se o tipo da imagem enviada foi permitida

   if(move_uploaded_file($imagem[tmp_name],$dir)){ // Verifica se o arquivo foi movido

     throw new Exception("Imagem movida com sucesso.");

   } else {

     throw new Exception("Não foi possível mover o arquivo.");

   }

 } else {

  throw new Exception("Tipos permitidos: ".print_r($tipos));

 }

}else{
  throw new Exception("Preencha o campo! Pois ele está vazio.");
}

}catch(Exception $e){

echo $e->getMessage(); // Imprime as mensagens

}  
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu mesclei os dois códigos. Mas...

1 - Bastava o seu?

2 - Como finalizou seu código?

3 - No caso do seu código, para qual diretório vai a imagem? :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo. O meu codigo estava funcionando. Você configurou a permissão chmod da pasta? .-.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu mesclei os dois códigos. Mas...

Mostre o código que eu te pedi para testar 'mesclado' com suas alterações feitas.

 

1 - Bastava o seu?

Solucionava o seu problema.

 

2 - Como finalizou seu código?

Com o editor, e um ctrl + s .. rs

 

3 - No caso do seu código, para qual diretório vai a imagem? :)

 

A imagem esta(vá) indo pro diretório 'uploads', você não conhece a função sprintf ?

 

Amigo. O meu codigo estava funcionando.

Não, não estava funcionando, motivo:

  1. Não existe a função 'array_in'

 

Observações:

  • Não utilize Exception dessa forma

  • Utilize ' ou " para indicar um índice de array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpem pelo atraso, mas já foi resolvido seguindo as orientações dos amigos Andrey e Dii.

Muito obrigado pela ajuda!

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde gente,

Desculpa desenterrar esse tópico, mas usei os codigos de modelo e mesmo asism meu for dá erro.

Podem dar uma olhada nele pra ver se acham?

 

O codigo php eh esse ai embaixo:
<?php
$from_name = "Contato do site";
$from_email = "locaweb@site37209.provisorio.ws";
$to_name = "Raphael Gonçalves";
$to_email = "anna.vilela@divicom.com.br";
$subject = "Campanha: Tal pai, tal filho";
$headers = "From: $from_name<$from_email>\n";
$headers .= "Reply-To: <$from_email>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "X-Sender: $from_name<$from_email>\n";
$headers .= "X-Mailer: PHP4\n";
$headers .= "X-Priority: 3\n";
$headers .= "Return-Path: <$from_email>\n";
$mensagem = "Nome: ".$_POST['nome']." \n";
$mensagem .= "E-mail: ".$_POST['email']." \n";
$mensagem .= "Telefone: ".$_POST['telefone']." \n";
$mensagem .= "Celular: ".$_POST['cel']." \n";
$mensagem .= "Corretora: ".$_POST['corretora']." \n";
$mensagem .= "Praça: ".$_POST['praca']." \n";
$imagem .= "Imagem: ".$_FILE['imagem']." \n";
$dir = "upload/"; // Declara o nome da pasta para onde serão movidas as imagens
$imagem = $_FILES['imagem']; // Pega o valor do campo Imagem
$tipos = array("image/jpeg","image/bmp"); // Declara os tipos permitidos
try{
if($imagem[name]){ // Verifica se o campo foi preenchido.
if(in_array($imagem[type],$tipos)){ // Verifica se o tipo da imagem enviada foi permitida
if(move_uploaded_file($imagem[tmp_name],$dir)){ // Verifica se o arquivo foi movido
throw new Exception("Imagem movida com sucesso.");
} else {
throw new Exception("Não foi possível mover o arquivo.");
}
} else {
throw new Exception("Tipos permitidos: ".print_r($tipos));
}
}else{
throw new Exception("Preencha o campo! Pois ele está vazio.");
}
}catch(Exception $e){
echo $e->getMessage(); // Imprime as mensagens
}
mail("$to_name<$to_email>, anna.vilela@divicom.com.br", $subject, $mensagem, $headers, $imagem);
O erro que ele me dá é esse aki:
Ele diz q nao existe pasta no servidor.
Ja mudei o caminho para completo e msms assim nada.. :pinch:
PHP Warning:  move_uploaded_file(upload/) [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: failed to open stream: No such file or directory in E:\home\divicom1\Web\emkt\divimoney\talpai_talfilho\160713\formulario\contato_confirmacao.php on line 49PHP Warning:  move_uploaded_file() [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: Unable to move 'C:\WINDOWS\Temp\phpE1F1.tmp' to 'upload/' in E:\home\divicom1\Web\emkt\divimoney\talpai_talfilho\160713\formulario\contato_confirmacao.php on line 49PHP Warning:  mail() expects parameter 5 to be string, array given in E:\home\divicom1\Web\emkt\divimoney\talpai_talfilho\160713\formulario\contato_confirmacao.php on line 100
Obrigada!
bjss

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.