Ir para conteúdo

POWERED BY:

Arquivado

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

alexandremanowar

[Resolvido] Upload de imagem

Recommended Posts

E a e pessoal beleza

 

Eu criei um código pequeno que armazena dados em um banco mysql usando php e ajax, ele esta armazenando os dados normalmente, porém caso eu queira fazer o updload de imagem durante o armazenamento como eu faria? Seria dentro da pasta image no meu servidor.

 

o código é esse:

 

Form:

<script language="javascript" src="js/VerificaBrownser.js"></script>
<script language="javascript" src="js/substituir_string.js"></script>
<script language="javascript" src="js/armazena_tipo_anunciantes.js"></script>

tipo: <input type="text" name="tipo" id="tipo" />
<input type="submit" value="Armazenar" onClick="btnSalvar()">

Esse é o js:

function btnSalvar()
{

	var txtTipo = document.getElementById("tipo").value;
	
	var erro = 0;
	if(txtTipo.length < 1)
	{
		erro = 1;
	}

	
	if(erro == 1)
	{
		alert("Preencha o campo tipo");
		document.getElementById("tipo").focus();
	}
	if(erro == 0)
	{
	
		ajax.open("POST","includes/armazena_tipo_anunciantes.php",true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.onreadystatechange = function() 
		{
	 
			if(ajax.readyState<4)
			{
				//entrar com o load aqui
				document.getElementById("CarregaLoading").style.display="block";
			}
			
			if(ajax.readyState == 4 ) 
			{
				
				document.getElementById("CarregaLoading").style.display="none";
				document.getElementById("tipo").value = "";
				alert("Dados armazenados com sucesso!")
			}
		}
	
		var params = "txtTipo="+txtTipo;
		ajax.send(params);
	}
}

E esse é o php que armazena

 

<?
	include "session.php";
	include "class.MySQL.php";
	include "QuerySQL.php";
	include "mysql_encoding.php";	
	//chama as class de conexão query
	
	$mySQL = new MySQL;
	$QuerySQL = new QuerySQL;
	
	
	$txtTipo = $_POST["txtTipo"];
	$data = date("Y-m-d");
	$hora = date("H:i:s");
	
	if(!empty($txtTipo))
	{	
		$armazena =  "insert into tipo_anunciante(tipo,data,hora,operador,codigo_operador)values";
		$armazena .="('$txtTipo','$data','$hora','$Logado',$CodigoLogado)";
		$QuerySQL->executeQuery($armazena);
	}
	
	$mySQL->disconnect;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo q e usei não dá pra fazer upload de imagem com ajax..

 

aí se faz uma gambi..que é criar um iframe por exemplo..com um form.. escondidos na tela (com DOM) e enviar a imagem através do form dentro do iframe...

ai parece que á ajax..

 

pelo menos eh isso q eu sei

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae beleza

Valeu pela atenção

Cara fiquei perdidão não conheço iframes rsrsrs, será que você poderia mostrar como faço isso nesse código que postei?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E a e beleza

 

Cara valeu pelo link, estoui tentando fazer um primeiro para aprender se não conseguir vou usar o DOJO, eu fiz um estudando alguns tutoriais, porém não esta funcionando ele simplesmente deixa a tela em branco, olha o código:

 

form:

 

<form name="upload" action="upload.php" method="post" enctype="multipart/form-data" onsubmit="return teste()">
<input type="file" name="arquivo" size="60">
				
<input type="submit" name="enviar" value="Upload!">
</form>

php:

<?php
/* Defina aqui o tamanho máximo do arquivo em bytes: */
if($arquivo_size > 1024000) 
{	
	print "<script> alert('Seu arquivo não poderá ser maior que 1mb'); window.history.go(-1); </SCRIPT>\n";
	exit;
}

/* Defina aqui o diretório destino do upload */

if (!empty($arquivo) and is_file($arquivo)) 
{
	$caminho="teste/";
	$caminho=$caminho.$arquivo_name;

	/* Defina aqui o tipo de arquivo suportado */
	if ((eregi(".gif$", $arquivo_name)) || (eregi(".jpg$", $arquivo_name)))
	{
		copy($arquivo,$caminho);
		print "<h1><center>Arquivo enviado com sucesso!</center></h1>";
	}
	else
	{
		print "<h1><center>Arquivo não enviado!</center></h1>";
		print "<h2><font color='#FF0000'><center>Caminho ou nome de arquivo Inválido!</center></font></h2>";
	}
}
else
{
	echo "lixo";
}



?>

Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei se copy é o mais apropriado pra isso.. tenta usar o move_uploaded_file http://php.net/move_uploaded_file ... pra subir como ajax, como disseram você tem que criar um iframe...

 

e pra funcionar o gerenciamento de arquivos você tem que usar a variavel pre difinida $_FILES http://www.php.net/features.file-upload

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara valeu pela dica analisei o link que você passou e fiz novamente seguindo o tutorial e funcionou, veja o código:

 

form:

<form action="upload.php" method="post" enctype="multipart/form-data">
Enviar o arquivo: <input type="file" name="userfile" size="20"><br>
<input type="submit" value="Enviar">
</form>

código php:

<?
$uploaddir = 'teste/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) 
{

   print "<a class='vermelho2'><center>O ARQUIVO FOI TRANSFERIDO<BR> PARA O SERVIDOR COM SUCESSO!\n</a>";

} else 
{
   print "<a class='vermelho2'><center>O FOTO NÃO PODE SER TRANSFERIDO<BR> POR MOTIVOS DE SEGURANÇA\n</a>";
}
print "</pre>";
?>

Ainda esta mudando de página mas isso vou resolver depois usando o iframe como você disse, minha dúvida agora é a seguinte eu quero que ao subir o arquivo ele seja armazenado com outro nome, como a data por exemplo,é possível, ou seja seleciono o arquivo mando fazer o upload e o nome dele é trocado pela data?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você so precisa alterar o move uploaded file

 

move_uploaded_file ( string $filename , string $destination )

 

o primeiro argumento que você passa é o filename... ou seja, o arquivo que você vai enviar... em caso de upload será sempre o $_FILES['userfile']['tmp_name']

 

o segundo, é o destino, ou seja, onde ele será armazenado... é ai que você muda o nome do arquivo como você deseja...

 

ficaria mais ou menos assim...

 

move_uploaded_file ( $_FILES['userfile']['tmp_name'] , $data );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo entendi! e funcionou, mais uma dúvida é possível fazer o seguinte:

 

1)limitar o tamanho do arquivo par ano máximo 1 mb por exemplo

