2015-06-29 33 views
1

我有三個數據庫表。使用拖放表發送和刪除記錄到數據庫

-Paid

-Partially付費

-Owes

當有人爲我送自己的user_id,姓名等,以帳戶註冊我的「欠」數據庫表,然後輸出他們的名字進入我在'Owes'列中有一個拖放表。到目前爲止,如果我將任何人的姓名移動到任何其他類別(付費/部分付費),我不知道如何從Owes數據庫中刪除該記錄,並將名稱插入到新的數據庫表中,以便更改是永久性的。

真正讓我失望的是如何用拖放表來做到這一點。我不知道如何應用這樣的邏輯,即當某些東西被放入該列時,過去的記錄被刪除,並且新的東西被添加到該特定的表中,或者如何在沒有提交按鈕或頁面重新加載的情況下進行更改。

什麼是我可以做到這一點的方式,以及我如何構造它?

PHP

<?php 
//Payment Section 

    $con = mysqli_connect("localhost", "root", "", "db"); 
    $paid_run = mysqli_query($con,"SELECT * FROM paid ORDER BY id DESC"); 
    $partially_paid_run = mysqli_query($con,"SELECT * FROM partial_payment ORDER BY id DESC"); 
    $owes_run = mysqli_query($con,"SELECT * FROM owes ORDER BY id DESC"); 
    $paid_numrows = mysqli_num_rows($paid_run); 
    $partially_paid_numrows = mysqli_num_rows($partially_paid_run); 
    $owes_numrows = mysqli_num_rows($owes_run); 

     if($paid_numrows > 0){ 
      while($row = mysqli_fetch_assoc($paid_run)){ 
       $paid_id = $row['user_id']; 
       $paid_name = $row['name']; 
      } 
     } 

    if($partially_paid_numrows > 0){ 
      while($row = mysqli_fetch_assoc($partially_paid_run)){ 
       $partially_paid_id = $row['user_id']; 
       $partially_paid_name = $row['name']; 
       $partially_paid_amount = $row['payment']; 
      } 
     } 

    if($owes_numrows > 0){ 
      while($row = mysqli_fetch_assoc($owes_run)){ 
       $owes_id = $row['user_id']; 
       $owes_name = $row['name']; 
      } 
     } 
?> 
$(function() { 
    $("#paid, #partially_paid, #owes").sortable({ 
     connectWith: ".tdPayment", 
     remove: function(e, ui) { 
     var $this = $(this); 
     var childs = $this.find('div'); 
     if (childs.length === 0) { 
      $this.text("Nothing"); 
     } 
     }, 
     receive: function(e, ui) { 
     $(this).contents().filter(function() { 
      return this.nodeType == 3; //Node.TEXT_NODE 
     }).remove(); 
     }, 
    }).disableSelection(); 
    }); 

<table class="paymentTable" id="dragTable"> 
     <tr> 
      <th class="thPayment">Paid</th> 
      <th class="thPayment">Partially Paid</th> 
      <th class="thPayment">Owes</th> 
     </tr> 
     <tr> 
      <td class="tdPayment" id="paid"> 
          <div> 
      <?php 
       if ($paid_name == true) { 
        echo $paid_name; 
       } else { 
        echo "No one has paid"; 
       } 
      ?> 
          </div> 
      </td> 
      <td class="tdPayment" id="partially_paid"> 
      <div> 
      <?php 
       if ($partially_paid__name == true) { 
        echo $partially_paid__name . " - " . $partially_paid_amount; 
       } else { 
        echo "No one has made a partial payment"; 
       } 
      ?> 
      </div> 
      </td> 
      <td class="tdPayment" id="owes"> 
      <div> 
      <?php 
       if ($owes_name == true) { 
        echo $owes_name; 
       } else { 
        echo "Everyone has paid something"; 
       } 
      ?> 
      </div> 
      </td> 
     </tr> 
    </table> 

回答

1

下面是關於如何操作的粗略概述。我建議使用jQuery,一個JavaScript庫,它有很多有用的東西。

  1. 使用jQuery draggabledroppable實現拖放部件。一個很好的指南可以找到here
  2. 編寫一個PHP頁面,以您想要的方式更新數據庫。
  3. 使用jQuery在丟棄某些內容時調用該頁面。這可以使用Ajax完成。

的第3部分

澄清我建議在尋找可投放文檔中的photo manager得到的類似的東西一個完整的工作示例。

對於這個工作,你需要設置的HTML,使其具有一定的類名和一些數據屬性:

<h1>Owes</h1> 
<div class="bin" data-bin-id="1"> 
    <div class="user" data-user-id="5">Eva</a> 
    <div class="user" data-user-id="8">Anna</a> 
</div> 

<h1>Partially paid</h1> 
<div class="bin" data-bin-id="2"> 
    <div class="user" data-user-id="2">Tom</a> 
    ... 
</div> 

... 

然後,我們需要實現一些JavaScript是需要時調用PHP的護理用戶刪除的內容:

jQuery(".bin").droppable({ 
    accept: ".user", 
    drop: function(event, ui) { 

    //Get the ID of the bin the user was dropped into. 
    var intBinID = jQuery(this).attr("data-bin-id"); 

    //Get the ID of the user that was dropped. 
    var intUserID = ui.droppable.attr("data-user-id"); 

    //Make an ajax call to the PHP page. 
    jQuery.ajax("update.php?binid=" + intBinID + "&userid=" + intUserID); 

    } 
}); 

此外,你可能想update.php返回的東西,讓JavaScript的知道它的工作或沒有,如果失敗中止的下降。

免責聲明:由於我沒有設置這個項目的所有部分,所以我沒有測試過這個代碼。

+0

我已經完成了第1步,第2步我可以非常輕鬆地完成。我只是不知道如何將我所做的操作與拖放表集成到更新db中。我不確定如果我將某個人的姓名從Owes轉到Paid列,腳本如何識別名稱進入該列,以及該列如何表示我真正想要它代表的內容。 – Becky

+0

謝謝你真的給我一個好的開始。這有助於一堆。我有一個問題,但。當名稱將通過while循環從我的數據庫中輸出時,我該如何幫助數據用戶ID。我可以有一天5個名字,然後5個人可以註冊,然後我有10個。這些名稱不會是靜態代碼。 – Becky

+0

您將必須使用PHP生成HTML代碼。爲用戶查詢數據庫,然後遍歷結果並執行類似'echo'

' . $row['name'] . '
';'的操作。 [Here](http://codular.com/php-mysqli)是MySQLi的一個很好的介紹,可以幫助你做到這一點。 – Anders

1

更簡單的方法來做到這一點,是通過創建,你把所有的用戶的獨立用戶表。然後,在一個單獨的表中,像你已經擁有的表一樣,你只需保留該用戶的Id(也許一些信息與他欠或已經付出的多少有關)。 這樣,當您必須插入或更新有關用戶狀態的任何信息時,您只需從這些表中插入/刪除用戶的Id。

有關用戶的信息將始終安全並保存在自己的表中。

+0

這就是我現在正在做的。我有一個單獨的用戶表,然後我只通過user_id發送到其他三個單獨的數據庫表。我只是不知道如何用拖放方法來做到這一點。 – Becky

+1

還應該補充一點,不要爲他們的付款狀態保留三個單獨的表格,而是一個名爲「PAYMENT_STATUS」的列,您將欠款設置爲「1」,部分付款設置爲「2」 '3'爲付費或類似的東西。這意味着你不用做一個'DELETE'和一個'INSERT'就可以做一個'UPDATE'。 – Anders

+0

你知道我可以如何使用拖放表工作嗎? – Becky