Ir para conteúdo

POWERED BY:

Arquivado

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

Edu_Gaijutis

[Resolvido] Upload não envia imagem

Recommended Posts

salve galera!!

 

to com um + probleminha aqui..rs

 

um sisteminha de inclusão aqui, que esta dando erro no upload da imagem..

 

informa erro de arquivo inválido, e como não manjo quase nada de php não sei o que pode estar havendo..

 

o codigo é esse:

<?
  include("../dados.php");
  
  $nome = $_POST['nome']; 
  $modelo = $_POST['modelo']; 
  $descricao = $_POST['descricao']; 
  $valor = $_POST['valor']; 
  $codigo = $_POST['codigo']; 
  $data = date("d/m/Y \à\s H:i:s");
  
  $existe = mysql_query("SELECT * FROM ofertas WHERE nome = '$nome'");
  $contar = mysql_num_rows($existe);
  if($contar > 0) {
  echo "Já existe um produto registrado com o nome: <b>$nome</b><";
  }else{
  
  //Variável que guardará o local onde o arquivo será enviado
  $imgs = "imgs";
  $dest = $imgs."/".$file_name;
  
  
  
  if(!move_uploaded_file($file, $dest)){
  echo "Não foi possível fazer upload! Arquivo inválido.
  
  <a href=java script:history.back();>Voltar</a>";
  }else{
  
  $img_enviada = "imgs/$file_name";
  $sql = "INSERT INTO ofertas ( nome, modelo, descricao, valor, codigo, data, img) VALUES ( '$nome' , '$modelo' , '$descricao' , '$valor' , '$codigo' , '$data', '$img_enviada')";
  if(mysql_query($sql)) {
  echo "Cadastro efetuado com sucesso!
  
  <a href=java script:history.back();>Voltar</a>";
  }else{
  echo "Não foi possivel cadastrar!
  
  <a href=java script:history.back();>Voltar</a>";
  }
	}
	 }
  
  ?>

o mais estranho é que uso sistema idêntico em outros dois sites e funcionam perfeitamente, além de funcionar local também...

mas na hora que joguei no servidor num funfa...

 

pode ser alguma restrição do servidor?

 

se alguém puder dar uma luz :D

 

valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No formulário, página anterior, HTML...

 

você colocou o enctype do formulário (quando se envia inputs do tipo file, precisa) ?

 

<form enctype="multpart/form-data"....>

</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, creio que o form esteja correto rs

 

<form action="inserir_show.php" method="post" onSubmit="return validaForm()" enctype="multipart/form-data" name="ofertas" id="ofertas">
	  <table width="100%" border="0" align="center" cellpadding="0" cellspacing="2">
		<tr>
		  <td width="24%">Nome:</td>
		  <td width="76%">
			<input name="titulo"  type="text" id="titulo" size="40">		  </td>
		</tr>
		<tr>
		  <td width="24%">Descrição:</td>
		  <td><label>
			<textarea name="descricao" id="descricao" cols="45" rows="5"></textarea>
		  </label></td>
		</tr>
		<tr>
		  <td height="20">Foto:</td>
		  <td><label>
			<input type="file" name="file" id="file">
		  </label></td>
		</tr>
		<tr>
		  <td colspan="2"><label>
			<input type="submit" name="enviar" id="enviar" value="inserir">
		  </label></td>
		  </tr>
	  </table>
			</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

da um print_r($_FILES)

 

Se tiver algo no $_FILES, é porque ele não ta criando o $file_name, dai vais ter que usar $_FILES['file_name'] se não me engano...

Compartilhar este post


Link para o post
Compartilhar em outros sites

