【发布时间】: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 注入,参数化查询。 -
一方面
<form method="post"> action="dynamicForm.php">,您需要在“post”之后删除>。 -
您还需要对多阵列使用
foreach或count。您的编辑将不起作用。[]仅属于<textarea name="paragraph[]">。编辑:此评论根据stackoverflow.com/revisions/44752505/2 -
不,你需要那个客户端,例如
$("form").append('<div><textarea name="paragraph[]"></textarea><button class="remove">Remove</button></div>');。然后遍历$_POST['paragraph'],因为它是一个数组。 -
哦,好吧,在这种情况下它是必需的(虽然它不会是提供的代码)。