我有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>
,有些人会有一个,有些人有两个等等......如果可能的话,如何使用我的例子更新tabled。
主页
<?php
$Comment = $_POST["Comment"];
$TableID = $_POST["TableID"];
$save = $db->prepare('UPDATE Table
SET Comment = ?
WHERE TableID = ?');
$save->execute(array($Comment,$TableID));
?>
保存页面
{{1}}
答案 0 :(得分:2)
不是生成具有不同编号名称的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和&amp; 2。
在您的情况下,由于您希望每个textarea与特定的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&amp; TableID,你真的只需要发表评论(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));
}