Jah'rakal 0 Denunciar post Postado Janeiro 31, 2010 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
Matias Rezende 50 Denunciar post Postado Janeiro 31, 2010 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
Jah'rakal 0 Denunciar post Postado Janeiro 31, 2010 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
Matias Rezende 50 Denunciar post Postado Janeiro 31, 2010 Veja que o erro da linha 8 é no arquivo conecta.php. Os outros são na linha 53 do arquivo insere.php. Poste esta linha. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 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
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 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
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 Não pode... Como ficou o seu for? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 #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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 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
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 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
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 Não creio que tenha relação. De qualquer forma, seu código pode ser melhorado, como eu sugeri no post anterior. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 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
Jah'rakal 0 Denunciar post Postado Fevereiro 1, 2010 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
Matias Rezende 50 Denunciar post Postado Fevereiro 1, 2010 Tente o seguinte: if(in_array($this->tipo,$tipos)){ Veja se funciona. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites