2011-09-06 74 views
0

我想做一個項目,其中它顯示3前一個月和當前月..現在我的問題是我不知道在哪裏或如何反映這個MySQL數據到一個表中的PHP ...任何人都可以教我嗎?從PHP中的MySQL數據創建表

請原諒我,如果我不給你解釋系統好,因爲我只是一個努力的程序員..

這應該是表將如何看起來像: http://www.fileden.com/files/2011/7/27/3174077//1.JPG

這裏是PHP代碼和MySQL查詢,我要投入到一個表:

<form action="" method="post" class="niceform"> 
<fieldset> 
    <legend>Job Orders</legend>\ 
    <table> 
<tr> 
<th>SSA</th> 
<th>Months</th> 
</tr> 

     <?php 

$datefrom= $_POST['timestamp']; 
$dateto=$_POST['timestamp1']; 

$parsemonth=""; 
$parseday ="01"; 

$conditionmonth=$parsemonth-3; 


//january 
if ($conditionmonth == '1'){ 

$sql="SELECT 
a.specialist_partner_ID 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-01-01', INTERVAL 3 MONTH) and   DATE_SUB('2011-09-30', INTERVAL 3 MONTH) THEN a.job_order_number ELSE null END) As December, 
count(CASE WHEN a.receivedDate between DATE_SUB('2011-01-01', INTERVAL 2 MONTH) and DATE_SUB('2011-09-30', INTERVAL 2 MONTH) THEN a.job_order_number ELSE null END) As November 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-01-01', INTERVAL 1 MONTH) and DATE_SUB('2011-09-30', INTERVAL 1 MONTH) THEN a.job_order_number ELSE null END) As October 
,count(CASE WHEN a.receivedDate between '2011-01-01' and '2011-01-30'THEN a.job_order_number ELSE null END) As Jauary 
,count(job_order_number) As Total 
FROM jo_partner a 
WHERE a.receivedDate BETWEEN '2011-01-01' AND '2011-12-31' 
GROUP BY a.specialist_partner_ID"; 
} 

//february 
else if ($conditionmonth == '2'){ 

$sql="SELECT 
a.specialist_partner_ID 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-02-01', INTERVAL 11 MONTH) and DATE_SUB('2011-02-29', INTERVAL 3 MONTH) THEN a.job_order_number ELSE null END) As November 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-02-01', INTERVAL 10 MONTH) and DATE_SUB('2011-02-29', INTERVAL 2 MONTH) THEN a.job_order_number ELSE null END) As December 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-02-01', INTERVAL 9 MONTH) and DATE_SUB('2011-02-29', INTERVAL 1 MONTH) THEN a.job_order_number ELSE null END) As January 
,count(CASE WHEN a.receivedDate between '2011-02-01' and '2011-02-29'THEN a.job_order_number ELSE null END) As February 
,count(job_order_number) As Total 
FROM jo_partner a 
WHERE a.receivedDate BETWEEN '2011-01-01' AND '2011-12-31' 
GROUP BY a.specialist_partner_ID"; 
} 

//march 
else if ($conditionmonth == '3') 
{ 

$sql="SELECT 
a.specialist_partner_ID 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-03-01', INTERVAL 3 MONTH) and  DATE_SUB('2011-03-31', INTERVAL 3 MONTH) THEN a.job_order_number ELSE null END) As December 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-03-01', INTERVAL 2 MONTH) and DATE_SUB('2011-03-31', INTERVAL 2 MONTH) THEN a.job_order_number ELSE null END) As Jauary 
,count(CASE WHEN a.receivedDate between DATE_SUB('2011-03-01', INTERVAL 1 MONTH) and DATE_SUB('2011-03-31', INTERVAL 1 MONTH) THEN a.job_order_number ELSE null END) As February 
,count(CASE WHEN a.receivedDate between '2011-03-01' and '2011-03-31'THEN a.job_order_number ELSE null END) As March 
,count(job_order_number) As Total 
FROM jo_partner a 
WHERE a.receivedDate BETWEEN '2011-01-01' AND '2011-12-31' 
GROUP BY a.specialist_partner_ID"; 
} 

等等等等...直至十二月

