Ir para conteúdo

POWERED BY:

Arquivado

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

Jah'rakal

[Resolvido] Problema com repetição de classe

Recommended Posts

Tenho um código com uma classe (que não é de minha autoria).

Se faço, nesse código, a execução da classe uma única vez, tudo ocorre bem. Quando tento repetir o uso da classe no mesmo código acusa erro, mas não sei o por que.

A classe faz upload de um arquivo.

O que tento fazer é executar a classe duas vezes para o upload de dois arquivos, e assim por diante.

 

Aqui vai o codigo:

http://pastebin.com/d5ff15969

 

O problema está na repetição (linhas 90 a 103).

 

Vlws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seja bem vindo ao fórum. Sugiro que leia o tópico de orientações para uma boa participação, em especial sobre postar os erros que aparecem.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem...

Os erros são:

 

 

Notice: Undefined variable: senha in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\conecta.php on line 8

 

Notice: Undefined offset: 6 in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\content\produtos\controle\insere.php on line 53

 

Notice: Undefined offset: 6 in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\content\produtos\controle\insere.php on line 53

 

Notice: Undefined offset: 6 in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\content\produtos\controle\insere.php on line 53

Erro ao carregar a imagem!

 

 

Não tenho (não que eu lembre) nenhuma variavel "senha" na linha 8, e nem em qualquer outro lugar do codigo.

Quanto aos outros erros - todos relacionados á linha 53 - não consegui ver nada de errado.

 

Vlw pela dica desse "indicador de erros", nao conhecia isso.

Vlws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

49-#loop para verificação da extensão

50-for($i=0;$i<=count($tipos);$i++){

51-

52- #verifica se extensões permitidas e igual a do arquivo

53- if($tipos[$i] == $this->tipo){

54- $extensaoPermitida=true;

55- }

56-}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um debug, procurando por inconsistências. Execute um var_dump da $tipos antes de entrar no for e veja se identifica o erro. Caso contrário, poste o resultado do var_dump aqui, para que possamos verificar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

array(6) { [0]=> string(4) ".bmp" [1]=> string(4) ".jpg" [2]=> string(4) ".JPG" [3]=> string(5) ".jpeg" [4]=> string(4) ".png" [5]=> string(4) ".gif" }

Notice: Undefined offset: 6 in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\content\produtos\controle\insere.php on line 55

array(6) { [0]=> string(4) ".bmp" [1]=> string(4) ".jpg" [2]=> string(4) ".JPG" [3]=> string(5) ".jpeg" [4]=> string(4) ".png" [5]=> string(4) ".gif" }

Notice: Undefined offset: 6 in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\content\produtos\controle\insere.php on line 55

array(6) { [0]=> string(4) ".bmp" [1]=> string(4) ".jpg" [2]=> string(4) ".JPG" [3]=> string(5) ".jpeg" [4]=> string(4) ".png" [5]=> string(4) ".gif" }

Notice: Undefined offset: 6 in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\content\produtos\controle\insere.php on line 55

Erro ao carregar a imagem!

 

Cara.. o lance das arrays....

nao consegui entender o pq de incluir dois tipos de string na verificação, acho q seja esse o problema, mas nao sei o q fazer

 

Vlws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está no for... Olha só...

 

