Ir para conteúdo

POWERED BY:

Arquivado

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

GiovanniWeb

[Resolvido] Upload e enctype="multipart/form-data", probl

Recommended Posts

Olá, sou iniciante em PHP e queria que me ajudassem com um problema que parece ser bem comum.

Estou criando um formulário de cadastro como se fosse uma rede social, e nele, tem um campo para enviar uma imagem de avatar. Ok, eu sei que é preciso usar o modo enctype="multipart/form-data" no form para a transferência de arquivos, e sim, eu o uso. Mas meu problema é o seguinte:

 

Este é o meu código do form:

<form class="form" action="enviar.php" method="post" name="form" id="form1" accept-charset="utf-8" enctype="multipart/form-data" >

  <!-- resto do código -->

	   <input class="form-upload" type="file" id="input_16" name="avatar" file-accept="jpg, jpeg, png, gif" file-maxsize="10240" />

  <!-- resto do código -->

</form>

 

E este o código da action PHP "enviar.php":

 

<?php

//resto do código

$avatar = $_POST['avatar'] or die ("falha no avatar");

//...


//variável que insere conteudo no banco de dados:

$inserir = "INSERT INTO cadastro_DB (ID, nome, sobrenome, apelido, email, dia, mes, ano, senha, confirm_senha, avatar, avalie, conheceu, duvidas) VALUES ('id','$nome','$sobrenome','$apelido','$email','$dia','$mes','$ano','$senha','$confirm_senha','$avatar','','$conheceu','$criticas')"
or die ("falha no inserir");

//fazendo a consulta:

	$resultado = mysql_query($inserir) 
	 or die('Could not connect: ' . mysql_error());

		echo "Dados adicionado com sucesso.<br>
		<a href='cadastro.php'><b><h4>Retornar ao cadastro</h4></b></a>";

//inicio do upload:

$imagem = $_FILES['avatar']['name']; //pega o nome da imagem
$destino="/avatar/$imagem"; //indica o destino onde será salva

 if ($_FILES["avatar"]["error"] > 0) //se tiver algum erro...
{
echo "Return Code: " . $_FILES["avatar"]["error"] . "<br> Escolha outra IMAGEM.";
}
 else
{

  move_uploaded_file($_FILES['avatar']['tmp_name'],$destino);
  echo "Salvo em: " . $destino;//para testar

}
 ]

?>

 

Quando NÃO insiro o enctype="multipart/form-data" ele reconhece a variavel ($avatar) por POST normalmente, ou seja, o código funciona por completo, inclusive envia os dados para o banco de dados, só que a global $_FILES não recebe o arquivo, mesmo com no banco de dados ter salvo seu nome. O que resulta numa falha do upload.

Já quando eu INSIRO o enctype="multipart/form-data", a variável $avatar não recebe valor, a página morre no ' or die("falha no avatar") ', como eu declarei para saber o erro.

 

Gostaria de saber um jeito de usar o enctype="multipart/form-data" sem que afete o resto do documento, mas num unico form, sem ter que usar pop-up ou coisas do tipo. também gostaria de saber se estou usando o destino da imagem corretamente.

 

Obrigado desde já,

Giovanni.

:upset:/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

$avatar = $_POST['avatar'] or die ("falha no avatar");

:seta:

if( !isset( $_FILES['avatar'] ) )
{
   echo 'necessário enviar uma imagem.'; exit;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

$avatar = $_POST['avatar'] or die ("falha no avatar");

:seta:/>/>

if( !isset( $_FILES['avatar'] ) )
{
   echo 'necessário enviar uma imagem.'; exit;
}

 

Muito obrigado hinom! Mas infelizmente continua não funcionando...eu já tinha tentado tirando o "or die ('...')", e deu o mesmo resultado: Ele nem adiciona o nome do arquivo no banco de dados, nem salva na pasta destino... :ermm:/>

 

Queria saber se estou fazendo o destino certo, porque, mesmo com a variavel para o BD não funcionando, o arquivo deveria ser salvo certo gente?

 

Mesmo assim, agradeço a sua atenção Hinom! :thumbsup:/>

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?
$diretorio = "images/";
$tamanho_maximo = "31457280";   //30mb
$nome_arquivo = $_FILES['foto']['name'];
$temporario_arquivo = $_FILES['foto']['tmp_name'];
$tipo_arquivo = $_FILES['foto']['type'];
$tamanho_arquivo = $_FILES['foto']['size'];

if(($tipo_arquivo != 'image/jpeg')
AND ($tipo_arquivo != 'image/gif')
AND ($tipo_arquivo != 'image/png'))
{echo "Formato inválido"; }
elseif($tamanho_arquivo > $tamanho_maximo)
{echo "Imagem muito Grande"; }

elseif(file_exists("$diretorio/$nome_arquivo"))
{echo "Renomeie sua imagem antes de enviar"; }
else {
           $gerarnome = substr(md5(uniqid(time())), 0, 10);
               $nome_envia="$gerarnome.$nome_arquivo";
move_uploaded_file($temporario_arquivo, $diretorio.$nome_envia);

 echo "Upload feito com sucesso !";

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque o $_FILES['...'] sempre vai existir, então, use outro método pra verificar, como este:

if( empty( $_FILES['avatar']['name'] ) ){
   die( 'Avatar obrigatório!' );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, obrigado por toda atenção! Consegui resolver meu problema, e não era nada do que nós esperavamos. Como estou trabalhando com um servidor online pela primeira vez em PHP, não sabia que eu deveria setar as permissões CHMOD para poder receber arquivos.

Estava realmente estranhando, pois no meu servidor local EasyPHP funcionou perfeitamente. Mas no online noads.biz ou xp3.biz (Que recomendo muito aliás! Gratuito!) não estava.

Para quem por acaso passa pelo mesmo, a solução é a seguinte:

- selecione a pasta a qual deseja salvar seus arquivos;

- procure um botão para gerenciar permissões, CHMOD ou coisas do tipo;

- e congigure-as para CHMOD 777, ou seja, o user, o grupo e qualquer pessoa podem ler, executar e inserir arquivos.

 

Mesmo assim, fiz algumas configurações que voces me recomendaram, muito grato! RESOLVIDO! :clap: :clap: :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

noads.biz ou xp3.biz SÃO LENTOS E FACEIS PARA ATAQUES DE HACKERS E DEIXA DE USAR UMA HOSPEDAGEM BOA ILIMITADA DE 6 REAIS PRA USAR UMA FREE NÃO ACHO BOM .

Compartilhar este post


Link para o post
Compartilhar em outros sites

noads.biz ou xp3.biz SÃO LENTOS E FACEIS PARA ATAQUES DE HACKERS E DEIXA DE USAR UMA HOSPEDAGEM BOA ILIMITADA DE 6 REAIS PRA USAR UMA FREE NÃO ACHO BOM .

 

Em relação a hackers eu já imaginava...mas como é algo só para testes eu não pensei nisso antes...criei a conta lá meio que por desespero...

Mas eu não acho ele lento não cara...chego a fazer uploads de 4/5 arquivos de uma vez incluindo imagens em menos de 0,5 segundos. E as páginas até que carregam rápidamente também...

 

Queria aproveitar pra perguntar se tem alguma forma de fazer aquela verificação se o e-mail ou nome e o sobrenome já existem no banco de dados só que no próprio arquivo onde se encontra o formulário de envio. Para que se já estiver cadastrado, ele dá um aviso e não redireciona para a action.

Já tentei fazeê-lo na propria action, mas além de não funcionar, não é o que quero...quero que avise antes da pessoa conseguir "enviar" o form para action.

 

Alguem pode me ajudar???

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.