[英]How to save an image to a MySQL database?
我需要在数据库中保存通过输入获取的图像,但是我不知道该怎么做。 每个教程都说要保存路径并将图像上载到服务器,但是我不想这样做,我想将图像直接保存到数据库!
我的inserir-artigo.php:
<?php
include_once '../banco/banco.php';
$titulo = $_POST['titulo'];
$data = date('Y-m-d');
$imagem = $_FILES['imagem'];
$texto = $_POST['texto'];
if(empty($titulo) || empty($texto)){
echo 'empty';
}
else if (inserirPublicacao($conexao, $titulo, $data, $imagem, $texto) == 1){
echo 'success';
} else {
echo 'error';
}
?>
我的banco.php:
<?php
$conexao = mysqli_connect('localhost', '', '', '');
$conexao->set_charset("utf8");
session_start();
function listaLogin($conexao, $usuario, $senha) {
$cont = 0;
$resultado = mysqli_query($conexao, "SELECT * FROM usuarios WHERE login = '{$usuario}' AND senha = MD5('{$senha}');");
while ($x = mysqli_fetch_assoc($resultado)) {
$cont++;
}
return $cont;
}
function listaPublicacoes($conexao) {
$publicacoes = array();
$resultado = mysqli_query($conexao, "SELECT * FROM publicacoes;");
while ($publicacao = mysqli_fetch_assoc($resultado)) {
array_push($publicacoes, $publicacao);
}
return $publicacoes;
}
function buscaPublicacao($conexao, $id){
$query = "SELECT * FROM publicacoes WHERE id={$id};";
$resultado = mysqli_query($conexao, $query);
return mysqli_fetch_assoc($resultado);
}
function inserirPublicacao($conexao, $titulo, $data, $imagem, $texto){
$query = "INSERT INTO publicacoes (titulo, data, imagem, texto) VALUES ('{$titulo}', '{$data}', '{$imagem}', '{$texto}');";
return mysqli_query($conexao, $query);
}
?>
我的HTML:
<?php include_once './template/header.php'; ?>
<script>
$(document).on('change', '.btn-file :file', function () {
var file = $('#imagem')[0].files[0]
if (file) {
var div = document.getElementById('#imagem-nome');
$('.imagem-nome').append(file.name);
}
});
</script>
<script>
$(document).ready(function () {
$("#btn-enviar").click(function () {
var action = $("#novo-artigo-form").attr("action");
var form_data = {
titulo: $("#titulo").val(),
imagem: $("#imagem").val(),
texto: $("#texto").val()
};
$.ajax({
type: "POST",
url: action,
data: form_data,
success: function (response) {
if (response == 'error') {
$("#mensagem-artigo-novo").removeClass("alert-success alert-wraning");
$("#mensagem-artigo-novo").addClass("alert alert-danger");
$("#mensagem-artigo-novo").html("<p id='login-mensagem-erro'>Houve um erro ao adicionar no banco.</p>");
}
if (response == 'success') {
$("#mensagem-artigo-novo").removeClass("alert-danger alert-warning");
$("#mensagem-artigo-novo").addClass("alert alert-success");
$("#mensagem-artigo-novo").html("<p id='login-mensagem-sucesso'>Artigo adicionado!.</p>");
}
if (response == 'empty') {
$("#mensagem-artigo-novo").removeClass("alert-success alert-danger");
$("#mensagem-artigo-novo").addClass("alert alert-warning");
$("#mensagem-artigo-novo").html("<p id='login-mensagem-aviso'>Preencha todos os campos.</p>");
}
}
});
return false;
});
});
</script>
<div class="container pull-left col-md-4 col-xs-12" style="padding-top: 20px">
<div class="panel panel-default" >
<form id="novo-artigo-form" enctype="multipart/form-data" action="../banco/inserir-artigo.php" method="post" role="form">
<div class="panel-body">
<div class="panel-header">
<h1 class="page-header" style="margin-top: 0px">Adicionar um artigo</h1>
<div id="mensagem-artigo-novo">
</div>
</div>
<div class="form-group">
<label for="titulo">Título:</label>
<input type="text" class="form-control" name="titulo" id="titulo">
</div>
<div class="form-group">
<p>
<label for="imagem">Imagem:</label>
</p>
<p class="imagem-nome">
<span class="btn btn-default btn-file" id="arquivo">
Procurar <input type="file" id="imagem" name="imagem">
</span>
</p>
</div>
<div class="form-group">
<label for="texto">Texto:</label>
<textarea class="form-control" name="texto" id="texto" style="max-width: 100%; min-height: 300px" required></textarea>
</div>
</div>
<div class="panel-footer">
<button class="btn btn-primary" id="btn-enviar" type="submit" style="margin-bottom: -10px">Enviar</button>
</div>
</form>
</div>
</div>
<?php include_once './template/footer.php'; ?>
当我运行此代码时,它只是不保存任何图像到我的图像列中,它说该文件有0个字节。
(我删除了连接字符串的用户名和密码,但是它存在于我的代码中。)
编辑:(未删除)
根据您添加的数据库代码:
有了它, $imagem = $_FILES['imagem'];
需要逃脱。
$imagem = $_FILES['imagem'];
$imagem = mysqli_real_escape_string($conexao, $imagem);
就像我早先想的那样。 检查错误http://php.net/manual/en/mysqli.error.php并将其应用于查询,将表明语法错误,因为您试图插入BLOB类型的列。
旁注:您不会在任何地方检查错误。
mysqli_real_escape_string()
使用mysqli_real_escape_string()
。
其他参考:
注意:另外,请确保文件大小不超过系统文件允许的大小。
请在堆栈上查阅以下内容:
OP之前的原始答案是将缺少的POST方法添加到其表单中,而不是将其标记为其他编辑。
文件处理需要<form>
的POST方法,而您没有。
仅供参考:如果省略POST方法,则表单默认为GET方法; 添加它。
method="post"
另外, ['tpm_name']
有一个错字,应读为['tmp_name']
查阅有关文件处理的手册:
将错误报告添加到文件顶部,这将有助于发现错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:显示错误仅应在登台中进行,而不应在生产中进行。
会发出通知的信号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.