for($i=0;$i<=count($tipos);$i++){

Qual o valor que recebe count($tipos)? 6, porque existem 6 índices no array. Quantas vezes o for é executado? 7. Porque? Quando $i = 6, a condição continua sendo verdadeira (6 <= 6), mas não existe o array de indice 6. Aí dá o erro. Então, para corrigir, você tira o = do <=, deixando só <.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Recebi esse erro:

 

Notice: Undefined offset: 6 in C:\Documents and Settings\Cliente\Meus documentos\Rubens\xampp\htdocs\main\content\produtos\controle\insere.php on line 52

 

(ta repetindo o erro sem parar)

Compartilhar este post


Link para o post
Compartilhar em outros sites


#loop para verificação da extensão

for($i=0;$i=count($tipos);$i++){

#verifica se extensões permitidas e igual a do arquivo

if($tipos[$i] == $this->tipo){

$extensaoPermitida=true;

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você fez ao contrário. TIRE o = e DEIXE o <. É importante que você ENTENDA o que eu expliquei. Não faça apenas a alteração. Compreenda o erro:

 

if($tipos[$i] == $this->tipo){
Quando $i receber o valor de 6 (que no seu código corrigido ficou sempre, porque você atribuiu), o PHP procura a $tipos[6], que não existe (porque só existe até o $tipos[5]). Por isto aparece o erro citado, avisando que não foi localizado este offset.

 

Compreendeu o erro?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi sim cara, vlw mesmo...

mas... em seguida, recebi um erro de undefined var ($extensaoPermitida), consegui corrigir....

o problema eh que agora estou recebendo um aviso de que as extensoes dos arquivos nao sao permitidas =/

 

veja como ficou:

 

<?php

ini_set('display_errors', true);
error_reporting(E_ALL);

require('../../../conecta.php');

define('DIR_UPLOAD','../dpos/'.$_POST['dpo'].'/'.$_GET['tipo'].'/'); // local onde vai cair o arquivo

class upload{
	public $tipo;
    public $tipos;
   	public $nome;
	public $tamanho;
	public $arquivo;
	
	/**
	* Construtor chama o metodo responsável por
	* tratar e fazer o envio
	*
	* @param array $arquivo
	* @param string $pasta
	* @param array $tipos
	*/
	
	function __construct($arquivo, $pasta, $tipos){
		self::tratamento($arquivo,$tipos,$pasta);
	}
	
	/*
	* Metodo reponsável por tratar e enviar o arquivo
	*
	* @param array $arquivo
	* @param string $pasta
	* @param array $tipos
	*/
	
	function tratamento($arquivo,$tipos,$pasta){
		if(isset($arquivo)){
			#armazena o nome original do arquivo
			$this->nome = $arquivo['name'];
			
			#gera novo nome para o arquivo
			$this->novoNome = date("dmYHis") . strtolower($this->nome);
			
			#Pega extensão do arquivo
			$this->tipo = strrchr($arquivo['name'],".");
			
			$extensaoPermitida = "";
			
			#loop para verificação da extensão
			for($i=0;$i<count($tipos);$i++){
				#verifica se extensões permitidas e igual a do arquivo
				if($tipos[$i] == $this->tipo){
					$extensaoPermitida=true;
				}
			}
			
			if($extensaoPermitida==false){
				echo '<br><br>Extensão do arquivo não permitida!<br>';
				echo '<a href="#">Por favor, repita o processo!</a>';
				exit;
			}
			
			#tenta enviar o arquivo
			if(move_uploaded_file($arquivo['tmp_name'], $pasta . $this->novoNome)){
				#pega o tamanho do arquivo
				$this->tamanho = number_format($arquivo['size']/1024000, 2) . "MB";
				
				$this->fullpath = 'dpos/'.$_POST['dpo'].'/'.$_GET['tipo'].'/'.$this->novoNome;
				
							
			}else{
				echo 'Erro ao carregar a imagem!';
				exit;
			}
		}else{
			include('inserir.php');// Form onde ta o campo file
		}
	}
}

/**
* UTILIZAÇÃO DA CLASSE
*/

#array com as extensões permitidas
$extPermitidas = array('.bmp','.jpg','.JPG','.jpeg','.png','.gif');

#instancia a classe passando os parametros necessários
$objUpload1 = new upload($_FILES['thumb'],DIR_UPLOAD,$extPermitidas);
$path_thumb1 = $objUpload1->fullpath;

if($_FILES['foto1']){
	$objUpload2 = new upload($_FILES['foto1'],DIR_UPLOAD,$extPermitidas);
	$path_thumb2 = $objUpload2->fullpath;
}

if($_FILES['foto2']){
	$objUpload3 = new upload($_FILES['foto2'],DIR_UPLOAD,$extPermitidas);
	$path_thumb3 = $objUpload3->fullpath;
}	

if($_FILES['foto3']){
	$objUpload4 = new upload($_FILES['foto3'],DIR_UPLOAD,$extPermitidas);
	$path_thumb4 = $objUpload4->fullpath;
}	

$data = date('Y/m/d');

$sql = "INSERT INTO produtos (nome, valor, dpo, tipo, define, esp, qtd, atual, thumb, foto1, foto2, foto3)
	VALUES
	('".$_POST['nome']."','".$_POST['valor']."','".$_POST['dpo']."','".$_GET['tipo']."','".$_GET['define']."','".$_POST['esp']."','".$_POST['qtd']."','".$data."','".$path_thumb1."','".$path_thumb2."','".$path_thumb3."','".$path_thumb4."')";

if(mysql_query($sql)){
	echo "<script type=\"text/javascript\">
		  	alert(\"Inserido.\");
			window.location = 'controle.php';
		  </script>\n";
}else {
	echo"<script type=\"text/javascript\">
	     	alert(\"Houve um erro durante a inserção. Tente novamente!\");
			window.location = 'inserir.php';
	     </script>\n";
}

mysql_close($conn);

?>

(agradeço sua paciencia!)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que entendi a lógica, mas tá bem estranha. Você passa um array com os tipos permitidos de arquivos. Aí quer saber se o tipo da imagem é permitido. Para isto, utilize a função in_array que evita o for e alguns ifs.

 

http://br.php.net/in_array

 

Aí você verifica. Se o tipo da imagem NÃO estiver no array de permitidas, exibe a mensagem e pare o processo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu to com uma duvida: Pq eu conseguia, com a configuração inicial do codigo, inserir um arquivo, e só pq eu repeti o uso da classe eu passei a receber esses erros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda não deu =/

 

<?php

ini_set('display_errors', true);
error_reporting(E_ALL);

require('../../../conecta.php');

define('DIR_UPLOAD','../dpos/'.$_POST['dpo'].'/'.$_GET['tipo'].'/'); // local onde vai cair o arquivo

class upload{
	public $tipo;
    public $tipos;
   	public $nome;
	public $tamanho;
	public $arquivo;
	
	/**
	* Construtor chama o metodo responsável por
	* tratar e fazer o envio
	*
	* @param array $arquivo
	* @param string $pasta
	* @param array $tipos
	*/
	
	function __construct($arquivo, $pasta, $tipos){
		self::tratamento($arquivo,$tipos,$pasta);
	}
	
	/*
	* Metodo reponsável por tratar e enviar o arquivo
	*
	* @param array $arquivo
	* @param string $pasta
	* @param array $tipos
	*/
	
	function tratamento($arquivo,$tipos,$pasta){
		if(isset($arquivo)){
			#armazena o nome original do arquivo
			$this->nome = $arquivo['name'];
			
			#gera novo nome para o arquivo
			$this->novoNome = date("dmYHis") . strtolower($this->nome);
			
			#Pega extensão do arquivo
			$this->tipo = strrchr($arquivo['name'],".");
			
			if(in_array("'".$this->tipo."'",$tipos)){
				#tenta enviar o arquivo
				if(move_uploaded_file($arquivo['tmp_name'], $pasta . $this->novoNome)){
					#pega o tamanho do arquivo
					$this->tamanho = number_format($arquivo['size']/1024000, 2) . "MB";
					$this->fullpath = 'dpos/'.$_POST['dpo'].'/'.$_GET['tipo'].'/'.$this->novoNome;
				}else{
					echo 'Erro ao carregar a imagem!';
					exit;
				}
			}else{
				echo '<br><br>Extensão do arquivo não permitida!<br>';
				echo '<a href="javascript:window.history.go(-1);">Por favor, repita o processo!</a>';
				exit;
			}			
		}else{
			include('inserir.php');// Form onde ta o campo file
		}
	}
}

/**
* UTILIZAÇÃO DA CLASSE
*/

#array com as extensões permitidas
$extPermitidas = array(".bmp",".jpg",".JPG",".jpeg",".png",".gif");

#instancia a classe passando os parametros necessários
$objUpload1 = new upload($_FILES['thumb'],DIR_UPLOAD,$extPermitidas);
$path_thumb1 = $objUpload1->fullpath;

if($_FILES['foto1']){
	$objUpload2 = new upload($_FILES['foto1'],DIR_UPLOAD,$extPermitidas);
	$path_thumb2 = $objUpload2->fullpath;
}

if($_FILES['foto2']){
	$objUpload3 = new upload($_FILES['foto2'],DIR_UPLOAD,$extPermitidas);
	$path_thumb3 = $objUpload3->fullpath;
}	

if($_FILES['foto3']){
	$objUpload4 = new upload($_FILES['foto3'],DIR_UPLOAD,$extPermitidas);
	$path_thumb4 = $objUpload4->fullpath;
}	

$data = date('Y/m/d');

$sql = "INSERT INTO produtos (nome, valor, dpo, tipo, define, esp, qtd, atual, thumb, foto1, foto2, foto3)
	VALUES
	('".$_POST['nome']."','".$_POST['valor']."','".$_POST['dpo']."','".$_GET['tipo']."','".$_GET['define']."','".$_POST['esp']."','".$_POST['qtd']."','".$data."','".$path_thumb1."','".$path_thumb2."','".$path_thumb3."','".$path_thumb4."')";

if(mysql_query($sql)){
	echo "<script type=\"text/javascript\">
		  	alert(\"Inserido.\");
			window.location = 'controle.php';
		  </script>\n";
}else {
	echo"<script type=\"text/javascript\">
	     	alert(\"Houve um erro durante a inserção. Tente novamente!\");
			window.location = 'inserir.php';
	     </script>\n";
}

mysql_close($conn);

?>

devo estar fazendo algo de muito errado pq vai direto para o "else" da "if(in_array...)..."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um debug básico. Imprima a variável $this->tipo antes de fazer o in_array. Porque você colocou aquelas aspas? Acho que o problema pode estar ali. Veja se realmente está aparecendo o que era para aparecer.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja o fiz

ja dei um echo na var $this->tipo, e dei um echo em $tipos[0]

 

quando eu dei o echo em $tipos[0], sem "aquelas aspas", o echo retorna: .bmp.bmp.bmp

com as aspas ele retorna .bmp apenas

 

e o $this->tipo esstá retornando o que deve, no caso, .jpg

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.