【发布时间】:2019-07-13 22:15:19
【问题描述】:
标题听起来很混乱,所以我先详细说明一下。我有一个网站,除其他外,它允许用户从他们的手机上传图片,这些图片进入 MySQL 数据库并以 blob 格式存储,可以正常工作。我还有一个运行 AJAX 功能的按钮,它允许用户从所述 MySQL 数据库导入信息,然后将其返回到相同的 HTML 字段(继续他们离开的地方)。这个 AJAX 函数适用于除我用于图片的“文件”HTML 输入字段类型之外的所有内容。
为了将文件数据导入 MySQL,我使用 addslashes(file_get_contents($image));,我猜我必须撤消才能将其放回文件输入字段中。如果是这样,我不知道该怎么做。我的猜测是文件数据以一种格式存储在 HTML 输入字段类型中,而以另一种格式存储在 MySQL 中,但我什至不确定这一点,更不用说如果确实是问题,如何解决这个问题。
如果他们有帮助,这里有一些不同的位。
HTML / AJAX:
<button type="button" id = 'ajaxButton' onClick = 'imAnAjaxFunction()';>TEST</button>
<label for="Image1"> Picture 01: </label>
<input type="file" id="Image1" name="Image1" value="Image1"
<script>
function imAnAjaxFunction()
{
var val1 = $('#Serial').val(); //
var request = $.ajax({
url: 'import.php',
type: 'get',
data: { Serial: val1 }, //
dataType: 'html'
});
request.done( function ( data ) {
//alert(data);
});
request.fail( function ( jqXHR, textStatus) {
console.log( 'Sorry: ' + textStatus );
});
var val1 = $('#Serial').val(); //
$.ajax
({
url: 'import.php',
type: 'get',
dataType: 'JSON',
data: { Serial: val1 }, //
success: function(response)
{
var len = response.length;
for(var i=0; i<len; i++)
{
document.getElementById('DateSet').value = response[i].DateSet;
document.getElementById('JobName').value = response[i].JobName;
document.getElementById('Image1').value = response[i].Image1;
}
}
})
}
</script>
insert.php 大部分我不认为是相关的
$image = $_FILES['Image1']['tmp_name'];
$imagetmp=addslashes(file_get_contents($image));
import.php
<?php
ob_start();
$servername = "";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM setcrewreport WHERE Serial = '$_GET[Serial]'";
$result = $conn->query($sql); //query
if ($result->num_rows > 0)
{
// output data of each row
while($row = $result->fetch_assoc())
{
$Serial = $row['Serial'];
$DateSet = $row['DateSet'];
$JobName = $row['JobName'];
$Image1 = $row['Image1'];
$return_arr[] = array("Serial" => $Serial,
"DateSet" => $DateSet,
"JobName" => $JobName,
"Image1" => $Image1);
}
ob_end_clean();
// Encoding array in JSON format
echo json_encode($return_arr);
}
else
{
echo "0 results";
}
$conn->close();
?>
这离参数化 SQL 语句有多近?
$sql = $mysqli->prepare("SELECT * FROM setcrewreport WHERE Serial = ?");
$sql ->bind_param("si", '$_GET[Serial]');
【问题讨论】:
-
如果你想要一个建议:不要将图片保存在数据库中,数据库会变得很大,它的性能会下降。最好只保存图片的路径或获取该路径所需的信息并保持数据库整洁
-
顺便说一句,学习使用prepared statements也比使用addslashes函数更好地防止你的数据库受到内存注入攻击
-
在这种情况下,我认为您无法通过这种方式获取文件片段并将它们放在 json 上。如果你真的想要它在那个json中,你可以尝试在base64之前对其进行编码,然后在接收到json的数据后使用base64解码。发送的数据会更大,但会被安全地编码在一个字符串上,成为 json 的一部分
-
html文件上传控件只保存待上传文件在客户端的本地路径。您不能以编程方式设置其值,这将是一个巨大的安全漏洞!
-
我不知道你在说什么。将代码放在问题中。在 cmets 中很难阅读。