2016-09-29 115 views
0

我已經創建了一個的PostgreSQL數據庫(有PG管理員)含有多於10表填充有不同區的砷測試。我需要根據HTML表單的用戶輸入生成html表格。檢索從PostgreSQL數據庫和顯示數據在表 - 顯示根據複選框某些數據檢查

此外,我已經在我的HTML表單中放入了一些複選框,其中包含要選擇的區域名稱,並通過檢查它們可以限制要選擇的區域以及哪個區域的數據。

每個複選框代表區(這是單獨的表或模式中的PostgreSQL)我的數據庫的名稱;所以隨着複選框的選擇(用戶可以選擇一個複選框或多個複選框),顯示任何被選中的項目。

到目前爲止,我設法寫了一個連接到數據庫的php腳本,當我的複選框沒有時顯示錯誤消息。

問題:我知道如何選擇個別區域(即區域是單個表格),但不能給用戶多種選擇。

信息:所有表具有相同的列名稱,只有數據因區域名稱的更改而不同。

我做了什麼: - 我在Stakoverflow參觀了許多解決方案,但所有的建議我選擇同一個表的字段dynamicaly但不表 我曾參觀過: -

http://stackoverflow.com/questions/25527975/how-to-use-checkboxes-to-retrieve-specific-data-in-a-database 

這是一個簡單的html表格,僅供兩區查看。

<html> 
    <head> 
    <title>Jasper Report</title> 
     </head> 
     <body> 
     <h1 align="center">ARSCENIC TEST REPORT</h1> 
     <b>Districts: </b> <br> 
     <form method="post" action="app.php"> 
      <input type="checkbox" name="reg1" value="Banke" checked /> Banke<br> 
      <input type="checkbox" name="reg2" value="Bara" /> Bara <br><br> 
      <input type="submit" value="Generate"/> 
     </form> 
     </body> 
     </html> 

單個分區表的選擇PHP代碼是

<?php 
    require_once __DIR__ . "/vendor/autoload.php"; 
    use Jaspersoft\Client\Client; 

    $c = new Client(
      "localhost", 
      "8080", 
      "jasperadmin", 
      "jasperadmin", 
      "/jasperserver" 
     ); 


      //$dist = $_GET['dist']; 
      //echo $dist; 

     $db = pg_connect('host=localhost port=5433 dbname=BankeDB user=postgres password=admin'); 


     $userclass = array('0-5','6-10','11-15', '>15','Total'); 


    $btotal = array(); 

    $query = "select 
    sum(case when ".'"district_n"'." ='Banke' AND ".'"vdc_name"'."='Belahari' AND ".'"NO_OF_USERS"'." <= '5' AND ".'"conc_arsc"'." <= '10' then 1 else 0 end), 
    sum(case when ".'"district_n"'."='Banke' AND ".'"vdc_name"'."='Belahari' AND ".'"NO_OF_USERS"'." >= '6' AND ".'"NO_OF_USERS"'." <= '10' AND ".'"conc_arsc"'." <= '10' then 1 else 0 end), 
    sum(case when ".'"district_n"'."='Banke' AND ".'"vdc_name"'."='Belahari' AND ".'"NO_OF_USERS"'." >= '11' AND ".'"NO_OF_USERS"'." <= '15' AND ".'"conc_arsc"'." <= '10' then 1 else 0 end), 
    sum(case when ".'"district_n"'."='Banke' AND ".'"vdc_name"'."='Belahari' AND ".'"NO_OF_USERS"'." > '15' AND ".'"conc_arsc"'." <= '10' then 1 else 0 end), 
    sum(case when ".'"district_n"'."='Banke' AND ".'"vdc_name"'."='Belahari' AND (".'"NO_OF_USERS"'."<='5' or (".'"NO_OF_USERS"'." >='6' and ".'"NO_OF_USERS"'." <='10') or (".'"NO_OF_USERS"'." >='11' and ".'"NO_OF_USERS"'." <='15') or ".'"NO_OF_USERS"'." >'15') AND ".'"conc_arsc"'." <= '10' then 1 else 0 end) 
    from public.".'"Arsenic_Test_Banke"'.""; 
    //echo $query; 


    $btresult = pg_query($db, $query); 
    while($btresults = pg_fetch_row($btresult)){ 
      $count = count($btresults); 
      $y = 0; 
      while ($y < $count) 
      { 
       $c_row = current($btresults); 
       $btotal[] = $c_row; 
       next($btresults); 
       $y = $y + 1; 
      } 

     } 


    ?> 

    /* 
    Other related queries here as above 
    */ 

    <table width="600" height="300" cellspacing="2" border="1" align="center"> 
     <tr> 
     <th colspan=13>Tubewells by Arsenic Concentration Levels</th> 
     </tr> 

     <tr> 
     <th>User Class (No of Users)</th> 
     <th>No.(0-10)</th> 
     <th>%(0-10)</th> 
     <th>No.(11-50)</th> 
     <th>%(11-50)</th> 
     <th>No.(51-100)</th> 
     <th>%(51-100)</th> 
     <th>No.(101-300)</th> 
     <th>%(101-300)</th> 
     <th>No.(>300)</th> 
     <th>%(>300)</th> 
     <th>Total</th> 
     <th>%</th> 
      </tr> 

     <tr> 

     <?php 
      for($i=0; $i<5; $i++){ 
     ?> 
     <tr> 
      <td><?php echo $userclass[$i];?></td> 
     <td><?php echo $btotal[$i];?></td> 
     <td><?php echo $perb10[$i];?></td> 
     <td><?php echo $bettotal[$i];?></td> 
     <td><?php echo $pbet[$i];?></td> 
     <td><?php echo $b51_100total[$i];?></td> 
     <td><?php echo $pb51_100[$i];?></td> 
     <td><?php echo $bt101_300total[$i];?></td> 
     <td><?php echo $pb101_300[$i];?></td> 
     <td><?php echo $abov300total[$i];?></td> 
     <td><?php echo $pabov300[$i];?></td> 
     <td><?php echo $total[$i];?></td> 
     <td><?php echo $ptotal[$i];?></td> 


     </tr> 
     <?php 
       } 
     ?> 

    </table> 


    <? 
    pg_close($db); 

    ?> 

現在的問題是如何使表中的多種選擇,使用戶可以同時選擇多個區分析合併數據。

謝謝大家。

回答

0

您可以使用聯盟:

SELECT * FROM Arsenic_Test_Banke 
UNION 
SELECT * FROM Arsenic_Test_Bara 

而且你可以用它在一個如果:

val = SELECT 1 WHERE 1=2 
if banke is checked 
    val = val + union 
       SELECT * FROM Arsenic_Test_Banke 
if bara is checked 
    val = val + 'union 
       SELECT * FROM Arsenic_Test_Bara' 
+0

,而不是 「SELECT 1 WHERE 1 = 2」,你需要「選擇1爲yourcolumn, 1 as yourcolumn2 .... WHERE 1 = 2「 –

+0

感謝您的回答,但我不需要SQL查詢,因爲我已經有查詢選擇兩區之間的數據,但我堅持如何在PHP中動態實現此查詢,以便用戶應該能夠在同一個表中的一個或多個區的組合之間選擇數據! 如果你還有任何想法,那麼我將不勝感激。謝謝! –

相關問題