我想将隐藏文件输入的值插入数据库,但不确定如何。我的代码只是不断向数据库中插入空白值,但我想插入要上传的文件名。这是我的代码:
<form action="handler.php" method="post" enctype="multipart/form-data">
<div id="bd1" class="border">
<input id="inp1" class="imginp" type="file" name="img1" hidden>
<img src="https://img.icons8.com/wired/64/000000/add-image.png">
</div>
<input type="submit" name="submit">
</form>
<script>
for (let a = 1; a < 3; a++) {
$("#bd"+a).click(function(e) {
$(this).children(".imginp").click()
});
$('#inp'+a).click(function (e) {
e.stopPropagation();
});
$('#inp'+a).on('change', function(e){
var files = e.target.files;
$.each(files, function(i, file){
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(e){
template =
'<div class="border">'+
'<input id="inp'+a+'" class="imginp" type="file" name="img'+a+'">'+
'<img class="blah" src="'+e.target.result+'">'+
'</div>';
$('#bd'+a).replaceWith(template);
};
});
});
}
</script>
if (isset($_POST['submit'])) {
$img1 = $_FILES['img1']['name'];
$img1targ = "images/".basename($_FILES['img1']['name']);
$img1muf = move_uploaded_file($_FILES['img1']['tmp_name'], $img1targ);
$stmt = $conn->prepare("INSERT INTO images (img1) VALUES (?)");
$stmt->bind_param("s", $img1);
$stmt->execute();
$stmt->close();
}
答案 0 :(得分:1)
您正在使用javascript动态覆盖输入字段,实际上是在输入之前将其擦除。
文件输入字段由浏览器控制。如果您在Chrome中调试(按F12键,然后单击鼠标右键并检查),则会注意到“文件”类型的输入字段从未真正更改过。没有值字段,什么也没有。
请参阅以下优秀文章: Using readAsDataURL() for image preview
我相信这接近您想要做的事。
此外,关于调试,这是您需要做的:
if (isset($_POST['submit'])) {
print "<pre>" . print_r($_POST,TRUE) . "</pre>"; exit;
$img1 = $_FILES['img1']['name'];
$img1targ = "images/".basename($_FILES['img1']['name']);
$img1muf = move_uploaded_file($_FILES['img1']['tmp_name'], $img1targ);
$stmt = $conn->prepare("INSERT INTO images (img1) VALUES (?)");
$stmt->bind_param("s", $img1);
$stmt->execute();
$stmt->close();
}
我添加了打印行,该打印行转储了$ _POST然后退出。
当您单击提交时,它将显示如下内容:
Array
(
[submit] => Submit
)
答案 1 :(得分:0)
有很多方法可以做到。
function showTooltip(evt) {\n" +
" var CTM = svg.getScreenCTM();\n" +
" var x = (evt.clientX - CTM.e - 300) / CTM.a;\n" +
" var y = (evt.clientY - CTM.f + 20) / CTM.d;\n" +
<input type='hidden' name='bla' value='bla'>
使用javascript还有其他方法,但您无需这样做。
很抱歉,我有一阵子不使用jQuery,但我确实了解到jQuery与您将文件名发送到数据库的请求无关,我也没有看到任何问题除非您有错字,例如列名或表名,列类型,列中字符串的长度...