将隐藏文件输入的值插入数据库?

时间:2019-07-29 23:43:52

标签: mysql sql database phpmyadmin

我想将隐藏文件输入的值插入数据库,但不确定如何。我的代码只是不断向数据库中插入空白值,但我想插入要上传的文件名。这是我的代码:

<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(); 
}

2 个答案:

答案 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)

有很多方法可以做到。

1隐藏输入

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" + 

1隐藏输入2

<input type='hidden' name='bla' value='bla'>

使用javascript还有其他方法,但您无需这样做。

很抱歉,我有一阵子不使用jQuery,但我确实了解到jQuery与您将文件名发送到数据库的请求无关,我也没有看到任何问题除非您有错字,例如列名或表名,列类型,列中字符串的长度...

相关问题