Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro em upload de imagens


betolima

Pergunta

Olá, tenho um sistema de upload onde envia 5 imagens.

1) Envia o caminho pro mysql

2) Envia as imagens pra pasta (Grande e Pequena).

3) Ainda pode escolher pra qual album mandar...

Gostaria que alguém pudesse fazer o download aqui e testasse localmente....

Estou com um pequeno problema, na verdade não sei onde é, o que acontece é o seguinte:

Após o submit das 5 imagens, ele grava no banco os nomes das imagens e o thumb. Só que alguns nomes de imagens ficam repetidos.

Vejam:

imagem.gif

Consequentemente grava somente 4 imagens la nas pastas porque o sistema escolhe uma das repetidas e descarta o outro.

O que eu queria é que ele gravasse sem repetir, que gravasse corretamente...

Agradeço quem puder ajudar....

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

ok, vou postar já

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 = "banco"; // 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 não é 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 é GIF ou JPG ou PNG*/
            $aux_tipo_imagem = $get2["mime"]; /* Vai servir para verificar se é 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']."'"); 
            
        }
    }
?>
<?php /*
$dir = "images/g";
$dir1=opendir($dir);
while ($res=readdir($dir1)){
if ($res!='' && $res!='.' && $res!='..'){
$url = $dir."/".$res;
unlink($url);
}}
closedir($dir1);
//rmdir("fotos/g/");
?> 
<?php unlink("images/g/$nome_thumb"); */?>
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);
    }
?>
sql
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;

Precisa-se crirar os diretórios:

images/big

images/small

Link para o comentário
Compartilhar em outros sites

  • 0

em class_upload.php susbtitua pelo código abaixo:

<?php
$_host = "localhost";
$_user = "root"; // usuário
$_pass = ""; // senha
$_db = "banco"; // 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 não é 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 é GIF ou JPG ou PNG*/
            $aux_tipo_imagem = $get2["mime"]; /* Vai servir para verificar se é GIF ou JPG ou PNG*/
            
            if ($aux_tipo_imagem == "image/jpeg") {
                $nrand = rand(10000000,99999999);
                $nome_foto  = "imagem_".$nrand.".jpg";
                $nome_thumb = "thumb_".$nrand.".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']."'"); 
            
        }
    }
?>
<?php /*
$dir = "images/g";
$dir1=opendir($dir);
while ($res=readdir($dir1)){
if ($res!='' && $res!='.' && $res!='..'){
$url = $dir."/".$res;
unlink($url);
}}
closedir($dir1);
//rmdir("fotos/g/");
?> 
<?php unlink("images/g/$nome_thumb"); */?>

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Vampyro, por acaso poderia me ajudar novamente?

Estou conseguindo deletar o registro do banco, mas não apaga as imagens das pastas...

também tentei colocar uma confirmação quando pressionado o deletar, mas mesmo cancelando a confirmação ele apaga.

listar.php

<?php
$con = mysql_connect('localhost','root','')or die(mysql_error());
mysql_select_db('banco',$con);
$_nome_album = $_REQUEST["album"];
$fotos = mysql_query("SELECT * FROM galeria WHERE album =$_nome_album order by id desc")or die(mysql_error());

$pasta_dir = "../../images/fotos/small/";
$k = 0;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
    function envioForm(tipo,num)
    {
        var formulario = document.getElementsByName("alteracao"+num)[0];
        if(tipo == 1)
        {
            formulario.action = "alterar.php?album=<?php echo $_nome_album;?>";
        }
        else
        {
            //confirm ('Apagar imagem?');
            formulario.action = "excluir.php?album=<?php echo $_nome_album;?>";
        }
        formulario.method = "post";
        formulario.submit();
    }
</script>
<script type="text/javascript">
<!--
function capa_album(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
//-->
</script>
<style type="text/css">
.descr {
    border:1px solid #333;
}
.textos {
    font-size:12px;
    font-family:Arial, Helvetica, sans-serif;
}
.combo {
    font-size:12px;
    width:146px;
}
.botao {
    font-size:15px;
    background-color:#ccc;
    border:1px solid #333;
}
</style>
</head>
<body bgcolor="#efefeb">
<?php
echo "<table align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"600px\"><tr>";
while($ver = mysql_fetch_array($fotos)){
$id         = $ver["id"];
$pequena     = $ver["pequena"];
$descricao     = $ver["descricao"];
$grande     = $ver["grande"];

    $k ++;
    echo "<td align=\"center\">
    <form name=\"alteracao$k\" method=\"POST\">
        <table>
        <tr>    
    <td align=\"left\"><img src=\"../../images/fotos/small/$pequena\" border=\"1\" title=\"$pequena\"></a></td>
    <tr><td align=\"left\" class=\"textos\">
        <input name=\"id\" type=\"hidden\" value=\"$id\" />Descrição da Foto
        <input name=\"descricao\" type=\"text\" id=\"textfield\" value=\"$descricao\" class=\"descr\">
        <br>
        <form>
          <select name=\"capa\" id=\"capa\" onchange=\"capa_album('parent',this,1)\" class=\"combo\">
            <option>Capa do album?</option>
            <option value=\"capa.php?album=$_nome_album&capa=N\">não</option>
            <option value=\"capa.php?album=$_nome_album&capa=$pequena\">Sim</option>
            </select>
        </form>
        </tr>
        </tr>
        <tr>
            <td colspan=\"2\"> 
            <input name=\"id\" type=\"hidden\" value=\"$id\" />
            <input name=\"pequena\" type=\"hidden\" value=\"$pequena\" />
            <input name=\"grande\" type=\"hidden\" value=\"$grande\" />
            <input type=\"button\" class=\"botao\" onclick=\"envioForm(1,$k)\" name=\"alterar\" value=\"Editar\" />
            <input type=\"button\" class=\"botao\" onclick=\"envioForm(2,$k)\" name=\"ok\" value=\"Excluir\" />
            <br>
            </td>
        </tr>
        </table>
        </form>
    </td>";
        if ( $k == 4)
    {
        echo "</tr><tr>";
        $k = 0;
    }
    
}
echo "</tr></table>";
   
?>
<?php echo "<br /><br /><div align='center' class='textos'><a href='enviar.php'>Enviar mais fotos</a></div>";?>
</body>
</html>
excluir.php
<?php
$con=mysql_connect('localhost','root','')or die('Erro na conexão, verifique os dados'.mysql_error($con));
mysql_select_db('banco',$con)or die('Erro ao selecionar a tabela'.mysql_error($con));
$_nome_album = $_REQUEST["album"];


@chmod('../../images/fotos/',0777);
    if($_SERVER['REQUEST_METHOD']=='POST'){
      @unlink('../../images/fotos/small/'.$_POST['pequena']);
      @unlink('../../images/fotos/big/'.$_POST['grande']);
//echo '../arquivos/'.$_POST['foto'];
      
      $apagar=mysql_query("DELETE FROM galeria WHERE id='{$_POST['id']}'")or die(mysql_error());
  }
($apagar) ? header("location:listar.php?album=$_nome_album") : die('Erro ao excluir os dados.');
?>

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Vampyro....

O class_upload que você postou ae tá funcionando beleza...te agradeço muito pela força...

só que me deparei agora com arquivos maiores que 2Mb....sei que no php ini da pra mudar, mas vou deixar em 2mb mesmo.

ele não está upando e também não avisa nada na tela...

o problema é que não está dando o alert de erro na tela....

Valeu...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...