Beto Lima 0 Denunciar post Postado Setembro 26, 2008 Pessoal estou com um problema no envio de imagens por uploads multiplos... Não sei o que é, pode ser um problema no array ou em algum laço. O fato é que não consegui resolver.... No mysql ele insere as fotos (imagen original e thumb da mesma) INSERT INTO `galeria` (`id`, `grande`, `pequena`, `album`, `descricao`) VALUES (231, 'imagem_1222441116.jpg', 'thumb_1222441116.jpg', '1', 'descrição da foto'), (232, 'imagem_1222441117.jpg', 'thumb_1222441117.jpg', '2', 'descrição da foto'), (233, 'imagem_1222441118.jpg', 'thumb_1222441118.jpg', '3', 'descrição da foto'), (234, 'imagem_1222441118.jpg', 'thumb_1222441118.jpg', '2', 'descrição da foto'), (235, 'imagem_1222441119.jpg', 'thumb_1222441119.jpg', '1', 'descrição da foto'); Essas inserções eu fiz pelo form com upload multiplo, note que os ids 233 e 234 possuem o mesmo nome de imagem e thumb. E é esse o problema que ta pegando, as vezes eles se duplicam nos primeiros ids e outras nos ids finais... Se alguém puder me ajudar agradeço. vou postar meu cód abaixo: index.php <?php require_once ("class_upload.php"); $upload = new Upload(); $file=isset($_FILES['arquivo']) ? $_FILES['arquivo']['tmp_name'] : FALSE; if($file!=FALSE){ $cn=count($file); for($i=0;$i<$cn;$i++){ if($file[$i]{1}){ $upload->Envia_Arquivo("$i"); } } } ?> <html> <head> <title>Upload de imagens</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <table align="center" width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td align="left"> <form action="index.php" method="post" enctype="multipart/form-data" name="form1" id="form1"> <input name="arquivo[]" type="file" id="arquivo[]" /><br> <textarea name="descricao[]" rows="2" id="descricao[]"></textarea><br><br> <input name="arquivo[]" type="file" id="arquivo[]" /><br> <textarea name="descricao[]" rows="2" id="descricao[]"></textarea><br><br> <input name="arquivo[]" type="file" id="arquivo[]" /><br> <textarea name="descricao[]" rows="2" id="descricao[]"></textarea><br><br> <input name="arquivo[]" type="file" id="arquivo[]" /><br> <textarea name="descricao[]" rows="2" id="descricao[]"></textarea><br><br> <input name="arquivo[]" type="file" id="arquivo[]" /><br> <textarea name="descricao[]" rows="2" id="descricao[]"></textarea><br><br> <br> <label>Selecione o Album <select name="seleciona_album" id="seleciona_album"> <option>Selecione</option> <?php $q = "SELECT * FROM album ORDER BY id ASC"; $d = mysql_query($q); while($r = mysql_fetch_array($d)) echo '<option value="'.$r['id'].'">'.$r['album'].'</option>'; ?> </select> </label> <input type="submit" name="Submit" value="Enviar"> </form> </td> </tr> </table> </body> </html> class_upload.php <?php $_host = "localhost"; $_user = "root"; // usuário $_pass = ""; // senha $_db = "galeria"; // banco de dados mysql_pconnect($_host, $_user, $_pass) or trigger_error(mysql_error(),E_USER_ERROR); mysql_select_db($_db); ?> <?php set_time_limit(0); include "funcoes.php"; class Upload { var $arquivo = ""; var $erro = array ( "0" => "<script language=javascript>window.alert('\"Foto Enviada com sucesso!\"') </script>", "1" => "<script language=javascript>window.alert('\"O arquivo é maior que o permitido pelo Servidor!\"') </script>", "2" => "<script language=javascript>window.alert('\"O arquivo é maior que o permitido pelo formulario!\"') </script>", "3" => "<script language=javascript>window.alert('\"O upload do arquivo foi feito parcialmente!\"') </script>", "4" =>"<script language=javascript>window.alert('\"Não foi feito o upload do Arquivo!\"') </script>"); function Verifica_Upload($z="0") { $this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE; if(!is_uploaded_file($this->arquivo['tmp_name'][$z])) { return false; } $get = getimagesize($this->arquivo['tmp_name'][$z]); if(($get["mime"] != "image/jpeg") AND ($get["mime"] != "image/gif") AND ($get["mime"] != "image/png")) { echo "<span style=\"color: white; border: solid 1px; background: red;\">Esse arquivo nao é uma imagem válida</span>"; exit; } return true; } function Envia_Arquivo($z="0") { if($this->Verifica_Upload($z)) { $this->gera_fotos($z); return true; } else { echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$this->arquivo['error']]."</span>"; } } function gera_fotos($z="0") { $diretorio = "images/"; $diretorio_g = "images/big/"; $diretorio_p = "images/small/"; if(!file_exists($diretorio)) { mkdir($diretorio); } if(!file_exists($diretorio_g)) { mkdir($diretorio_g); } if(!file_exists($diretorio_p)) { mkdir($diretorio_p); } $get2 = getimagesize($this->arquivo['tmp_name'][$z]); /* Vai servir para verificar se eh GIF ou JPG ou PNG*/ $aux_tipo_imagem = $get2["mime"]; /* Vai servir para verificar se eh GIF ou JPG ou PNG*/ if ($aux_tipo_imagem == "image/jpeg") { $nome_foto = "imagem_".time().".jpg"; $nome_thumb = "thumb_".time().".jpg"; //determino uma resolução maxima e se a imagem for maior ela sera reduzida reduz_imagem_jpg($this->arquivo['tmp_name'][$z], 500, 400, $diretorio_g.$nome_foto); //passo o tamanho da thumbnail reduz_imagem_jpg($this->arquivo['tmp_name'][$z], 150, 150, $diretorio_p.$nome_thumb); } if ($aux_tipo_imagem == "image/gif") { $nome_foto = "imagem_".time().".gif"; $nome_thumb = "thumb_".time().".gif"; //determino uma resolução maxima e se a imagem for maior ela sera reduzida reduz_imagem_gif($this->arquivo['tmp_name'][$z], 500, 400, $diretorio_g.$nome_foto); //passo o tamanho da thumbnail reduz_imagem_gif($this->arquivo['tmp_name'][$z], 150, 150, $diretorio_p.$nome_thumb); } if ($aux_tipo_imagem == "image/png") { $nome_foto = "imagem_".time().".png"; $nome_thumb = "thumb_".time().".png"; //determino uma resolução maxima e se a imagem for maior ela sera reduzida reduz_imagem_png($this->arquivo['tmp_name'][$z], 500, 400, $diretorio_g.$nome_foto); //passo o tamanho da thumbnail reduz_imagem_png($this->arquivo['tmp_name'][$z], 150, 150, $diretorio_p.$nome_thumb); } echo "<span style=\"color: white; border: solid 1px; background: purple;\">".$this->erro[$this->arquivo['error'][$z]]."</span>"; $descricao= $_POST['descricao'][$z]; // Isso aqui faz gravar o nome do arquivo no banco de dados, lembrando que você deve fazer a conexao antes... :D mysql_query("INSERT INTO galeria SET grande='$nome_foto', pequena='$nome_thumb', descricao='$descricao', album='".$_POST['seleciona_album']."'"); } } ?> e por último o arquivo funcoes.php <?php //######################## Função para imagem JPG ########################### function reduz_imagem_jpg($img, $max_x, $max_y, $nome_foto) { //pega o tamanho da imagem ($original_x, $original_y) list($width, $height) = getimagesize($img); $original_x = $width; $original_y = $height; // se a largura for maior que altura if($original_x > $original_y) { $porcentagem = (100 * $max_x) / $original_x; } else { $porcentagem = (100 * $max_y) / $original_y; } $tamanho_x = $original_x * ($porcentagem / 100); $tamanho_y = $original_y * ($porcentagem / 100); $image_p = imagecreatetruecolor($tamanho_x, $tamanho_y); $image = imagecreatefromjpeg($img); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height); return imagejpeg($image_p, $nome_foto, 70); } //######################## Função para imagem GIF ########################### function reduz_imagem_gif($img, $max_x, $max_y, $nome_foto) { //pega o tamanho da imagem ($original_x, $original_y) list($width, $height) = getimagesize($img); $original_x = $width; $original_y = $height; // se a largura for maior que altura if($original_x > $original_y) { $porcentagem = (100 * $max_x) / $original_x; } else { $porcentagem = (100 * $max_y) / $original_y; } $tamanho_x = $original_x * ($porcentagem / 100); $tamanho_y = $original_y * ($porcentagem / 100); $image_p = imagecreatetruecolor($tamanho_x, $tamanho_y); $image = imagecreatefromgif($img); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height); return imagegif($image_p, $nome_foto, 70); } //######################## Função para imagem PNG ########################### function reduz_imagem_png($img, $max_x, $max_y, $nome_foto) { //pega o tamanho da imagem ($original_x, $original_y) list($width, $height) = getimagesize($img); $original_x = $width; $original_y = $height; // se a largura for maior que altura if($original_x > $original_y) { $porcentagem = (100 * $max_x) / $original_x; } else { $porcentagem = (100 * $max_y) / $original_y; } $tamanho_x = $original_x * ($porcentagem / 100); $tamanho_y = $original_y * ($porcentagem / 100); $image_p = imagecreatetruecolor($tamanho_x, $tamanho_y); $image = imagecreatefrompng($img); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height); return imagepng($image_p, $nome_foto, 70); } ?> as tabelas aqui: CREATE TABLE `album` ( `id` int(10) NOT NULL auto_increment, `album` varchar(60) NOT NULL, `capa` varchar(100) default NULL, `mostra` varchar(3) NOT NULL, `data_criacao` date NOT NULL, `taime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13; -- -- Extraindo dados da tabela `album` -- INSERT INTO `album` (`id`, `album`, `capa`, `mostra`, `data_criacao`, `taime`) VALUES (1, 'album1', 'thumb_1222476832.jpg', '2', '2008-10-05', '2008-10-10 18:00:44'); -- -------------------------------------------------------- -- -- Estrutura da tabela `galeria` -- CREATE TABLE `galeria` ( `id` int(10) NOT NULL auto_increment, `grande` varchar(100) NOT NULL, `pequena` varchar(100) NOT NULL, `album` varchar(450) NOT NULL, `descricao` varchar(50) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=267; já populei a tabela album pra não precisar criar depois.... Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Setembro 28, 2008 Pessoal, alguém poderia me dar um help nisso acima? Compartilhar este post Link para o post Compartilhar em outros sites
ramonszo 0 Denunciar post Postado Setembro 28, 2008 oi, nao intendi muito bem, mais aí vai uma observação: se reparar bem ali, o album do 234 é diferente do 233... Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Setembro 28, 2008 234 e 233 são os mesmos veja: imagem_1222441118.jpg', 'thumb_1222441118.jpg imagem_1222441118.jpg', 'thumb_1222441118.jpg Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Setembro 28, 2008 não há problema com a coluna album, o problema deve ser o array acho eu, porque ele ta inserindo imagens com o mesmo nome em ids diferentes....é isso que ta pegando Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Setembro 29, 2008 Pessoal, alguém por acaso sabe onde está o erro? O porquê das imagens ficarem com o mesmo nome na hora do up? Compartilhar este post Link para o post Compartilhar em outros sites
Diogo Lanna 0 Denunciar post Postado Setembro 30, 2008 você modifica os nomes das imagens pra dar o INSERT ?? pelo que vi você so insere o imagem_ e thumb_, no minimo você ta fazendo o upload de 2 imagens de nomes iguais ... crie uma função pra gerar uma string randomida, deve resolver ... Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Setembro 30, 2008 o php modifica os nomes das imagens antes do insert. se eu fizer upload um por vez, ignorando os outros inputs, dae funciona. Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Setembro 30, 2008 pode apenas concatenar ao nome a data hora do sistema ao nome original da imagem ou parte dele que nao repetirá nomes mais Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Outubro 1, 2008 mas acontece que além disso, somente é upada a imagem com último nome. Ex: se existe duas duplicadas id1 - imagem1224.jpg id2 - imagem1224.jpg ele upa a imagem do id2 no caso, insere as duas no banco mas descarta a primeira foto. Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Outubro 1, 2008 é justamente por isso que precisa renomear a todas pois existe a possibilidade de serem upadas imagens diferentes com o mesmo nome voce nao pode permitir que o seu sistema tenha esta falha infantil Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Outubro 1, 2008 Caro Mario; id1 - imagem1224.jpg id2 - imagem1224.jpg já é a consulta da tabela. Os nomes originais das imagens eram outros bem diferentes.... Por acaso você consegue achar se existe algum erro no class.upload.php que está no post? Abraço Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Outubro 1, 2008 vou tentar explicar mais uma vez o que estou sugerindo e o que voce fez até o momento entendi que voce ja substituiu mas mesmo assim voce correr o risco de ter nomes repetidos minha sugestao é que use para o nome da imagem a concatenação do nome original ou parte dele com a data hora de insercao assim elimina a chance de ter imagens com nomes iguais Exemplo Imagem uppada as 20:30:12 do dia 30/09/2008 com o nome original de mario.jpg Ficaria 20080930233012mario.jpg ou outra combinacao destes dados como 2008_09_30_20_30_12 Utilizei este padrao de ordem dos valores pois assim a ordm alfabetica será a mesma ordem de criacao Assim mesmo que depois voce up outra imagem com o nome mario.jpg as 07:53:01 do dia 02/10/2008 os nomes nao serao repetidos pois será 20081002075301mario.jpg Entende agora? Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Outubro 1, 2008 Entende agora? Ele não sei mário, mas eu entendi e estava pensando em desenvolver um código desses com upload de mais de uma imagem E ta na mão olha o ctrl+c + ctrl+v http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Outubro 1, 2008 logico que existem outras formas como nomes randomicos e voce apenas antes de grava testa se ja nao tem outro existente so nao pode deixar repetir de modo algum Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Outubro 2, 2008 Entendi Mário; vou tentar adaptar o cód pra isso... Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Outubro 2, 2008 De nada Qualquer coisa poste Compartilhar este post Link para o post Compartilhar em outros sites
Beto Lima 0 Denunciar post Postado Outubro 13, 2008 Desculpem pessoal, mas não consegui ainda... no class_upload.php tem um trecho do cód onde ele pega o nome da imagem e mescla com o time... if ($aux_tipo_imagem == "image/jpeg") { $nome_foto = "imagem_".time().".jpg"; $nome_thumb = "thumb_".time().".jpg"; //determino uma resolução maxima e se a imagem for maior ela sera reduzida reduz_imagem_jpg($this->arquivo['tmp_name'][$z], 500, 400, $diretorio_g.$nome_foto); //passo o tamanho da thumbnail reduz_imagem_jpg($this->arquivo['tmp_name'][$z], 150, 150, $diretorio_p.$nome_thumb); } tentei alterar para: if ($aux_tipo_imagem == "image/jpeg") { $nome_foto = "imagem_".microtime().".jpg"; $nome_thumb = "thumb_".microtime().".jpg"; //determino uma resolução maxima e se a imagem for maior ela sera reduzida reduz_imagem_jpg($this->arquivo['tmp_name'][$z], 500, 400, $diretorio_g.$nome_foto); //passo o tamanho da thumbnail reduz_imagem_jpg($this->arquivo['tmp_name'][$z], 150, 150, $diretorio_p.$nome_thumb); } Ele até gerou as 5 imagens mas dae veio outro problema, na coluna onde é salva o nome da imagem fica com nome diferente da coluna onde é salva a thumb. (isso estou falando de 1 registro). Dae da pau na hora de exibir as imagens, pq a thumb não localizara a original porque estão com nomes diferentes... Se pelo menos ele mantivesse o mesmo nome da coluna imagem pra coluna thumb, seria perfeito... (isso pra cada registro) Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Outubro 21, 2008 Opá amigo só agora pude da uma olhada, esse programa muito rápido, fiz um teste com 5 imagens de 70 bytes cada , somente com time e gera nas nas duas colunas e nas 5 linhas o mesmo nome para as imagens agora não vejo problema em colocar nomes difrentes nas imagens pois fiz o teste aqui e puxa na boa, bom eu tou puxando pelo id da imagem não sei voce :blink: e fiz o seguinte uniqid(time()) http://www.php.net/uniqid sem erro http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites