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

标签 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>

保存页面

<?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/

相关文章:

mysql - 经典 ASP 遗留系统对 MySQL 8.0 中的所有整数返回 0

php - 如何将转换后的数组插入mysql? (PHP)

mysql - 反序列化 pdo mysql 错误 - 数据源名称无效

php - mysql_data_seek 和 mysql_field_seek 之间的区别?

php - 数据库连接不作为包含文件工作

php - WordPress 自定义 SQL-Query,太重了?

php - 将 jpeg 作为 blob 保存并检索到 mysql 数据库

php - PDO 绑定(bind)参数错误

php - 没有选择 : Cannot execute queries while other unbuffered queries are active (INSERT INTO/ANALYZE TABLE/BEGIN TRANSACTION)

php - 如何使用 % 防止 Zend Form 的 XSS 攻击