Ir ao conteúdo

Posts recomendados

Postado

Gostaria de um help em edição de imagens no banco de dados, eu tenho uma tabela chamada arquivoimagem que contem os dados da imagem, eu gostaria de editar ela no BD, eu vi algumas coisas sobre ter que excluir ela do servidor e do banco primeiro pra depois inserir ela novamente, to tentando fazer isso mas infelizmente não ta funcionando ele apresenta um erro de Undefined offset e eu não faço ideia do porque, se alguém puder me ajudar, agradeceria. 

$erro = 0;
$id_imovel = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);


$query_imagem = "SELECT arquivo FROM arquivoimagem WHERE imovel_id = '$id_imovel' ";
$imagem = mysqli_query($cnn, $query_imagem) or die(mysqli_error($cnn));
if (mysqli_affected_rows($cnn) > 0) {
    echo 'executou a query';
}
while ($dado = $imagem->fetch_array()) {
    $deleta = unlink('arquivo/' . $dado['arquivo']);
}
if ($deleta) {
    $query_delete_imagem = "DELETE FROM arquivoimagem WHERE imovel_id = '$id_imovel' ";
    $resultado_imagem = mysqli_query($cnn, $query_delete_imagem) or die(mysqli_error($cnn));

    if (mysqli_affected_rows($cnn) > 0) {
        $arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : "";
        if (isset($_FILES['arquivo'])) {
            $nomeImagem = $arquivo['name'];
            $tiposPermitidos = ['jpg', 'jpeg', 'png'];
            $quantArquivos = 12 /* count($_FILES['arquivo']['name']) */;
            $contador = 0;
                while ($contador < $quantArquivos) {
                    
                    $extensao = pathinfo($_FILES['arquivo']['name'][$contador], PATHINFO_EXTENSION);

                    $temporario = $_FILES['arquivo']['tmp_name'][$contador];


                    if (in_array($extensao, $tiposPermitidos)) {
                        $tamanho = $arquivo ['size'];
                        $novo_nome = uniqid() . ".$extensao";
                        $diretorio = "arquivo/";

                        $sql_code = "INSERT INTO arquivoimagem (arquivo, data, imovel_id) VALUE ('$novo_nome', NOW(), '$id_imovel' ";


                        if (!mysqli_query($cnn, $sql_code)) {
                            $erro++;
                        }
                        if ($erro == 0) {
                            if (move_uploaded_file($temporario, $diretorio . $novo_nome)) {
                                echo 'salvou';
                            }
                        } else {
                            
                        }
                    } else {
                        print "O arquivo não pode ser salvo";
                    }
                    $contador++;
                }echo 'O número de imagens excede o permitido';
            } else {
                echo'Não foi possivel salvar';
            }
        }
    }

 

  • 2 semanas depois...
Postado

@luscas eu consegui fazer as alterações de imagem, só que agora to com outro problema, por exemplo o usuário pode salvar 5 imagens e na hora de editar ele poder editar essas 5 imagens, o problema é que o meu código ta executando o while 5 vezes, mas ele replica a última imagem escolhida e salva, sem apresentar erro.

<?php
session_start();
include 'Conexao.php';
$id = $_SESSION['id'];

$erro = 0;
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);
$arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : "";

$query_quantidade_img = "SELECT COUNT(arquivo) AS TOTAL FROM arquivoimagem WHERE imovel_id = '$id'";
$resultado_query_quantidade_img = mysqli_query($cnn, $query_quantidade_img) or die (mysqli_error($cnn));
$quantidadeImagens = mysqli_fetch_assoc($resultado_query_quantidade_img);

$query_imagem = "SELECT arquivo FROM arquivoimagem WHERE imovel_id = '$id' ";
$imagem = mysqli_query($cnn, $query_imagem) or die(mysqli_error($cnn));
if (mysqli_affected_rows($cnn) > 0) {
    echo 'executou a query';
}
while ($dado = $imagem->fetch_array()) {
    $deleta = unlink('arquivo/' . $dado['arquivo']);
}
if ($deleta) {
        if (isset($_FILES['arquivo'])) {
            $nomeImagem = $arquivo['name'];
            $tiposPermitidos = ['jpg', 'jpeg', 'png'];
            $quantArquivos = $quantidadeImagens['TOTAL'];
            $contador = 0;
                while ($contador < $quantArquivos) {
                    
                    $extensao = pathinfo($_FILES['arquivo']['name'][$contador], PATHINFO_EXTENSION);

                    $temporario = $_FILES['arquivo']['tmp_name'][$contador];


                    if (in_array($extensao, $tiposPermitidos)) {
                        $tamanho = $arquivo ['size'];
                        $novo_nome = uniqid() . ".$extensao";
                        $diretorio = "arquivo/";

                        $sql_code = "UPDATE arquivoimagem SET arquivo = '$novo_nome' WHERE imovel_id = '$id' ";


                        if (!mysqli_query($cnn, $sql_code)) {
                            $erro++;
                        }
                        if ($erro == 0) {
                            if (move_uploaded_file($temporario, $diretorio . $novo_nome)) {
                                header("Location: EditaDadosImovel.php?id=" . $id );
                            }
                        } else {
                            
                        }
                        
                    } else {
                        print "O arquivo não pode ser salvo";
                    }
                    $contador++;
                }
            } else {
                echo'Não foi possivel salvar';
            }
}

  

Postado

Olá, eu to tentando editar as imagens tanto do meu BD, quanto do meu servidor, eu até consigo atualizar as imagens, tanto no BD quanto no servidor o dilema é que se o um imóvel tiver mais de uma imagem associada a ele eu não consigo alterar essas imagens da forma que envio no form, até o momento ele faz o seguinte quando clico em editar eu escolho as imagens que desejo, mas ele pega a última imagem escolhida e replica ela em todos os campos, tanto no BD quanto no servidor e não altera o nome do arquivo somente o id dele, mas eu não faço ideia do porque disso esta acontecendo, a forma que eu gostaria que funcionasse é que se na hora que o cliente salvou o imóvel ele inseriu 5 imagens, na hora de alterar ele consiga alterar as 5 imagens mas que elas salvem da forma que eu to enviando no formulário, ou seja distintas entre si. Se alguém puder me ajudar eu agradeço muito.

<?php
session_start();
include 'Conexao.php';
$id = $_SESSION['id'];

$erro = 0;
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);
$arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : "";

$query_quantidade_img = "SELECT COUNT(arquivo) AS TOTAL FROM arquivoimagem WHERE imovel_id = '$id'";
$resultado_query_quantidade_img = mysqli_query($cnn, $query_quantidade_img) or die (mysqli_error($cnn));
$quantidadeImagens = mysqli_fetch_assoc($resultado_query_quantidade_img);

$query_imagem = "SELECT arquivo FROM arquivoimagem WHERE imovel_id = '$id' ";
$imagem = mysqli_query($cnn, $query_imagem) or die(mysqli_error($cnn));
if (mysqli_affected_rows($cnn) > 0) {
    echo 'executou a query';
}
while ($dado = $imagem->fetch_array()) {
    $deleta = unlink('arquivo/' . $dado['arquivo']);
}
if ($deleta) {
        if (isset($_FILES['arquivo'])) {
            $nomeImagem = $arquivo['name'];
            $tiposPermitidos = ['jpg', 'jpeg', 'png'];
            $quantArquivos = $quantidadeImagens['TOTAL'];
            $contador = 0;
                while ($contador < $quantArquivos) {
                    
                    $extensao = pathinfo($_FILES['arquivo']['name'][$contador], PATHINFO_EXTENSION);

                    $temporario = $_FILES['arquivo']['tmp_name'][$contador];


                    if (in_array($extensao, $tiposPermitidos)) {
                        $tamanho = $arquivo ['size'];
                        $novo_nome = uniqid() . ".$extensao";
                        $diretorio = "arquivo/";

                        $sql_code = "UPDATE arquivoimagem SET arquivo = '$novo_nome' WHERE imovel_id = '$id' ";


                        if (!mysqli_query($cnn, $sql_code)) {
                            $erro++;
                        }
                        if ($erro == 0) {
                            if (move_uploaded_file($temporario, $diretorio . $novo_nome)) {
                                header("Location: EditaDadosImovel.php?id=" . $id );
                            }
                        } else {
                            
                        }
                        
                    } else {
                        print "O arquivo não pode ser salvo";
                    }
                    $contador++;
                }
            } else {
                echo'Não foi possivel salvar';
            }
}

 

Postado
16 horas atrás, Rebeca Julia Bronzatti disse:

while ($dado = $imagem->fetch_array()) { $deleta = unlink('arquivo/' . $dado['arquivo']); }

@Rebeca Julia Bronzatti no seu while você não está utilizando nenhuma variável de controle nos dados do arquivo, ou seja nos 5 whiles que ele passa ele faz a mesma coisa, você precisa contar quantas imagens vão ser modificadas e usar esse valor como controle, já que a $dados depois que recebe os valores do banco de dados vira um vetor.

acredito que seja isso, mas não  consigo testar no momento

  • 2 semanas depois...
Postado

@luscas desculpa a demora tava sem pc, cara consegue me dar um help tentei fazer o que disse mas ainda sim ta errado, minha dúvida é a seguinte você disse pra colocar uma variável de controle com o número que vai ser alterado, faço uma consulta e consigo receber esse numero em $quantidadeImagens, mas ele continua com o mesmo problema, ele exclui todas as imagens do servidor e do banco, mas na hora de salvar só salva a primeira imagem inserida no servidor e o update dos campos restantes do bd vai com o nome igual em todas as imagens onde o imovel_id sejam iguais

$cont = 1;
while($cont <= $quantidadeImagens['TOTAL']){
	while ($dado = $imagem->fetch_array()) {
        $deleta = unlink('arquivo/' . $dado['arquivo']);
        $cont++;
    }
}

1419115865_imagensrepetidas.thumb.png.67b82d439a896bb6f92e5f56b876fdbc.png

