[PHP] Como inserir imagem no banco de dados?

Oi galera, estou aqui com um problema… Estou tentando inserir uma imagem na base de dados mas tudo sem sucesso! :frowning: Queria que me ajudassem se souberem a solução… obrigado a todos…

Código do HTML:

<input type="file" name="image" ng-model="image"/>` 

<script>
    $scope.adicionar = function(){
     	$http.post("inserirAlerta", { 
                  'titulo':$scope.titulonoticia, 
                  'descricao':$scope.descricaonoticia,
                   'image':$scope.image,
                   'data':$scope.datanoticia,
                   'tipo':$scope.tiponoticia
           });
</script>

Obs: Ele tá inserindo tudo na base de dados o problema é que não insere a imagem…

Código em PHP

$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
$image_name = addslashes($_FILES['image']['name']);
$query = "INSERT INTO noticias(titulo_noticia, texto_noticia, imagem_noticia, imagem_nome, data_noticia, tipo_noticia) VALUES ('$titulonoticia', '$descricaonoticia', '$image', '$image_name', '$datanoticia','$tiponoticia')";

Na base de dados a imagem fica com essas:

image

Com Angular?

1 curtida

Mas sim se calhar é melhor usar o AngularJS… O que voce recomenda?

precisa mesmo inserir a imagem no banco de dados? não seria mais prático gerar um id apontando para o arquivo com a imagem?

O que eu preciso mesmo é fazer com que a imagem vá para a pasta upload e na base de dados apenas mostre o nome do ficheiro…

recomendo que use a biblitoeca Medoo e essa biblitoeca de upload de imagens para facilitar as coisas:

    $image_name=$file['name'];//nome do ficheiro enviado
    $data=[
    'titulo_noticia'=>$titulonoticia,
    'texto_noticia'=>$descricaonoticia,
    'imagem_noticia'=>$image,
    'imagem_nome'=>$image_name,
    'data_noticia'=>$datanoticia,
    'tipo_noticia'=>$tiponoticia
    ];
    $database->insert('noticias',$data);
    $id=$database->id();//id da notícia inserida no banco de dados

tenta usar base64_encode no lugar de addslashes

1 curtida

Não existe outra forma mais fácil de só enviar o nome do ficheiro para a base de dados? Só qero mesmo que ele mostre lá o nome, sei que isso é possível sem a biblioteca Medoo, mas não sei como fazer… :confused:
É que só posso usar essa forma mais básica.

Obrigado pela sua resposta.

medoo é a forma mais fácil pois diminui o contato direto com o PDO.

tirando o PDO, a forma mais básica seria o mysqli com bind_param:

$conn = new mysqli($servername, $username, $password, $dbname);
$stmt = $conn->prepare("INSERT INTO `noticias` (`titulo_noticia`, `texto_noticia`, `imagem_noticia`, `imagem_nome`, `data_noticia`, `tipo_noticia`) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param($titulonoticia,$descricaonoticia,$image,$image_name,$datanoticia,$tiponoticia);
$stmt->execute();