我有 textarea
,它们是根据它们在表中针对特定 ID 出现的次数生成的。所以有些人没有 textarea
,其他人有一个,其他人有两个,等等...如果可能的话,我如何使用我的示例基于这些更新表格。
主页
<?php
$q = $_GET["q"];
$list = $db->prepare("SELECT * FROM Table WHERE ID = ?");
$list->execute(array($q));
$data = $list->fetchAll();
foreach ($data as $row) :?>
<textarea id="TableID<?=$row["TableID"]?>"></textarea>
<?endforeach?>
<div class="button">Save</div>
<script type="text/javascript">
$( '.button' ).click(function() {
var TableID = $("#TableID").attr('id');
var Comment = $("#TableID").val();
$.ajax({
method: "POST",
url: "save.php",
data : {
TableID : TableID,
Comment : Comment
}
});
});
</script>
保存页面
<?php
$Comment = $_POST["Comment"];
$TableID = $_POST["TableID"];
$save = $db->prepare('UPDATE Table
SET Comment = ?
WHERE TableID = ?');
$save->execute(array($Comment,$TableID));
?>
最佳答案
而不是生成你的 textarea
具有不同编号名称的元素,这在后端处理起来非常麻烦:
<textarea name="TableID1"></textarea>
<textarea name="TableID2"></textarea>
<textarea name="TableID3"></textarea>
您可以为它们命名,以便将它们放在一个 $_POST
中多变的。为此,只需在名称末尾用括号命名它们,如下所示:
<textarea name="TableID[]"></textarea>
<textarea name="TableID[]"></textarea>
<textarea name="TableID[]"></textarea>
在 PHP 端,上述所有 3 个文本区域的值将被放入一个数组中,索引为 0、1 和 2。
在您的情况下,由于您希望每个文本区域都与特定的 TableID 相关联,因此在使用 TableID 作为第一个键的数组中使用一个数组,如下所示:
<textarea name="TableID[12][]"></textarea>
<textarea name="TableID[54][]"></textarea>
<textarea name="TableID[163][]"></textarea>
<textarea name="TableID[180][]"></textarea>
在执行此操作时,您会将 TableID 作为元素名称的一部分传递,因此您不需要 POST 2 个不同的变量 Comment 和 TableID,您实际上只需要 POST Comment(textarea 值)。
因此,生成页面的 foreach 循环中的代码如下所示:
<textarea id="Comment[<?=$row["TableID"]?>][]"></textarea>
和您的提交代码(假设您将 <textarea>
元素包装在 <form>
中):
$(function () {
$('form').submit(function () {
$.post('save.php', $('form').serialize(), function () {
// do something here if you want
});
return false;
});
});
一旦您将数据整齐地发布在一个数组中,只需像您已经在做的那样准备语句,然后包装 execute
在遍历每个 TableID 的循环中:
foreach($Comment as $TableID => $CommentText){
$save->execute(array($CommentText,$TableID));
}
关于php - 发布循环数据,然后使用 PDO 保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669699/