发布循环数据,然后使用PDO保存

时间:2016-06-07 02:46:55

标签: php mysql pdo

我有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}}

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));
}