2) permitir apenas arquivos jpg

 

É possível isso na hora do download?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é possivel sim, verifica no link que fala da variavel $_FILE, la tem como você saber qual é o tamanho do arquivo e tipo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara valeu mesmo pela atenção, esta tudo funcionado vou postar o código completo caso alguém precise.

Vou fazer uma última pergunta que não sei se seria nesse fórum de php mas derrepende quem sabe, a caixa de abrir arquivos permite exibe qualquer aquivo a validação da extenção esta apenas no meu código, é possível que a caixa de abrir arquivos exiba apenas o jpg?

 

Valeu masi uma vez

 

Segue o código:

form:

<form action="includes\upload.php" id="form" name="form" method="post" enctype="multipart/form-data">
Enviar anexo (tamanho máximo de 1 MB; tipos de arquivos permitidos: JPEG):<br />
<input type="file" name="DfAnexo" size="50" />
<input name="submit" type="submit" value="Enviar" class="button" />
<input type="hidden" name="CodigoAnunciante" id="CodigoAnunciante" value="" />
</form>

php:

<?
	$CodigoAnunciante = $_POST["CodigoAnunciante"];
	
	#Declaramos de onde estaremos recebendo o anexo (que será através da variável ($_FILES) de envio de arquivos por HTTP)
	$DfAnexo = $_FILES["DfAnexo"]["name"];

	#Se nenhum arquivo for selecionado para ser enviado, exibe a mensagem de erro abaixo
	if(empty($DfAnexo)) 
	{
		echo "Erro no envio do anexo<br /><br />";
		echo "Nenhum arquivo foi selecionado para ser enviado.";
	}
	#Caso contrário, o arquivo é checado para ser processado
	else 
	{
		#Declaramos um tamanho máximo para o envio do anexo em bytes (setamos como sendo 5120000 bytes (que é igual a 5 MB))
		#Se o anexo for maior que 5 MB, exibe a mensagem de erro abaixo e termina a execução do script
		if($_FILES["DfAnexo"]["size"] > 1024000) 
		{
			echo "Erro no envio do anexo<br /><br />";
			echo "Seu anexo não poderá ser maior que 1 MB!";
			exit;
		}
		#Caso contrário, o arquivo continua a ser processado
		if(!empty($_FILES["DfAnexo"]["tmp_name"]) and is_file($_FILES["DfAnexo"]["tmp_name"])) 
		{
			#Declaramos a pasta aonde o arquivo será salvo (esta pasta deve estar com chmod 777)
			$caminho = "../imagens_anunciantes/";

			#Re-declaramos a pasta aonde o arquivo será salvo, desta vez inserindo junto a ela o nome do arquivo
			$caminho = $caminho.$CodigoAnunciante;

			#Declaramos os tipos de extensões aceitas para o envio do anexo
			if(eregi(".jpg$", $_FILES["DfAnexo"]["name"])) {
				#Copiamos o arquivo para a pasta setada mais acima
				copy($_FILES["DfAnexo"]["tmp_name"],$caminho);

				echo "Envio de anexo<br /><br />";
				echo "Anexo enviado com sucesso!";
			}
			#Se o anexo não tiver uma extensão aceita, exibe a mensagem de erro abaixo e termina a execução do script
			else {
				echo "Erro no envio do anexo<br /><br />";
				echo "Extensão inválida de arquivo!";
				exit;
			}
		}
		#Se o anexo tiver sido indicado através de um caminho inválido ou tenha um nome inválido, exibe a mensagem de erro abaixo e termina a execução do script
		else 
		{
			echo "Erro no envio do anexo<br /><br />";
			echo "Caminho e/ou nome de anexo inválido!";
			exit;
		}
	}

?>

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma dúvida para a galera,

 

sabemos que não é recomendado setar chmod 777 para pastas no serv. pois libera tua pasta para invasão.

 

Mas preciso gerar as imagens, e se não setar 777 o script não consegue gerar.

 

O envio da imagens consegui fazer sem o 777 enviando por ftp (quem quiser eu passo o codigo).

 

Mas gerar imagem com a gd sem liberar 777 tá dificil.

 

Se alguém souber ajuda aeh.

 

valeu pessoal!

 

www.webart.com.br

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.