while ($row = mysql_fetch_row($sql) 
{ 

} 
?> 
    </tr></table> 
</fieldset> 

的情況是,當我選擇月份可查看該月的報告中,前一月,一月只有數據纔可以看到最後3 consrctive月,前月和十一月

+9

你真的真的真的需要讀了大約[here文檔] (http://php.net/heredoc),或者至少在拋棄大量的HTML時跳出PHP模式。你會過早地磨損你的''鑰匙。 –

+5

也查找mysql注入&mysql JOINS –

+0

是的,我已經在我的MySQL中加入了JOIN ...我的問題是,我不知道如何把這些連接放入PHP中的表格形式... –

回答

1

鑑於表是建立使用該類型的數據:

<tr> 
    <td>item1</td> 
    <td>item2</td> 
</tr> 

這是非常簡單的使用SQL建表,只是用表標籤括號中的數據:

SQL代碼只,不推薦,因爲它留下一個XSS安全漏洞!
只有當你是100%肯定你的數據庫裏面的數據是安全的

/*escape all data coming from a user */ 
/*or even better just escape all incoming data *period* */ 
$SSAID = mysql_real_escape_string($_SESSION['SESS_SSA_ID']); 

/*don't use 2 queries if you can do it in one */ 
$result = mysql_query("SELECT CONCAT('<tr>',GROUP_CONCAT(
           CONCAT('<td>',ug.group_name,</td>), SEPARATOR ' ') 
           ,'</tr>') as tablestring 
         FROM user_group ug 
         INNER JOIN user u ON (ug.usr_group_ID = u.user_group_id) 
         WHERE u.SSA_ID = ''$SSAID')"; 

$row = mysql_fetch_row($result); 
echo "here comes the table"; 
echo $row['tablestring']; 

此代碼構造整個表中的SQL使用。的另一種選擇是循環儘管值和拼湊表在while循環:

使用while循環代碼示例中,脫輸出,防止XSS

$result = mysql_query("SELECT ug.group_name 
         FROM user_group ug 
         INNER JOIN user u ON (ug.usr_group_ID = u.user_group_id) 
         WHERE u.SSA_ID = ''$SSAID')"; 
$table = "<tr>"; 
while ($row = mysql_fetch_row($result)); 
{ 
    $table .= "<td>".htmlspecialchars($row['group_name'], ENT_QUOTES, 'UTF-8')."</td>"; 
} 
$table .= "</tr>"; 
echo "here comes the table"; 
echo $table; 

要記住的要點

  • 使用mysql_real_escape_string()將所有$vars注入到SQL語句中。
  • 總是使用htmlspecialchars()轉義回顯到屏幕上的數據來防止XSS。
  • 擺脫select *的習慣,只選擇你需要的東西。
  • 請勿使用兩個查詢並使用php作爲它們之間的信使,請改爲使用一個查詢,參閱關於SQL聯接的教程。

鏈接
SQL注入:How does the SQL injection from the "Bobby Tables" XKCD comic work?
XSS預防:How to prevent XSS with HTML/PHP?
PHP-MySQL的教程:http://www.tizag.com/mysqlTutorial/
GROUP_CONCAT:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

1

我不知道我是否正確理解,但繼承我的嘗試。

其標題創建表:現在

<table> 
<tr> 
<th>Header 1</th> 
<th>Header 2</th> 
</tr> 

,你可以用你從你的MySQL查詢得到的數據填滿它。我不知道你的數據是如何構建的,但有一種方法可以這樣做:

<?php 
    foreach($groupName as $group){ 
     echo " 
      <tr> 
       <td>".$group->a."</td> 
       <td>".$group->b."</td> 
      </tr> 
     "; 
    } 
?> 

現在就關閉表格。

再一次,我不太瞭解你的目標是什麼,但我希望這有助於。

+0

我只是想創建一個從MySQL查詢表..反正,我會嘗試你的建議,我會回來告訴發生什麼..感謝您的快速回復。 –

+0

http://www.fileden.com/files/2011/7/27/3174077//2.JPG這是我的MySQL的結構... –

+0

是否會有另一列,如果idk它是十月?你是手動添加它嗎?每個月?如果您的申請超過1年,該怎麼辦?它會混淆數據,對吧? –

1

在第一個mysql查詢中應該有另一個WHERE子句來指定所需的日期。另外,正如評論中所建議的,您應該對來自用戶的所有數據使用mysql_real_escape_string(),以防止數據庫被黑客入侵。

如果你的表存儲與PHP運行時間)一個int(存儲時,你可以從現在(無論本月你選擇或)替代三個月,把它的查詢,如下所示:

$january = 1293840000; // january 1st 00:00 unix timestamp 
$SSAID = mysql_real_escape_string($SSAID); // injection.. 
$query = mysql_query("SELECT * FROM user WHERE SSA_ID = '$SSAID' AND timeAdded <= '$january'"); 

然後使用

while ($row = mysql_fetch_row($result) 
{ 

} 

和使用定界符遍歷數據所有你需要做的就是。例如

$html = <<<HTML 
<table> 
blahblah 
</table> 
HTML; 

希望這會有所幫助。將根據請求提供代碼,但這些建議應該足以生成你想要的內容。

編輯:

//looping through the mysql results and putting them in a table 
$tables = "<table>"; 
while ($row = mysql_fetch_row($result)) { 
    $tables .= "<tr>"; 
    foreach ($row as $key => $value) { 
     $tables .= <<<HTML 
     <td>$value</td> 
HTML; 
     } 
     $tables .= "</tr>"; 
} 

你能不能給我們的var_dump($ mysql_fetch_assoc($結果));結果,因爲這會給我們一個什麼樣的查詢返回的結果的想法,所以我們可以提供一個準確的答案(代碼而)

+0

@mkramo先生我已經在我的問題上面更改了我的代碼......如果他選擇了那個月,它會轉到該月的sql查詢,但我不知道如何構造它,所以它將返回一個表格形式..謝謝 –