MBarros 0 Denunciar post Postado Fevereiro 21, 2010 Pessoas, boa noite! MBarros de volta!! Como o titulo e a descrição dizem, tenho uma entrada com um ID gerado e nela possuo 4 imagens dentro de uma pasta. Para enviar as imagens para a pasta determinada e outras infos para o mysql, fiz o seguinte: <?php $numeroCampos = 4; $caminho = "../uploads/"; $substituir = FALSE; $id = $_REQUEST['id']; $nomeArquivo = ($_FILES['imagens']['name']); $titulo = $_REQUEST['titulo']; $resumo = $_REQUEST['resumo']; $producao = $_REQUEST['producao']; $detalhes = $_REQUEST['detalhes']; mysql_connect("localhost","root","") or die ("Não foi possível conectar ao Servidor."); mysql_select_db("lab") or die ("Não foi possível selecionar a base de dados"); for ($i = 0; $i < $numeroCampos; $i++) { $nomeArquivo = $_FILES["imagens"]["name"][$i]; $nomeTemporario = $_FILES["imagens"]["tmp_name"][$i]; $imagens = implode(', ', $_FILES["imagens"]["name"]); if (!empty($nomeArquivo)) { $erro = false; if (file_exists($caminho . $nomeArquivo) AND !$substituir) { $erro = "O arquivo <strong>".$nomeArquivo."</strong> já existe"; } if (!$erro) { move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo)); } } else { echo "Problema"; } } mysql_query("UPDATE `teste` SET id = '$id', imagens = '$imagens', titulo = '$titulo', resumo = '$resumo', producao = '$producao', detalhes = '$detalhes' WHERE id=".$_GET['id']); echo "Arquivos enviados!"; ?> Para exibir as 4 imagens no BD, utilizei: $imagens = implode(', ', $_FILES["imagens"]["name"]); A questão: como deletar as 4 imagens referentes à um ID utilizando unlink? Grato Compartilhar este post Link para o post Compartilhar em outros sites
macielcr7 9 Denunciar post Postado Fevereiro 21, 2010 Simples utilize a fução... unlink Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 21, 2010 liste o diretório, você receberá um array() contendo todos os documentos aplique um foreach() no array() e utilize o unlink() nos $values vindos do array() Compartilhar este post Link para o post Compartilhar em outros sites
macielcr7 9 Denunciar post Postado Fevereiro 21, 2010 vou postar um exemplo aqui... que eu tenho dáiii é só você Ajustar como você queira.!' 1. Banco de dados Vamos criar nossa tabela de usuários: CREATE TABLE `usuarios` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `nome` VARCHAR( 50 ) NOT NULL , `email` VARCHAR( 50 ) NOT NULL , `foto` VARCHAR( 100 ) NOT NULL ) ENGINE = MYISAM ; 2. Formulário de cadastroAgora vamos desenhar nosso formulário e apontar a action para o mesmo arquivo: IMPORTANTE: nunca se esqueça que quando se trata de arquivos, precisamos adicionar ao nosso form a seguinte propriedade: enctype=”multipart/form-data” <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Cadastro de usuário</title> </head> <body> <h1>Cadastro de Usuário</h1> <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="cadastro" > Nome:<br /> <input type="text" name="nome" /><br /><br /> Email:<br /> <input type="text" name="email" /><br /><br /> Foto de exibição:<br /> <input type="file" name="foto" /><br /><br /> <input type="submit" name="cadastrar" value="Cadastrar" /> </form> </body> </html> 3. Cadastrando UsuárioComo a action está apontando para o próprio arquivo, nosso código vai nele mesmo: <?php // Conexão com o banco de dados $conn = @mysql_connect("localhost", "usuario", "senha") or die ("Problemas na conexão."); $db = @mysql_select_db("banco", $conn) or die ("Problemas na conexão"); // Se o usuário clicou no botão cadastrar efetua as ações if ($_POST['cadastrar']) { // Recupera os dados dos campos $nome = $_POST['nome']; $email = $_POST['email']; $foto = $_FILES["foto"]; // Se a foto estiver sido selecionada if (!empty($foto["name"])) { // Largura máxima em pixels $largura = 150; // Altura máxima em pixels $altura = 180; // Tamanho máximo do arquivo em bytes $tamanho = 1000; // Verifica se o arquivo é uma imagem if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){ $error[1] = "Isso não é uma imagem."; } // Pega as dimensões da imagem $dimensoes = getimagesize($foto["tmp_name"]); // Verifica se a largura da imagem é maior que a largura permitida if($dimensoes[0] > $largura) { $error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels"; } // Verifica se a altura da imagem é maior que a altura permitida if($dimensoes[1] > $altura) { $error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels"; } // Verifica se o tamanho da imagem é maior que o tamanho permitido if($foto["size"] > $tamanho) { $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes"; } // Se não houver nenhum erro if (count($error) == 0) { // Pega extensão da imagem preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext); // Gera um nome único para a imagem $nome_imagem = md5(uniqid(time())) . "." . $ext[1]; // Caminho de onde ficará a imagem $caminho_imagem = "fotos/" . $nome_imagem; // Faz o upload da imagem para seu respectivo caminho move_uploaded_file($foto["tmp_name"], $caminho_imagem); // Insere os dados no banco $sql = mysql_query("INSERT INTO usuarios VALUES ('', '".$nome."', '".$email."', '".$nome_imagem."')"); // Se os dados forem inseridos com sucesso if ($sql){ echo "Você foi cadastrado com sucesso."; } } // Se houver mensagens de erro, exibe-as if (count($error) != 0) { foreach ($error as $erro) { echo $erro . "<br />"; } } } } ?>Resumindo, nós pegamos a imagem enviada, verificamos se ela está dentro dos limites permitidos, depois jogamos essa foto na pasta fotos/ do servidor e na tabela de usuários do banco de dados adicionamos as informações do usuário juntamente com o nome da foto.OBS: não esqueça de dar pemissão de gravar na pasta onde serão gravadas as fotos. 4. Exibindo a imagem Agora é simples. Vamos supor que queremos exibir as informações de todos os usuários, incluindo a foto: <?php // Seleciona todos os usuários $sql = mysql_query("SELECT * FROM usuarios ORDER BY nome"); // Exibe as informações de cada usuário while ($usuario = mysql_fetch_object($sql)) { // Exibimos a foto echo "<img src='fotos/".$usuario->foto."' alt='Foto de exibição' /><br />"; // Exibimos o nome e email echo "<b>Nome:</b> " . $usuario->nome . "<br />"; echo "<b>Email:</b> " . $usuario->email . "<br /><br />"; } ?>5. Excluindo imagemE se for necessário excluir um usuário? Simples, utilizamos o comando delete e tudo certo, porém a foto dele vai continuar lá na pasta fotos/ do nosso servidor. A solução é simples, utilizamos a função unlink(). Vamos supor que queremos remover o usuário de ID = 1 e sua respectiva foto: <?php // ID de exemplo $id = 1; // Selecionando nome da foto do usuário $sql = mysql_query("SELECT foto FROM usuarios WHERE id = '".$id."'"); $usuario = mysql_fetch_object($sql); // Removendo usuário do banco de dados $sql = mysql_query("DELETE FROM usuarios WHERE id = '".$id."'"); // Removendo imagem da pasta fotos/ unlink("fotos/".$usuario->foto.""); ?> 6. ConclusãoPodemos concluir que é muito simples fazer upload de uma imagem para o servidor, e não só apenas imagem, poderia ser qualquer outro arquivo, só mudaria o modo de validação. Espero que vocês tenham entendido, até o próximo artigo. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
MBarros 0 Denunciar post Postado Fevereiro 22, 2010 Olá pessoal. Cheguei à um outro ponto do meu problema: Ao utilizar o seguinte para remover as 4 fotos referentes ao id: <?php $id = $_GET['id']; mysql_connect("localhost","root","") or die ("Não foi possível conectar ao Servidor."); mysql_select_db("lab") or die ("Não foi possível selecionar a base de dados"); $sql = mysql_query("SELECT imagens FROM testes WHERE id= '".$id."'"); $trabalhos = mysql_fetch_object($sql); unlink("../uploads/".$trabalhos->imagens.""); ?> O seguinte erro aparece: Warning: unlink(../uploads/img1.jpg, img2.jpg, img3.jpg, img4jpg) [function.unlink]: No such file or directory in D:\Projetos\mbarros\admin\excluir.php on line 10 Para enviar as 4 imagens para a pasta e seus nomes para o DB eu utilizei implode (daí talvez a virgula entre as img*.jpg). Por algum acaso eu teria que utilizar a função explode para separar as informações -- imagens -- e depois apaga-las? :huh: Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 22, 2010 Para enviar as 4 imagens para a pasta e seus nomes para o DB eu utilizei implode (daí talvez a virgula entre as img*.jpg). Por algum acaso eu teria que utilizar a função explode para separar as informações -- imagens -- e depois apaga-las? :huh: não é meio contraditório utilizar implode e depois explode?? se você seguir a dica que eu dei no outro post quem sabe funcione Compartilhar este post Link para o post Compartilhar em outros sites
MBarros 0 Denunciar post Postado Fevereiro 24, 2010 Moderação: tópico resolvido Agradeço a todos pela ajuda, mas acabei seguindo um caminho totalmente diferente: Alterei meu script para que o grupo de imagens referente ao Título fosse agrupado em pastas separadas dentro de uma central. Feito isso, remodelei meu script de exclusão de dados para que apagasse os dados do BD, excluisse os arquivos da pasta referente ao título e em seguida apagasse a referida pasta. simples! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif enviar.php <?php $numeroCampos = 4; $titulo = $_POST["titulo"]; $resumo = $_POST["resumo"]; $producao = $_POST["producao"]; $detalhes = $_POST["detalhes"]; $caminho = "../uploads/" . $titulo; $nomeArquivo = ($_FILES["imagens"]["name"]); $imagens = implode(", ", $_FILES["imagens"]["name"]); mysql_connect("localhost", "root", "") or die("Não foi possível conectar ao Servidor."); mysql_select_db("lab") or die("Não foi possível selecionar a Base de Dados."); for($i = 0; $i < $numeroCampos; $i++) { $nomeArquivo = $_FILES["imagens"]["name"][$i]; $nomeTemporario = $_FILES["imagens"]["tmp_name"][$i]; if(file_exists($caminho) == FALSE) { @mkdir($caminho, 0777); } if(move_uploaded_file($nomeTemporario, $caminho .'/'. $nomeArquivo)) { } else { echo "Erro ao enviar os arquivos."; } } echo "Arquivos enviados com sucesso."; mysql_query("INSERT INTO `trabalhos` (imagens, titulo, resumo, producao, detalhes) VALUES('$imagens', '$titulo', '$resumo', '$producao', '$detalhes')"); ?> excluir.php <?php mysql_connect("localhost", "root", "") or die("Não foi possível conectar ao Servidor."); mysql_select_db("lab") or die("Não foi possível selecionar o Banco de Dados."); $sql = "SELECT * FROM trabalhos WHERE id=".$_GET['id']; $resultado = mysql_query($sql) or die("Não foi possível realizar a consulta."); while($linha = mysql_fetch_array($resultado)) { $titulo = $linha['titulo']; $caminho = "../uploads/" . $titulo; if($abre = @opendir($caminho)) { while(false !== ($arquivo = readdir($abre))) { @unlink("$caminho/$arquivo"); } @closedir($abre); @rmdir($caminho); echo "O diretório $caminho foi limpo e excluído."; } else { "O diretório $caminho não existe."; } } mysql_query("DELETE FROM trabalhos WHERE id=".$_GET['id']); ?> Compartilhar este post Link para o post Compartilhar em outros sites