【问题标题】:Update 1 row at a time and each row has a different value when using x-editable for the same user一次更新 1 行,当对同一用户使用 x-editable 时,每行具有不同的值
【发布时间】:2014-09-19 20:58:15
【问题描述】:

我有一个 HTML 表格,在这个例子中,有 2 行(可能更多)。中间列是可编辑的,HTML 表中的每一行都是数据库中的不同列。当我编辑第 1 行并刷新页面时,第 2 行现在与第 1 行具有相同的值。我不想要这个。每一行的用户 id (pk) 都是相同的。关于creating a new record 的文档说这将适用于更新现有的,但并没有真正帮助我。我正在寻求尽可能多的帮助。

这是我的桌子的图像:

如何让每一行保持其值而不更新所有其他行?

例如,如果我更新第 1 行中的列,我只想更新第 1 行的列。

请帮忙!

这是我的代码:

HTML 代码:

<td><a class="myeditable" data-name="fb_url"  data-type="text" data-pk="<?php echo ($userid);?>" title="Edit"><?php echo ($result['fb_url']);?></a></td>                    
<td><a class="myeditable" data-name="tw_url" data-type="text" data-pk="<?php echo ($userid);?>" title="Edit"><?php echo ($result['tw_url']);?></a></td>

Post.php 代码

require("config.php");

$pk = $_POST['pk'];
$name = $_POST['name'];
$value = $_POST['value'];

    if(!empty($value)) {
            try // save user selection to the database
              {
                $stmt = $db->prepare("UPDATE social_preferences SET fb_url = :fburl, tw_url = :twurl WHERE user_id = :userID AND ");
                $stmt->bindParam(":userID", $pk, PDO::PARAM_INT);
                $stmt->bindParam(':twurl', $value);
                $stmt->bindParam(':fburl', $value);
                $stmt->execute();
               }  catch(PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
    }else {
        echo 'No value...';
    }

JS代码:

$(document).ready(function() {
//toggle `popup` / `inline` mode
$.fn.editable.defaults.mode = 'inline';       


    $('.myeditable').editable({
            url: 'post.php',
            ajaxOptions: {
                type: 'post',
            },
            success: function(data, config) {
                if(data && data.id) {
                     //set pk
                    $(this).editable('option', 'pk', data.id);                 
                }
            }
    });
});

当我在 Chrome 开发工具中检查网络选项卡时,我看到: 方法:POST 状态:302 暂时移动

【问题讨论】:

    标签: php html mysql pdo x-editable


    【解决方案1】:

    OP 说的是行,但实际上是列。

    $accepted_names = array('fb_url', 'tw_url');
    if (in_array($_POST['name'], $accepted_names)) {
        if(!empty($_POST['value'])) {
            $value = $_POST['value'];
            $id = $_POST['pk'];
            try {
                $stmt = $db->prepare('UPDATE social_preferences SET ' . $_POST['name'] . ' = :value
                                      WHERE user_id = :id');
                $stmt->bindParam(':id', $id, PDO::PARAM_INT);
                $stmt->bindParam(':value',$value);
                $stmt->execute();
            }
            catch (PDOExeption $e) {
                echo json_encode(array('status' => 'failed', 'msg' => $e->getMessage()));
                exit;
            }
            echo json_encode(array('id' => $id, 'status' => 'oké', 'msg' => $value));
        }
        else {
             echo jsonencode(array('status' => 'failed', 'msg' => 'No value ....'));
        }
    }
    else {
        header($_SERVER['SERVER_PROTOCOL'] . ' 422 Unprocessable entity');
    }
    

    【讨论】:

    • 您对我的问题表示歉意的列是正确的。我添加了您的代码,当我尝试更新第一行中的列时,它只是重置回原始值。当我尝试更新第二行中的列时,我收到此错误:Unprocessable entity。感谢您的帮助!
    • 我用Unprocessable entity 解决了这个问题,但它没有更新值。提交新值后,它将重置为原始值。
    • 在成功的情况下向 JSON 响应添加 id 字段
    • 我更新了我的代码,但它仍然没有更新。我可以看到新值,但是当页面刷新时,新值会重置回原始值
    • 这意味着没有更新,如果分配了正确的 id (data-pk) 和/或在 json 响应中包含 POST 变量,请检查页面中的源代码
    【解决方案2】:

    我假设您使用 oracle SQL。

    将所有要更新的用户放在一个数组中,然后使用 foreach 对其进行迭代。

    为每一个执行更新语句。

    我不知道是否可以在一个语句中运行多个更新,但我不这么认为。

    编辑:为确保只有一行受到影响,请尽可能使用唯一标识符,例如用户 ID。

    【讨论】:

    • 只有 1 个用户,该用户可以更新多行。
    • 当然,但这不是我的意思。我不知道是否有一种方法可以连接多个更新语句以一次执行。
    • 这对我没有帮助。
    • 好吧,如果我的回答不能帮助您为您的问题添加更多详细信息,请因为直到现在您想知道如何更新多行,为此我写了一个答案。
    • 我在我的问题中添加了更多细节。请看一下。请记住,我正在使用 X-editable 进行内联编辑。
    【解决方案3】:

    其实你只需要按照这里的X-table的文档 X-Table

    好的,这是一个信息标签。 data-name="您在数据库中的字段列" data-pk="your primary key" 在data pk中可以输入多个PK。

    现在请试试这个例子。

    HTML:

    <td>
       <a class="myeditable" data-name="fb_url"  data-type="text" data-pk="<?php echo $userid;?>" data-url="post.php" title="Edit"><?php echo ($result['fb_url']);?></a>
    </td>      
    

    JS代码:

    <script>  
            $(document).ready(function() {
                $('.myeditable').editable();
            });
        </script>
    

    Post.php 代码

    if(!empty($_POST['name'])) {
     $pk = $_POST['pk']; // post from data-pk
         $name = $_POST['name']; // post from data-name
         $value = $_POST['value']; // this is your value
                $stmt=$db->prepare("UPDATE social_preferences SET $name= '".$value."' WHERE your_id= '".$pk."'");
                $stmt->execute();
    }else {
        header($_SERVER['SERVER_PROTOCOL'] . ' 422 Unprocessable entity');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多