发布循环数据,然后用PDO保存
问题描述:
我有textarea
,它们是根据表中某个ID的次数生成的。所以有些人会没有textarea
,其他人会有一个,其他人会有两个,等等......如果可能的话,我如何使用我的示例更新基于这些的表。发布循环数据,然后用PDO保存
主页
<?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 &
在你的情况,因为你希望每个文本区域与特定表格ID相关联,使用使用表格ID作为第一个关键的阵列内的阵列,它应该是这样的:
<textarea name="TableID[12][]"></textarea>
<textarea name="TableID[54][]"></textarea>
<textarea name="TableID[163][]"></textarea>
<textarea name="TableID[180][]"></textarea>
在这样做,你会通过表ID作为元素名称的一部分,所以你不需要POST 2个不同的变量,你真的只需要POST Comment(textarea value)。
因此,在您的foreach循环生成页面的代码是这样:
<textarea id="Comment[<?=$row["TableID"]?>][]"></textarea>
和您提交的代码(假设你包裹在<form>
你<textarea>
元素):
$(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));
}
将一个类添加到您的textareas中,并在您的jquery表单提交中选择集合。然后发布带有表标识索引的数组。循环执行。 –
当你更新时,你是否希望为你的页面上的每个textarea更新数据库中的不同行?或者所有具有相同'TableID'的textareas需要更新同一行? – BizzyBob
@BizzyBob ID是所有不同的行。我不知道有多少行或哪些行会显示出来,这取决于以前的输入。 –