2011-10-05 109 views
0

我有一個顯示MySQL查詢結果的PHP頁面。它將複選框添加到每一行。選定的行隨後會在提交時插入到另一個表中。計算所選複選框的值

我的應用程序是一個運輸計劃平臺。我正在尋找一種方法來實時顯示所選行的總重量,頁面頂部的一個框顯示所選行的當前總和。

任何人都可以指導我如何將此功能添加到我現有的頁面。

我的代碼當前如下所示:

<?php 
    mysql_connect("localhost", "username", "password")or die("cannot connect");  
    mysql_select_db("databasename")or die("cannot select DB"); 
    $sql="SELECT `crtd dept`,`customer`,`case no`,`gross mass` from despgoods_alldetails where transporttypename= 'localpmb'"; 
    $result=mysql_query($sql); 
    $count=mysql_num_rows($result); 
?> 
<table border=1> 
    <tr> 
     <td> 
      <form name="form1" method="post"> 
       <table> 
        <tr> 
         <td>#</td> 
         <td>Dispatch Area</td>      
         <td>Customer</td> 
         <td>Case Number</td> 
         <td>Weight</td> 
        </tr> 
<?php 
    while($rows=mysql_fetch_array($result)){ 
?> 
        <tr> 
         <td><input type="checkbox" name=check[] value="<?php echo $rows['case no']; ?>"></td> 
         <td><?php echo $rows['crtd dept']; ?></td> 
         <td><?php echo $rows['customer']; ?></td> 
         <td><?php echo $rows['case no']; ?></td> 
         <td><?php echo $rows['gross mass']; ?></td> 
        </tr>         

<?php 
    } 
?> 
        <tr> 
         <td colspan=3><input name="Next" type="submit" id="Next" value="Next"></td> 
        </tr> 
        <?php 



          $check=$_POST['check']; 

         if($_REQUEST['Next']=='Next'){ 
{ 
          $sql="INSERT INTO loaddetails (dispatcharea,Customer, casenumber, weight,LOCStatus) 
          SELECT `crtd dept`,Customer,`case no`,`gross mass`,'in Load Creation' 
          FROM despgoods_alldetails WHERE `Case No` = '$val'"; 

          foreach($check as $key=>$value) 
          { 
          $sql="INSERT INTO loaddetails (dispatcharea,Customer, casenumber, weight,LOCStatus) 
          SELECT `crtd dept`,Customer,`case no`,`gross mass`,'in Load Creation' 
          FROM despgoods_alldetails WHERE `Case No` = '$value'"; 
          $final=mysql_query($sql); 
          if($final) 
          { 
          echo "<meta http-equiv=\"refresh\" content=\"0;URL=planlocalpmbstep2.php\">"; 
          }           } 
           } 
           } 
        // Check if delete button active, start this 



// if successful redirect to php.php 

mysql_close(); 
?> 
</table> 
</form> 
</td> 
</tr> 
</table> 

低於上述代碼的輸出顯示: enter image description here

+1

你是什麼具體問題?有關指導,如果您需要實時,我會說這是用JavaScript完成的。 – hakre

回答

0

正如其他人所說,你必須在Javascript中這樣做,因爲它會在客戶端。我假設你沒有在這個頁面上使用像jQuery或Prototype這樣的庫,如果你只是這麼做的話,那麼使用其中的一個就太過分了。

首先,添加一個HTML元素將包含您的總:

<div>Total: <span id="total">0</span></div> 

,你真的需要但瞭解的信息比特,是對應於每個複選框重量。最簡單的方法是將其存儲在複選框元素本身上。添加一個名爲data-weight的屬性。例如:

<input type="checkbox" name="check[]" value="12" data-weight="1234" /> 

然後,添加一些javascript:

<script> 
    (function() { 
     var totalEl = document.getElementById('total'), 
      total = 0, 
      checkboxes = document.form1['check[]'], 
      handleClick = function() { 
       total += parseInt(this['data-weight'], 10) * (this.checked ? 1 : -1); 
       totalEl.innerHTML = total; 
      }, 
      i, l 
     ; 
     for (i = 0, l = checkboxes.length; i < l; ++i) { 
      checkboxes[i].onclick = handleClick; 
     } 
    }()); 
</script> 

Aaaannd這裏的工作演示爲您服務! http://jsbin.com/ipeduf

+0

嗨@Nickf,感謝您的反饋,在這裏輸入字段您聲明data-weight =「1234」。我的信息來自MySQL數組,所以我不能每行都這樣做。我如何根據MySQL查詢的結果來製作這種動態?謝謝 – Smudger

+0

@RyanSmith當然你可以......! ''input type =「checkbox」name = check [] value =「<?php echo $ rows ['case no'];?> data-weight =」<?php echo $ rows ['gross mass']; ?>「>' – nickf

0

假設你不希望每次都刷新頁面的用戶改變選擇,你需要在瀏覽器中,使用Javascript,而不是使用PHP。

0

我認爲你可以使用javascript函數。 添加onclick屬性的每一個複選框(如果你不想要一個提交按鈕):

<INPUT TYPE="checkbox" NAME="switchBox" onclick="myfunction(this)"> 

然後myfunction的應該類似的東西計算值:

<script language="javascript"> 
var total; 
myfunction(checkboxId){ 
total = total + checkboxId.value; 
} 
</script> 

請注意,這是一個未經檢查的例子,只是爲了給你一個解決方案的想法。

+0

感謝伊萬,任何想法如何做到這一點從MySQL數據庫查詢的動態內容? – Smudger

+0

我thinkt它運作良好,也爲動態加載的內容,其實你傳遞給函數的對象本身,而當網頁被填充了來自查詢中值,則值字段中應包含一定的價值。只需將您的JavaScript代碼添加到頁面即可。 – Ivan

0

爲了避免需要提交和實時更改頁面,我會使用javascript/jQuery。

我會做的是:

  1. 使用HTML5數據屬性附上所有個人weight值表中的行(或複選框...):<tr data-weight="1604">你的第一行;
  2. 對複選框的值進行更改,遍歷所有具有選定複選框的行以獲取並生成總和。這將是這樣的:

    $(「input」)。change(function(){ var total_sum = 0; $('input')。is(':checked')。each(function() (this).parents(「tr」)。data(「weight」); }); });

    (不能得到正確的格式...)

  3. 顯示在您需要的箱的總和。

+0

爲什麼要將'data-weight'加到''而不是複選框本身?另外,如果您跟蹤總數,則無需重新計算所有複選框,只需添加或減去剛剛更改的值即可。 – nickf

+0

@nickf當然,這可以優化,只是爲了說明它如何工作。我可以想象我也會將這個值用於其他事情,所以我可能會將它附加到該行以備將來使用,但在這種情況下沒有真正的原因。 – jeroen

+0

嗨,如果數據來自MySQL數據庫而不是靜態輸入字段,我該如何實現這一點。謝謝。 – Smudger