【问题标题】:Insert value of hidden file input into database?将隐藏文件输入的值插入数据库?
【发布时间】:2019-07-29 23:43:52
【问题描述】:

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

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

【问题讨论】:

  • 使用var_dump 进行调试,以确保您实际上获取了正确的属性,而不是假设您已经获取了。
  • @tadman 我用什么 var_dump
  • 无论您插入什么以确保填充该值。从数据库中的空白条目返回到之前的立即操作,并继续查找该值的来源以确保它正确传递。
  • @tadman 我做到了,得到了这个:string(0) ""。我认为这可能是 html 或 javascript 问题或我的代码中缺少的东西。
  • 追溯它的来源等等。使用浏览器中的 Web 检查器功能查看发送了哪些参数(如果有)。使用您的 JavaScript 调试器和console.log 确保它们首先被正确收集。

标签: mysql sql database phpmyadmin


【解决方案1】:

您正在使用 javascript 动态覆盖输入字段,实质上是在提交之前将其擦除。

文件输入字段由浏览器控制。如果您在 Chrome 中调试(按 F12,然后右键单击并 inspect),您会注意到“文件”类型的输入字段实际上从未更改。没有 value 字段,什么都没有。

请看这篇精彩的帖子: 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
)

【讨论】:

  • 我不认为可以有两个类型属性。我相信你不需要隐藏的类型属性
  • 是的,我知道这与我的 javascript 有关。我删除了我的 js 代码的下半部分,并且能够以这种方式将文件名插入到数据库中,但它花费了我最后一个 js 代码,我仍然需要它。我现在只需要找出如何使它工作,这样它就不会覆盖我的输入文件名 - 感谢您进一步指出。
【解决方案2】:

有很多方法可以做到。

1 隐藏输入

&lt;input type='hidden' name='bla' value='bla'&gt;

1 隐藏输入 2

//...
<html>
<head>
  <style>
    /*class to hide inputs, or insert it in a file css*/
    .inputHidden{display:none !important;}
  </style>
</head>
<body>
  
  <!--add class-->
  <input class='inputHidden' type='file' name='bla'>
  
</body>
</html>

还有其他使用 javascript 的方法,但在您的情况下不是必需的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多