Ir para conteúdo

POWERED BY:

Arquivado

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

felipebmfaria

[Resolvido] Erro em alterar.php

Recommended Posts

Oi pessoal,

 

tenho uma tabela com os campos ID, NOME, COMPLETA E ARQUIVO(endereco da foto).

as imgs estao salvas em uma pasta.

 

Arquivo alterar.php

<?php
include "config.php";
$id = (int)$_GET['id'];
$nome = $_POST['nome'];
$completa = $_POST['completa'];

// INICIO UPLOAD
if(isset($_FILES["arquivo"])){

$arquivo = $_FILES["arquivo"];
$pasta_dir = "imgs_artigos/";//diretorio dos arquivos
if(!file_exists($pasta_dir)){
mkdir($pasta_dir);
}
$rand = rand (1,999999999999); // para nao repetir nomes
$arquivo_nome = $pasta_dir . $rand . $arquivo["name"];
move_uploaded_file($arquivo["tmp_name"], $arquivo_nome);
// FIM DO UPLOAD

mysql_query("UPDATE artigos SET nome='$nome', completa='$completa', arquivo='$arquivo_nome' WHERE id ='$id'");
}
?>

So tah rodando legal se eu retirar os seguintes trechos:

 

arquivo='$arquivo_nome'(penultima linha) e todo o trecho do upload.

 

Mas eu preciso do upload do novo arquivo.

 

Qual é o erro?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Altere, por gentileza, sua postagem trocando codebox por code.

 

Obrigado.

 

Assim analisaremos seu código corretamente.

 

Sucesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

se o $ID for valor NUMÈRICO no banco voce não pdoe colocar as aspas simples....

 

Logo pelo visto deve ser isso que esta erraod....

 

Erros comuns com UPLOAD:

 

Esquecer aspas em arquivos TEXTO, DATA

 

Colocar aspas em arquivos INT, DOUBLE

 

Colocar nomes dos campos errados.....

 

 

Esses são os erros mais comuns... verifique tambem se não existe nenhum desses erros????

 

Abraços

 

 

Espero ter ajudado..........

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

se o $ID for valor NUMÈRICO no banco voce não pdoe colocar as aspas simples....

 

Logo pelo visto deve ser isso que esta erraod....

 

Erros comuns com UPLOAD:

 

Esquecer aspas em arquivos TEXTO, DATA

 

Colocar aspas em arquivos INT, DOUBLE

 

Colocar nomes dos campos errados.....

 

 

Esses são os erros mais comuns... verifique tambem se não existe nenhum desses erros????

 

Abraços

 

 

Espero ter ajudado..........

Amigo,

 

Alterar as aspas do $id nao solucionou meu problema... parece que o problema esta no upload, quando retiro o trecho que faz o upload, o arquivo alterar.php funciona normalmente.

 

Percebe algum erro no trecho do upload?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque sua query atual por esta, e cole o erro aqui,caso ocorra:

 

mysql_query("UPDATE artigos SET nome='$nome', completa='$completa', arquivo='$arquivo_nome' WHERE id ='$id'")or die(ERRO ENCONTRADO: '.mysql_error());

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

<?php
include "config.php";
$id = (int)$_GET['id'];
$nome = $_POST['nome'];
$completa = $_POST['completa'];

// INICIO UPLOAD
if(isset($_FILES["arquivo"])){

$arquivo = $_FILES["arquivo"];
$pasta_dir = "imgs_artigos/";//diretorio dos arquivos
if(!file_exists($pasta_dir)){
mkdir($pasta_dir);
}

if (file_exists($pasta_dir . $arquivo["name"])) {
	for ($i=1;$i>0;$i++) {
		$arquivo_nome = $pasta_dir . $i . $arquivo["name"];
		if (!file_exists($arquivo_nome)) {
			break;
		}
	}
} else {
	$arquivo_nome = $pasta_dir . $arquivo["name"];
}

if (move_uploaded_file($arquivo["tmp_name"], $arquivo_nome)) {
	mysql_query("UPDATE artigos SET nome='$nome', completa='$completa', arquivo='$arquivo_nome' WHERE id ='$id'");
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

<?php
include "config.php";
$id = (int)$_GET['id'];
$nome = $_POST['nome'];
$completa = $_POST['completa'];

// INICIO UPLOAD
if(isset($_FILES["arquivo"])){

$arquivo = $_FILES["arquivo"];
$pasta_dir = "imgs_artigos/";//diretorio dos arquivos
if(!file_exists($pasta_dir)){
mkdir($pasta_dir);
}

if (file_exists($pasta_dir . $arquivo["name"])) {
	for ($i=1;$i>0;$i++) {
		$arquivo_nome = $pasta_dir . $i . $arquivo["name"];
		if (!file_exists($arquivo_nome)) {
			break;
		}
	}
} else {
	$arquivo_nome = $pasta_dir . $arquivo["name"];
}

if (move_uploaded_file($arquivo["tmp_name"], $arquivo_nome)) {
	mysql_query("UPDATE artigos SET nome='$nome', completa='$completa', arquivo='$arquivo_nome' WHERE id ='$id'");
}
}
?>

Kamusz,

 

Utilizei o seu codigo... nao consegui efetuar o update... nao ha erros, porem nenhum dos dados eh alterado...

Entendi o esquema que fez para nao sobrescrever nome, bacana...

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara não sei se você mexe com class...

 

vo te passar uma class que eu criei e utilizo bastante nesses momentos...

 

 

upload.php

function upclass_separador($a,$separador = '.') {
	$ext[] = substr($a, 0 ,strrpos($a, $separador));
	$ext[] = strtolower(substr($a, strrpos($a, $separador) + 1));
	return $ext;
}

function upclass_lastchar($a) {
	return substr($a,strlen($a)-1,1);
}


class uploadFile {
	private $arquivo,$uploaddir,$newname,$permitido,$sequenciar;
	
	public function set_file($a) {
		$this->arquivo = $a;
	}
	public function set_dir($a) {
		$this->uploaddir = $a.(upclass_lastchar($a) <> '/' ? '/' : '');
	}
	public function set_newname($a) {
		$this->newname = $a;
	}
	public function set_permitido($a) {
		$this->permitido[] = $a;
	}
	public function set_sequenciar($a) {
		$this->sequenciar = $a;
	}
	
	public function executar() {
		
		if (!$this->arquivo[name]) {
			$retorno[] = "Selecione o arquivo a ser enviado";
			return $retorno;
		}
		
		$split = upclass_separador($this->arquivo[name]);
		
		if (($this->uploaddir) and (!is_dir($this->uploaddir))) {
			mkdir($this->uploaddir);
		}
		
		if ($this->permitido) {
			if (!in_array($split[1],$this->permitido)) {
				$error = "Extensão de arquivo não permitida <b>";
				foreach ($this->permitido as $v) {
					$c++;
					$error .= $v.($c == (count($this->permitido)-1) ? ' e ' : ', ');
				}
				$retorno[] = $error.'</b>';
				return $retorno;
			}
		}
		
		if ($this->sequenciar) {
			if ($this->newname) {
				if (is_file($this->uploaddir.$this->newname.'.'.$split[1])) {
					for($i=0;$i<10000;$i++) {
						$newfile = $this->newname.'['.$i.'].'.$split[1];
						if (!is_file($this->uploaddir.$newfile)) {
							$this->newname = $this->newname.'['.$i.']';
							break;
						}
					}
				}
			} else {
				if (is_file($this->uploaddir.$this->arquivo[name])) {
					for($i=0;$i<10000;$i++) {
						$newfile = $split[0].'['.$i.'].'.$split[1];
						if (!is_file($this->uploaddir.$newfile)) {
							$this->newname = $split[0].'['.$i.']';
							break;
						}
					}
				}
			}
		}
		
		if (move_uploaded_file($this->arquivo[tmp_name],$this->uploaddir.($this->newname ? $this->newname.'.'.$split[1] : $this->arquivo[name]))) {
			return ($this->newname ? $this->newname.'.'.$split[1] : $this->arquivo[name]);
		} else {
			return false;
		}
		
		
	}
	
}
?>

 

para utilizar é bem simples

$obj = new UploadFile();
$obj->set_file($FILES[arquivo]); // Arquivo vindo do formulario upload
$obj->set_dir('DIRETORIO DESTINO'); // Diretório de destino
//$obj->set_newname("NOVO NOME"); // Novo nome SEM EXTENSÃO, opcional manterá a mesma extensão do arquivo enviado
//$obj->set_permitido('jpg'); // Adiciona a array de permissão a extensão jpg, caso não queria restringir não chame está função
//$obj->set_permitido('zip'); // Adiciona a array de permissão a extensão zip
//$obj->set_permitido('rar'); // Adiciona a array de permissão a extensão rar
$obj->set_sequenciar(true); // Para não repetir nomes.
$retorno = $obj->executar(); // Irá retornar uma array se existir erro, ou o nome do arquivo caso esteja correto
echo (is_array($retorno) ? $retorno[0] : $retorno);

 

eu fiz esse código faz um bom tempo já, quando estava aprendendo Classes, pode reparar que nem construct tem =p

mais funciona perfeitamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já pedi que substitua sua query pela que te passei, se possível, e cole aqui o erro, caso seja impresso no navegador.

 

Ow Alaerte, nao tinha visto seu post, desculpe.

Nao ocorrem erros...

Nenhum dado eh alterado e nem o arquivo eh upado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

não esquece de dar o include no arquivo da classe ou adicionar ela no arquivo...

 

esqueci de colocar no post anterior o include

Compartilhar este post


Link para o post
Compartilhar em outros sites

alias a pasta que você está tentando criar o arquivo tem permissão para isso?

 

A unica coisa que pode parar seu código pelo que vi é isso...

 

Veja se tem permissão de escrita na pasta

Compartilhar este post


Link para o post
Compartilhar em outros sites

alias a pasta que você está tentando criar o arquivo tem permissão para isso?

 

A unica coisa que pode parar seu código pelo que vi é isso...

 

Veja se tem permissão de escrita na pasta

Kamusz,

 

Obrigado por compartilhar sua classe comigo, terei que ler depois, pois ainda nao domino classes, e o tempo de conclusao deste trabalho eh curto, mas o seu codigo esta favoritado para que eu possa estudar posteriormente.

O codigo de cadastramento do artigo funciona perfeitamente. O alterar que nao roda. Por isso percebo que nao ha problemas com pasta.

 

estou postando o codigo cadastrar_artigo.php

 

<?php 
$res1 = mysql_connect("localhost", "user", "pswd"); 
if ($res1){

// inicio upload
if(isset($_FILES["arquivo"])){

$arquivo = $_FILES["arquivo"];
$pasta_dir = "imgs_artigos/";//diretorio dos arquivos
if(!file_exists($pasta_dir)){
mkdir($pasta_dir);
}
$rand = rand (1,999999999999);
$arquivo_nome = $pasta_dir . $rand . $arquivo["name"];
move_uploaded_file($arquivo["tmp_name"], $arquivo_nome);

mysql_query("INSERT INTO artigos (arquivo) VALUES ('$arquivo_nome')");
}
// fim do upload
 
$nome = $_POST['nome'];
$completa = $_POST['completa'];
// no alterar.php preciso pegar o $id

$sql = "insert into artigos" 
." (nome, completa, arquivo)" 
." values ('$nome','$completa','$arquivo_nome')"; 
$res2 = mysql_db_query("user", "$sql", $res1); 
if ($res2) 
{ echo("");} 
else 
{ echo("Erro no cadastramento ".mysql_error()." "); } 
} 
else 
{ echo("Erro na tentativa de conexão ".mysql_error()." "); } 
mysql_close($res1); 
?>

<script language="JavaScript">alert('*** Sucesso! ***');
location.href='form_artigos2.php';</script>

 

Tentei adapta-lo para UPDATE ao inves de INSERT, mas nao consegui...

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara 2 perguntas

 

o form da onde vem o arquivo tem o enctype?

 

<form enctype="multipart/form-data">

 

 

e soh pra desencargo, já tive um problema com o isset($_FILES)

 

tenta de seguinte forma, troca

 

if(isset($_FILES["arquivo"])){

 

para

 

if ($_FILES[arquivo][name]) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara 2 perguntas

 

o form da onde vem o arquivo tem o enctype?

 

<form enctype="multipart/form-data">

 

 

e soh pra desencargo, já tive um problema com o isset($_FILES)

 

tenta de seguinte forma, troca

 

if(isset($_FILES["arquivo"])){

 

para

 

if ($_FILES[arquivo][name]) {

Rodou!! Funcionou!!!! Uhhuuuuuuu!!!

Valeu pela dica do isset($_FILES)!!!!! Fiz a troca e deu certo!!!!

Programacao eh manero, mas as vezes eh um pouco engrato neh???

Mas vlw. Mt obrigado pela ajuda.

Abraços.

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.