Postado

@Rebeca Julia Bronzatti pode mandar um modelo de como esta o seu banco de dados ?

acredito que o erro esteja na query que atualiza o nome do arquivo.

aparentemente o erro é você estar utilizando o id_imovel como variavel de controle,sendo que o id_imovel é o id da casa certo? o id que você deveria utilizar é o do arquivo em si.

  • Curtir 1
Postado

@luscas eu acabei conseguindo fazer de outra forma, na realidade com a mesma ideia mas com imagens individuais, anteriormente quando clicava em editar imagem ele teria que alterar todas as imagens do BD o que não era muito útil, agora eu alterei quando ele clicar em alterar as imagens eu seleciono todas do BD que estão associadas ao id do imóvel, mostro ao usuário e ele escolher qual excluir e qual alterar, dessa forma eu executo individualmente os processos. 

@luscas Obrigada pela ajuda no post.

Vou deixar o código talvez ajude alguém um dia. 

1° Primeiro código é em PHP onde a exclusão do servidor é feita, o update no nome da imagem no BD ocorre e ela é salva novamente no servidor.

2° Segundo código é referente a página de edição, onde o usuário escolhe se quer editar ou excluir os imóveis associados ao id. 

<?php

session_start();
include 'Conexao.php';
$id = $_SESSION['id'];

$erro = 0;
$id_img = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);
echo $id_img;
$arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : "";

$query_imagem = "SELECT * FROM arquivoimagem WHERE idImagem = '$id_img' ";
$imagem = mysqli_query($cnn, $query_imagem) or die(mysqli_error($cnn));
if (mysqli_affected_rows($cnn) > 0) {
    echo 'executou a query<br>';
}


while ($dado = mysqli_fetch_array($imagem)) {
    $deleta = unlink('arquivo/' . $dado['arquivo']);
}


if (isset($_FILES['arquivo'])){
    $nomeImagem = $arquivo['name'];
    $tiposPermitidos = ['jpg', 'jpeg', 'png'];
    $quantArquivos = 1;
    $contador = 0;
    if($deleta){
        while ($contador < $quantArquivos) {
        $extensao = pathinfo($_FILES['arquivo']['name'], PATHINFO_EXTENSION);
        $temporario = $_FILES['arquivo']['tmp_name'];
        
        if (in_array($extensao, $tiposPermitidos)){
            $tamanho = $arquivo ['size'];
            $novo_nome = uniqid() . ".$extensao";
            $diretorio = "arquivo/";

            $sql_code = "UPDATE arquivoimagem SET arquivo = '$novo_nome' WHERE idImagem = '$id_img'";   
           
            if (!mysqli_query($cnn, $sql_code)) {
                    $erro++;
            }
            if ($erro == 0) {
                    if (move_uploaded_file($temporario, $diretorio . $novo_nome)) {
                            header("Location: editaImagem.php?id=" . $id);
                       }
                       
                } 
        }else {
            header("Location: editaImagem.php?msg=nao_editou");
        }
        $contador++;
    }
    }
}
<?php
include 'index.php';
include 'Conexao.php';
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);
$msg = 0;
$query_edit_image  = "SELECT * FROM arquivoimagem WHERE imovel_id = '$id'";
$resultado_query_edit_image = mysqli_query($cnn, $query_edit_image) or die (mysqli_error($cnn));
?>
<html>
    <header>
        <title></title>
        <link rel = "stylesheet" type="text/css" href="CSS/style.css">
        <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" >
    </header>
    <body>
        <div class="adicionar">
            
            <div class="shadow p-3 mb-5 bg-white rounded">
                <?php
                while($img = mysqli_fetch_array($resultado_query_edit_image)){
                  $id_img = $img["idImagem"];  
                  $id = $img["imovel_id"];
                ?>
                <div style="margin-right: 30px; float: left;">
                    <img src="arquivo/<?php echo $img["arquivo"] ?>" style="width: 363px; height: 250px;"><br><br>
                    <div class="row">
                        <div class="col">
                            <a href="<?php echo "editaAdicionaImg.php?id=" . $id_img ?>"><button type="submit" class="btn btn-warning" value="Editar" style="font-size: 15px; margin-top: 0;">
                            <span class="glyphicon glyphicon-edit"></span> Editar
                            </button></a>
                        </div>
                        <div class="col">
                            <a href="<?php echo "excluirImg.php?id=" . $id_img ?>"><button type="submit" class="btn btn-danger" value="Excluir" style="font-size: 15px; margin-top: 0;">
                            <span class="glyphicon glyphicon-trash"></span> Excluir
                            </button></a>
                        </div>
                    </div>
                </div>
                <?php 
                }
                ?>
                    <a href="<?php echo "EditaDadosImovel.php?id=" . $id ?>"><button type="submit" class="btn btn-success" value="Enviar">
                            <span class="glyphicon glyphicon-ok"></span> Enviar
                    </button>
                    </a>
                </form>
            </div>
        </div>
        <?php
        include 'foot.php';
        ?>
    </body>
</html>

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!