if(!move_uploaded_file($file, $dest)){

onde está está $file????

 

talvez não esteja funcionando pois register_globals esteja desativada...

 

inclua isso no seu arquivo de upload..

 

$file = $_FILES["file"];

echo "<pre>";
print_r($file);
echo "</pre>";

veja o que retorna..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se você cortou parte do codigo, mas em nenhum momento apareceu você pegando arquivo da variavel global $_FILES atribuindo ele a variavel $files;

 

você pode verificar quando for recuperar o arquivo da $_files ela tem no vetor dentro e tem o indice error que você pode ver se está ok o arquivo.

 

edit: o padrão do php 5 é register_globals off, eh não é recomendado usar ele por segurança.

Compartilhar este post


Link para o post
Compartilhar em outros sites

if(!move_uploaded_file($file, $dest)){

onde está está $file????

 

talvez não esteja funcionando pois register_globals esteja desativada...

 

inclua isso no seu arquivo de upload..

 

$file = $_FILES["file"];
 
 echo "<pre>";
 print_r($file);
 echo "</pre>";

veja o que retorna..

 

eita...

na mosca amigo..

ativei o register globals e funfou heheheh

 

só pra constar, o erro que retornou foi

Array
(
	[name] => 04.jpg
	[type] => image/jpeg
	[tmp_name] => /tmp/phplyTfjk
	[error] => 0
	[size] => 13009
)

 

 

Não sei se você cortou parte do codigo, mas em nenhum momento apareceu você pegando arquivo da variavel global $_FILES atribuindo ele a variavel $files;

 

você pode verificar quando for recuperar o arquivo da $_files ela tem no vetor dentro e tem o indice error que você pode ver se está ok o arquivo.

 

edit: o padrão do php 5 é register_globals off, eh não é recomendado usar ele por segurança.

hehehe, ativei o register globals e funfo

 

valeu a força galera!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que retornou não foi um erro, e sim um array com as informações do arquivo...

 

não é recomendável ativar register_globals, é melhor você adaptar o para que funcione com ela desativada...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que retornou não foi um erro, e sim um array com as informações do arquivo...

 

não é recomendável ativar register_globals, é melhor você adaptar o para que funcione com ela desativada...

hummm, como disse num manjo de php.. o maximo é adaptar codigos hehehhe

 

o que poderia ser feito para essa adaptação então?

 

valeu!

 

ps. qual o risco do register_globals ativado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

para adaptá-lo, inicialmente resgate todos os dados utilizando a variáveis SUPERGLOBAIS ($_POST, $_GET, etc...)

 

no seu form tem os campos, titulo, descricao, file

 

resgate-os, assim:

 

$titulo = $_POST["titulo"];
$desc = $_POST["descricao"];
$file = $_FILES["file"];

* Campos do tipo file, retornam um array com os dados do arquivo...

 

troque isso

$dest = $imgs."/".$file_name;
move_uploaded_file($file, $dest)

por isso

$dest = $imgs."/".$file["name"];
move_uploaded_file($file["tmp_name"], $dest)

desative register_globals e veja se funciona...

 

mais informações:

http://www.php.net/manual/pt_BR/language.v...uperglobals.php

 

dá uma lidaí...

Compartilhar este post


Link para o post
Compartilhar em outros sites

para adaptá-lo, inicialmente resgate todos os dados utilizando a variáveis SUPERGLOBAIS ($_POST, $_GET, etc...)

 

no seu form tem os campos, titulo, descricao, file

 

resgate-os, assim:

 

$titulo = $_POST["titulo"];
   $desc = $_POST["descricao"];
   $file = $_FILES["file"];

* Campos do tipo file, retornam um array com os dados do arquivo...

 

troque isso

$dest = $imgs."/".$file_name;
   move_uploaded_file($file, $dest)

por isso

$dest = $imgs."/".$file["name"];
   move_uploaded_file($file["tmp_name"], $dest)

desative register_globals e veja se funciona...

 

mais informações:

http://www.php.net/manual/pt_BR/language.v...uperglobals.php

 

dá uma lidaí...

Opa, valeu pela força, foi mal não ter voltado antes, estive ausente uns dias

 

então, tentei aqui, porém também não deu certo...

 

o cod ficou assim:

<?
 include("../dados.php");
 
 $titulo = $_POST['titulo']; 
 $descricao = $_POST['descricao']; 
 $file = $_FILES["file"];
 $data = date("d/m/Y \à\s H:i:s");
 
 $existe = mysql_query("SELECT * FROM fotos WHERE titulo = '$titulo'");
 $contar = mysql_num_rows($existe);
 if($contar > 0) {
 echo "<div align=center><font size=1 face=verdana>
 
 Já existe uma foto registrada com o nome: <b>$titulo</b></font></div>";
 }else{
 
 //Variável que guardará o local onde o arquivo será enviado
 $imgs = "show";
 $dest = $imgs."/".$file_name;
 
 
 
 if(!move_uploaded_file($file["tmp_name"], $dest)){
 echo "<div align=center><font size=1 face=verdana>Não foi possível fazer upload! Arquivo inválido.
 
 <a href=java script:history.back();>Voltar</a></font></div>";
 }else{
 
 $img_enviada = "show/$file_name";
 $sql = "INSERT INTO fotos ( titulo, descricao, data, img) VALUES ( '$titulo' ,'$descricao' , '$data', '$img_enviada')";
 if(mysql_query($sql)) {
 echo "<div align=center><font size=1 face=verdana>
 
 Cadastro efetuado com sucesso!
 
 <a href=java script:history.back();>Voltar</a></font></div>";
 }else{
 echo "<div align=center><font size=1 face=verdana>
 
 Não foi possivel cadastrar!
 
 <a href=java script:history.back();>Voltar</a></font></div>";
 }
   }
	}
 
 ?>

o erro:

Warning: move_uploaded_file(show/) [function.move-uploaded-file]: failed to open stream: Is a directory in /home/grantelmateriais/www/admin/inserir_show.php on line 21

 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/var/lib/php/phpPMbpGB' to 'show/' in /home/grantelmateriais/www/admin/inserir_show.php on line 21

alguma luz rs

 

valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

$file_name só irá funcionar se REGISTER_GLOBALS estivar ativada...

faça assim...

 

$file = $_FILES["file"];
$file_name = $file["name"];

tentaí..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! legal agora funcionou hehehehhe

 

aproveitando a boa vontade sem querer abusar rs

 

tenho também um arquivo que edita o conteúdo inserido, porém o mesmo não funcionou com a alteração...

segui o mesmo procedimento para o arquivo de inclusão

 

<?
include("../dados.php");

$titulo = $_POST['titulo']; 
$descricao = $_POST['descricao']; 
$file = $_FILES["file"];
$file_name = $file["name"];


$imgs = "imgs";
$dest = $imgs."/".$file_name;


if(!move_uploaded_file($file["tmp_name"], $dest)){
echo "<div align=center><font size=1 face=verdana>Não foi possível fazer upload! Arquivo inválido.<br><br><a href=java script:history.back();>Voltar</a></font></div>";
}else{

$img_enviada = "imgs/$file_name";


$x = mysql_query("UPDATE fotos SET titulo='$titulo', descricao='$descricao', img='$img_enviada' WHERE id='$id';"); 
if($x){ 
echo"cadastro editado com sucesso";
}else{
echo"o arquivo nao pode ser editado";
}
}
?>

ele faz o upload e indica que o cadastro foi editado porém não faz a alteração no banco de dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que passar o id do cadastro...

$x = mysql_query("UPDATE fotos SET titulo='$titulo', descricao='$descricao', img='$img_enviada' WHERE id='$id';");

você usa a $id mas ela não existe no seu código...

 

caso você utilize um formulário para editar o cadastro, inclua um input hidden nele para passar o id do cadastro...

 

supondo que você acesse o arquivo "editar.php" assim, editar.php?id=5, só um exemplo...

 

no editar.php

$id = $_GET["id"];

aí você criará um input hidden para pegar essa id e passar para o arquivo que atualiza (o seu código aí acima)...

 

<input type="hidden" name="id" value="<?php echo $id; ?>" />

aí no arquivo que atualiza, você resgata o id...

$id = $_POST["id"]; // o restata o id que está no input hidden

espero ter ajudado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

heheheheh

 

funcionou!!

 

valeu cara! te devo uma cervejada kkkk

 

valeu a força, precisando tamo ai

 

 

Poderia colocar os arquivos finais aqui no tópico? não estou conseguindo montar os arquivos!

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.