发布循环数据,然后用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)); 
?> 
+1

将一个类添加到您的textareas中,并在您的jquery表单提交中选择集合。然后发布带有表标识索引的数组。循环执行。 –

+0

当你更新时,你是否希望为你的页面上的每个textarea更新数据库中的不同行?或者所有具有相同'TableID'的textareas需要更新同一行? – BizzyBob

+0

@BizzyBob ID是所有不同的行。我不知道有多少行或哪些行会显示出来,这取决于以前的输入。 –

,而不是生成的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)); 
}