簡體   English   中英

一次更新1行,當對同一用戶使用x-editable時,每行具有不同的值

[英]Update 1 row at a time and each row has a different value when using x-editable for the same user

對於此示例,我有一個HTML表,其中包含2行(可能更多)。 中間列是可編輯的,HTML表中的每一行都是數據庫中的不同列。 當我編輯第1行並刷新頁面時,第2行現在與第1行具有相同的值。我不希望這樣做。 每行的用戶ID(pk)相同。 有關創建新記錄的文檔說,這可以與更新現有記錄一起使用,但對我沒有幫助。 我正在尋找盡可能多的幫助。

這是我桌子的圖片: 在此處輸入圖片說明

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

例如,如果我更新第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臨時移動

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

我假設您使用oracle SQL。

將要更新的所有用戶放入一個數組中,並使用foreach對其進行迭代。

對每個執行更新語句。

我不知道是否可以在一個語句中運行多個更新,但是我不這樣認為。

編輯:為確保僅影響一行,請盡可能使用唯一標識符,例如用戶ID。

實際上,您只需要遵循此處X表的X表文檔

好的,這是一個信息標簽。 您可以在數據庫中輸入data-name =“您在數據庫中的字段列” 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');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM