Annyh 4 Denunciar post Postado Maio 18, 2010 falai meninos... tenho um form para fazer upload de imagens, e estou querendo usar o md5() e o time() para renomear o arquivo para gravar no banco de dados, mas quando faço isso a extensão da imagem não vai para o banco, aparece assim: c5e1995e80c0b8b2cdfa763acaa369f8 como devo proceder para a extensão aparecer..? meu code <?php // Incluir o arquivo conecta.php que faz a conexão com o banco de dados include "conecta.php" ; //Dou um Extract e jogo o valor dentro da variavel $arq1 extract($_POST); $diretorio = 'fotos/'; $nome = strtolower($_FILES['imagem']['name']); $tmp = $_FILES['imagem']['tmp_name']; $ok = 0; $erro = 0; $data_hora = date("Y-m-d H:i:s"); if(!empty($_FILES['imagem']['name'])) { if(move_uploaded_file($tmp, $diretorio.$nome)) { $sql = "INSERT INTO galeria_fotos (imagem, data_hora) VALUES ('$nome', '$data_hora')"; mysql_query ($sql) or die (mysql_error()); $ok++; } else { $erro++; } } if (isset($ok) && isset($erro)) { echo "Nome do arquivo: $nome <br />"; echo "Arquivos enviados: $ok <br />"; echo "Arquivos não enviados: $erro"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Maio 18, 2010 'retire' a extesão, antes de renomear, e então depois concatene antes de gravar no banco. pode fazer isso com explode, ou de diversas outras formas. pesquise, estude, tente fazer. Compartilhar este post Link para o post Compartilhar em outros sites
Annyh 4 Denunciar post Postado Maio 18, 2010 poxa William, da uma ajudinha... please. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Maio 18, 2010 script: http://forum.imasters.com.br/index.php?/topic/395342-upload-multiplo-de-fotos/page__p__1544152entry1544152 alteração: for( $i=0; $i<count( $_FILES['foto'] ); $i++ ) { //$novo_nome = remove_acentos( $_FILES['foto']['name'][$i] ); $novo_nome = md5( $_FILES['foto']['name'][$i] ).getExt( $_FILES['foto']['name'][$i] );//renomear e pegar a extensão move_uploaded_file( $_FILES['foto']['tmp_name'][$i], $caminho.$novo_nome ); $sql = ( !empty($_FILES['foto']['name'][$i]) ) ? "INSERT INTO imagens ( id, url ) VALUES (NULL, '{$novo_nome}')" : ''; echo $sql, '<br />';//uma linha para cada foto $campos .= ( !empty($_FILES['foto']['name'][$i]) ) ? "'{$novo_nome}', " : "'', "; }função para pegar a extensão: function getExt( $file ){ $fim = explode( '.', $file ); return strtolower( '.'.end( $fim ) ); } 'ajudar', é diferente de 'fazer para você', nesse caso, tinhamos 3 dúvidas semelhantes, então, fica ai um exemplo de script funcionando. Compartilhar este post Link para o post Compartilhar em outros sites
Annyh 4 Denunciar post Postado Maio 18, 2010 obrigada Willian, consegui fazer de um jeito diferente... <?php include "conecta.php" ; extract($_POST); $_UP['diretorio'] = 'fotos/'; $_UP['tamanho'] = 1024 * 1024 * 2; $_UP['extensao'] = array ('jpg','jpeg','png','gif'); $_UP['renomeia'] = true; $_UP['errors'][0] = 'Não houve erro'; $_UP['errors'][1] = 'A pasta não foi encontrada'; $_UP['errors'][2] = 'O tamanho da imagem é maior que o permitido'; $_UP['errors'][3] = 'As extensões permitidas são: jpg, jpeg, png, gif'; $_UP['errors'][4] = 'Imagem já existe...'; if ($_FILES['imagem']['errors'] != 0) { die ("Não foi possível enviar sua imagem, o erro foi:" . $_UP['errors'][$_FILES['imagem']['errors']]); exit; } $extensao = strtolower(end(explode('.', $_FILES['imagem']['name']))); if (array_search($extensao, $_UP['extensao']) === false) { echo "Formato de imagem não válido, envie no formato: jpg, png e gif..."; } elseif ($_UP['tamanho'] < $_FILES['imagem']['size']) { echo "O arquivo não pode ter mais de 2mb"; } else { if ($_UP['renomeia'] == true) { $nome_final = md5(time()).'.png'; } else { $nome_final = $_FILES['imagem']['name']; } $data_hora = date("Y-m-d H:i:s"); $tam_name = getimagesize($_FILES['imagem']['tmp_name']); if ($tam_name[0] > 600) { echo "A imagem de ter largura máxima de 600..."; } elseif ($tam_name[1] > 550) { echo "A imagem de ter altura máxima de 550..."; } else { if (move_uploaded_file($_FILES['imagem']['tmp_name'], $_UP['diretorio'].$nome_final)) { $cadastro = mysql_query("INSERT INTO galeria_fotos (imagem, data_hora) VALUES ('$nome_final','$data_hora')"); if ($cadastro == 1) { echo "Sucesso..."; } else { echo "Erro no cadastro da imagem..."; } } } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 18, 2010 Eu só não usaria um explode() para pegar a extensão. Faria combinando substr() com stpos(): function getExtension( $filename ) { return substr( $filename, strpos( $filename, '.' ) + 1 ); } Ou usaria pathinfo() com a flag PATHINFO_EXTENSION: function getExtension( $filename ) { return pathinfo( $filename, PATHINFO_EXTENSION ); } ;) Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Maio 19, 2010 Faria combinando substr() com stpos(): Para ficar melhor ainda, eu substuiria o strpos() por strrpos(). Eu faria isso por este caso: function getExtension( $filename ) { return substr( $filename, strpos( $filename, '.' ) + 1 ); } echo getExtension( 'arquivo.video.xvid.avi' ); Retorno: video.xvid.avi Se utilizado strrpos(), o retorno fica esse: avi Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Maio 19, 2010 Curiosidade minha, e pq vcs não usariam o explode() ?? o único problema do pathinfo(), é que já estive em servidores ruins, mal configurados, e essa função, não estava completamente implementada, então o explode(), com end(), foi a solução mais simples e 'cross server' que achei. Agora eu gostaria de ouvir os motivos, do 'pq não usar explode()' :lol: Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Maio 19, 2010 Eu fiz benchmark bem simples aqui William e os resultados foram esses: 0.030183172225952 (substr e strrpos) 0.051702511310577 (pathinfo) 0.055797123908997 (explode) O método que realizei foi um for() com 10000 iterações, onde dentro desse for() executei cada uma das funções postadas (cada função foi executada em 3 arquivos diferentes). E fiz outro for() que engloba esse primeiro for que disse, agora com 20 iterações. Esse segundo for() é responsável por fazer uma média entre os resultados do primeiro for(), assim o resultado final é um pouco mais confiável. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 19, 2010 Opa, acho que comi um R :P De fato o certo é com strrpos() mesmo. Compartilhar este post Link para o post Compartilhar em outros sites