【问题标题】:Dynamic PHP / MySQL Upload Form动态 PHP/MySQL 上传表单
【发布时间】:2017-11-28 20:49:43
【问题描述】:

我正在尝试构建一个动态 PHP / MySQL 上传表单,其中可以动态添加或删除数据字段,并且所有这些数据都可以通过一个按钮上传到数据库。

这是可以添加和删除的动态<textarea> 元素的样子:

    <form method="post" action="dynamicForm.php" enctype="multipart/form-data">

        <!--Dynamically Added Paragraphs Go Here-->

        <input type="submit" name="upload" value="Upload" id="upload">

    </form>

    <button onclick="addParagraph()">Add Paragraph</button>

<script>

    //add textarea div and associate "Remove" button
    function addParagraph(){
        $("form").append('<div><textarea name="paragraph"></textarea><button class="remove">Remove</button></div>');

   //remove added paragraph
   $(document).on('click', ".remove", function(e) {
   $(this).parent().remove();
   });

</script>

这是我可以用于此的一些示例 PHP:

if (isset($_POST['upload'])) {

    $db = mysqli_connect('','','','');

    $paragraph = $_POST['paragraph'];

    $sql = "INSERT INTO table (paragraph) VALUES ('$paragraph')";

    mysqli_query($db, $sql);

}

添加的每个段落都具有名称paragraph。如果有 5 个名为 paragraph 的元素,而 PHP 代码正在寻找名为 paragraph 的元素,在这种情况下会发生什么情况?是上传所有数据,还是仅上传名称为paragraph 的第一个元素?会抛出错误吗?如果这不会上传所有添加的段落,我怎样才能让 PHP 上传所有这些?

编辑:可能的解决方案

<script>

//changed name value to array "paragraph[]"
function addParagraph(){
    $("form").append('<div><textarea name="paragraph[]"></textarea><button class="remove">Remove</button></div>');


</script>



if (isset($_POST['upload'])) {

    $db = mysqli_connect('','','','');

    $sql = "INSERT INTO table (paragraph) VALUES ('$paragraph')";

    $paragraph_array = $_POST['paragraph'];

    for ($i = 0; $i < count($paragraph_array); $i++){

        $paragraph = mysqli_real_escape_string($paragraph_array[$i]);

        mysqli_query($db, $sql);
    }

}

【问题讨论】:

  • 它会被覆盖。使用名称 paragraph[] 然后在 PHP 中对其进行迭代。你也可以接受 SQL 注入,参数化查询。
  • 一方面&lt;form method="post"&gt; action="dynamicForm.php"&gt;,您需要在“post”之后删除&gt;
  • 您还需要对多阵列使用foreachcount。您的编辑将不起作用。 [] 仅属于 &lt;textarea name="paragraph[]"&gt;。编辑:此评论根据stackoverflow.com/revisions/44752505/2
  • 不,你需要那个客户端,例如$("form").append('&lt;div&gt;&lt;textarea name="paragraph[]"&gt;&lt;/textarea&gt;&lt;button class="remove"&gt;Remove&lt;/button&gt;&lt;/div&gt;');。然后遍历$_POST['paragraph'],因为它是一个数组。
  • 哦,好吧,在这种情况下它是必需的(虽然它不会是提供的代码)。

标签: php mysql


【解决方案1】:

一旦用户点击上传按钮,所有输入的数据都会被上传,即使有多个同名的输入元素。

另一方面,在服务器端,您只能访问具有重复名称的输入元素中最后输入的值。

如果您想访问所有值,您应该为输入元素指定不同的名称,或者在重复名称的末尾添加“[]”,在服务器端,您将获得封装在数组中的所有输入值。

<?php var_dump($_POST);?>

array(2) { ["paragraph"]=> array(4) { [0]=> string(2) "t1" [1]=> string(2) "t2" [2]=> string (2) "t3" [3]=> 字符串(2) "t4" } ["上传"]=> 字符串(6) "上传" }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多