How to do mysql php image update

Asked

Viewed 1,033 times

1

Guys have this code and need to update the image that is already saved in the database, but it error, Undefined index: photo and file_get_contents(): Filename cannot be Empty

Code

    <?php

require 'conexao.php';

//Pega o id da url
if ( isset( $_GET['id'] ) && ! empty( $_GET['id'] ) ) {
    //Prepra ligacao php mysql
    $stm = $pdo->prepare( 'SELECT id, nome, conteudo, tipo, tamanho FROM ifsp WHERE id = :id LIMIT 1' );
    //Atribui o paramentro ao $_GET['id'] que é o id que esta na url e coloca ele no prepare acima
    $stm->bindValue( ':id', $_GET['id'] );
    //Executa o pdo
    $stm->execute();

    //Tranforma o consulta em matriz
    $consulta = $stm->fetch( PDO::FETCH_ASSOC );

// Se executado
if ($stm->execute())
{
    // Alocando foto
    $foto = $stm->fetchObject();

    // Se existir
    if ($foto != null)
    {

    }
}

// Verificando se selecionou alguma imagem
if (!isset($foto->conteudo))
{
    exit;
} else {

    // Recupera os dados dos campos
    $foto = $_FILES['foto'];
    $nome = $foto['name'];
    $tipo = $foto['type'];
    $tamanho = $foto['size'];

     // Transformando foto em dados (binário)
    $conteudo = file_get_contents($foto['tmp_name']);

    if ( $_POST ) {

        //Ligação php mysql
            $stm = $pdo->prepare( 'UPDATE ifsp SET nome = :nome,
                                                   conteudo = :conteudo,
                                                   tipo = :tipo,
                                                   tamanho = :tamanho WHERE id = :id' );

        //Atribui o paramentro ao $_POST['e a referecia onde ele esta'] e coloca ele no prepare acima
        $stm->bindParam(':nome', $nome, PDO::PARAM_STR);
        $stm->bindParam(':conteudo', $conteudo, PDO::PARAM_LOB);
        $stm->bindParam(':tipo', $tipo, PDO::PARAM_STR);
        $stm->bindParam(':tamanho', $tamanho, PDO::PARAM_INT);
            //Atribui o paramentro ao $_GET['id'] que é o id que esta na url e coloca ele no prepare acima
        $stm->bindValue( ':id', $_GET['id'] );

            //Executa o pdo
            $stm->execute();

            //depois de executar o header o rediciona para outro local
            header( 'Location: index.php' );
        }
    }
}
    require 'views/editarfoto.php';

html

    <!--Inclui a pagina inicial (cabeçalho) pois é iguaal para todos-->
<?php include 'header.php'; ?>
<h1>Editar Contato</h1>
    <!--submete o metodo post para a url informada com o id do comando php a essa url-->
    <form enctype="multipart/form-data" action='editarfoto.php?id=<?php echo $consulta['id']; ?>'  method='post'>
        <label>Foto</label>
        <input type="file" name="foto" />

        <input type="submit" value="Salvar" />
        <a href='index.php'>Cancelar</a>
    </form>

<?php include 'footer.php'; ?>

bank

CREATE TABLE `ifsp` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `nome` varchar(60) NOT NULL,
 `conteudo` mediumblob NOT NULL,
 `tipo` varchar(20) NOT NULL,
 `tamanho` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB;
  • This means that the script has not received any information about the file. The source line from $foto = $_FILES['foto'], until $conteudo = file_get_contents(...), should also be within the block if($_POST). Try this, and say what has returned.

  • He’s not running the $_POST

  • Then he just doesn’t do anything Just reload the page

  • Do the following, comment on the rest of the code, and leave only a part like this if($_POST){ print_r($_POST); }, and then try sending the form, if possible, also send the rest of your code to the Pastebin, so I can see you through.

  • I got a solution that wasn’t the best but it worked, thank you

  • 3

    Create an answer to this question with the solution found.

Show 1 more comment
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.