2015-04-29 96 views
0

我很難將所有發佈數據保存到csv文件並將這些值通過電子郵件發送到地址。我有超過125個職位變量,我很困難。這裏是我的代碼示例迄今:PHP處理大型表格

<?php 
$x23 = "date"; 
$x24 = "fclose"; 
$x25 = "fopen"; 
$x26 = "fwrite"; 
$x27 = "mail"; 
$x28 = "time"; 
extract($_POST); 
$a1 = $_POST['fname']; 
$a2 = $_POST['lname']; 
$a3 = $_POST['email']; 
$a4 = $_POST['landline']; 
$a5 = $_POST['mobile']; 
$a6 = $_POST['addr1']; 
$a7 = $_POST['addr2']; 
$a8 = $_POST['towncity']; 
$a9 = $_POST['postcode']; 
$x1d = $a1 . "," . $a2 . "," . $a3 . "," . $a4 . "," . $a4 . "," . $a5 . "," . $a6 . "," . $a7 . "," . $a8 . "," . $a9 . " 
"; 
$quotation = $x25("file5.csv", "a"); 
$x26($x1d, $quotation); 
$x24($x1d); 
header('Location: mydomain.co'); 
$x20 = '[email protected]'; 
$x22 = 'Quotation - My Company'; 
$x27($x20, $x21, $x23, $x1f); 
?> 

我沒有把所有的變量在這個問題(不知道如何做到這一點,但我認爲fputcsv()將做的工作,保存所有125正在編寫變量,但是我從未使用過多少PHP,也不確定數組和fputcsv())。

我將如何遍歷所有我的後期變量並將它們作爲一行追加到csv?

任何幫助,將不勝感激。

+0

如果所有變量都放到csv中,您可以使用foreach循環,但應該按正確的順序放置它。這是個問題嗎? – Asgu

+0

您可以爲通過POST獲取的輸入的名稱屬性添加一個「csv_」前綴。然後你只需要在$ _POST循環時檢查前綴的存在 –

回答

0

您首先需要在解決一個問題的時候遵守紀律。

(1) Create the CSV data in a variable 
(2) Write the data to a file 
(3) Send an email 
(4) Include an attachment in the email 

甚至將其分解成更多步驟。試圖一次性解決一堆問題只會讓自己更加困惑,特別是如果你剛剛開始編程。

因此我們來解決「創建CSV」文件。

您可以輕鬆地遍歷您$_POST並創建一個CSV文件是這樣的:

$csv_line = ''; 
$sep = ''; // don't put a comma before the 1st element 
foreach ($_POST as $k -> $v) { 
    $csv_line .= $sep . "\"$v\""; 
    $sep = ','; // put a comma before the 2nd, 3rd, etc. elements 
} 

然而,至少有2個問題與此有關。您可能不希望將$ _POST中的每個元素都放入CSV中,並且不能保證$ _POST中的這些元素的順序。

因此,我們將創建一個只等領域,我們有興趣,並確保他們是在爲了我們想保持它的獨立陣列:

$myFields = array('email', 
        'fname', 
        'lname', 
        'junk', 
        ...); 
$csv_line = ''; 
$sep = ''; // don't put a comma before the 1st element 
foreach ($myFields as $k) { 
    $csv_line .= $sep . "\"$_POST[$k]\""; 
    $sep = ','; // put a comma before the 2nd, 3rd, etc. elements 
} 

現在,所有你需要做的就是寫出來將其插入文件中,找出如何發送電子郵件,並找出如何將文件附加到電子郵件。但至少你距離更近一步......

1

你正在尋找的功能是implode。它使用特定的「膠水」將數組分解爲單個字符串,在本例中爲','。

所以,最簡單的方法是使用implode(',', $_POST),但如果不是所有的值都應該被使用,那麼通過改變表單元素的名稱就可以很好地處理它。

在表格中,如果將名稱從"fname"更改爲"data[fname]",並對其餘元素執行相同操作,那麼$_POST['data']將是一個包含所有值的數組。然後使用implode(',', $_POST['data'])將確保只使用所需的值。