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 blockif($_POST)
. Try this, and say what has returned.– Edilson
He’s not running the $_POST
– Victor Mansolelli
Then he just doesn’t do anything Just reload the page
– Victor Mansolelli
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.– Edilson
I got a solution that wasn’t the best but it worked, thank you
– Victor Mansolelli
Create an answer to this question with the solution found.
– Edilson