2012-08-02 400 views
1

我在網頁上有一個簡單的下拉框。在這裏是美國的所有州。當用戶選擇一個國家, 我想有一個PHP腳本只返回處於用戶選擇狀態(作爲HTML)的公司。使用PHP,讀取csv文件,有條件地輸出到HTML

我有一個CSV文件,該文件內容如下:

STATEID,公司,聯繫人,電話,當時,addy1
3,ABC礦山,喬治,555-555-1234,2012年6月6日,「Bronx,NY」
2,xyz mining,Fred,555-555-2345,2012年6月7日,「Seattle,WA」
0,我的公司,Me,555-555-3456,2012年6月8日,尤金,OR「
3,貴公司,您,555-555-4567,2012年6月9日,」Bronx,NY「

和和和上....

使用上述,具有STATEID = 3

所以通過一個HTML表返回,只有數據(或CSV線)...我已經看到很多使用fgetcsv的方法,但是我將如何完成上述問題?

我想你會搶下拉列表選擇索引值,把它作爲一個條件,通過每個迭代線,只輸出那些擁有3狀態ID ...

理想的情況下,我想在表格中輸出它們,但是列表或直接文本可以。

對於PHP來說相對來說比較新(從我甚至看了它已經有10多年了...) - 我真的很感謝這個幫助。

我知道......數據庫會更容易 - 但我完全控制了csv,寧願暫時走這條路。

<?php 

echo "<table>\n"; 

$row = 0; 
$handle = fopen("mycsvfile.csv", "r"); 

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    if ($row == 0) { 
     // column line 
     $num = count($data); 
     echo "<thead>\n<tr>"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo "<th>" . $data[$c] . "</th>"; 
     } 
     echo "</tr>\n</thead>\n\n<tbody>"; 
    } else { 
     // non-header lines 
     $num = count($data); 
     echo "<tr>"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo "<td>" . $data[$c] . "</td>"; 
     } 
     echo "</tr>\n"; 
    } 
} 
fclose($handle); 

echo "</tbody>\n</table>"; 

?> 

我開始在這之後失去它。這只是輸出的所有數據 - 我還需要它來顯示用戶選擇的唯一狀態數據,通過一個變量,而不是輸出線是爲其他國家沒有選擇。我是使用strpos(),explode(),split()...我是一個dotNet程序員,很少有沒有經驗的PHP - 我希望學習。這是我的第一個項目 - 讓我輕鬆點!我不知道,也沒有使用PHP函數/方法 - 所以我不熟悉它們。 ;)

我已經啓動XAMPP並運行,所以我並不完全沒有希望。

+2

你有問題嗎?我們不會爲你寫代碼。這聽起來像你有足夠的方法來開始編寫代碼,那麼爲什麼你不這樣做呢? – 2012-08-02 20:43:48

+0

發佈您迄今嘗試的代碼。另外,我看到兩個「3」的狀態ID是否意圖? – 2012-08-02 20:44:30

+0

csv數據應該進入數據庫。它會使這更容易和更快。 – 2012-08-02 20:44:37

回答

2

這裏就是我最後做...

<?php 
    $selectedSt = $_GET["states"];// get method - should clean the data... 
$row = 0; 
$handle = fopen("mycsv.csv", "r");//open file 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    if ($row == 0) {//skip first row (headers) 
       $row++;} 
       else { 
     $stAbbrev = $data[0]; 
     if ($stAbbrev == $selectedSt){//show only selected state 
      $num = count($data); 
      $row++; 
      for ($c=0; $c < $num; $c++) { 
       if ($c==0){} 
       else{ 
        if ($data[$c]==""){}//if empty line 
        else{echo $data[$c]."<br />";}}}//write array item 
        echo "<br />";}}}//end it all with some white space 
    fclose($handle);  
?> 
0

您需要循環才能按照here所述的順序讀取文件。在循環中,每一行將以字段值的形式作爲數組返回。測試用戶選擇的stateId,如果匹配,則將數組存儲在另一個數組中。至於輸出,再次循環,這次通過結果數組,按照您認爲合適的方式將每個元素的html標記包裝起來,並將該標記串聯到一個字符串中。將此字符串發送到客戶端。

1

我打算假設你的數據是在一個數組中。如何做到這一點的行爲留給讀者。

$state_data = array( 
    array( 
    'id' => '3', 
    'company' => 'abc mining', 
    'contact' => 'George', 
    'phone' => '555-555-1234', 
    'when' => 'june 6 2012', 
    'addy' => 'Bronx,NY'), 
    array(
    'id' => '2', 
    'company' => 'xyz mining', 
    'contact' => 'Fred', 
    'phone' => '555-555-2345', 
    'when' => 'june 7 2012', 
    'addy' => 'Seattle,WA'), 

... 

); 

然後,我只需要篩選出ID爲3的所有子陣列。

function filter_out($var) { 
    return ('3' == $var['id']); 
} 

$my_states = array_filter($state_data, "filter_out"); 

最後,輸出:

<table summary="state data"> 
<tr> 
    <th>ID</th> 
    <th>Company</th> 
    <th>Contact</th> 
    <th>Phone</th> 
    <th>When</th> 
    <th>Addy</th> 
</tr> 

<?php 
foreach($my_states as $my_state) { 
?> 
<tr> 
    <td><?php echo($my_state['id']); ?></td> 
    <td><?php echo($my_state['company']); ?></td> 
    <td><?php echo($my_state['contact']); ?></td> 
    <td><?php echo($my_state['phone']); ?></td> 
    <td><?php echo($my_state['when']); ?></td> 
    <td><?php echo($my_state['addy']); ?></td> 
</tr> 
<?php } ?> 

</table> 
+0

會堵塞這個,Bryan。謝謝你的發佈 - 我會讓你知道的... – 2012-08-02 21:24:02

+0

謝謝,布賴恩。對這個項目感到厭煩......最終今天完成了。我最終使用了你的想法 - 並修改它以適應應用程序。 – 2012-09-26 19:54:59

+0

@MM:太好了!很高興它對你有效。 – BryanH 2012-09-27 16:13:48