2015-04-29 98 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'])将确保只使用所需的值。