更新情况:
我已设法创建一个注册表单,将数据输出到新的CSV文件,以便用于单独的数据库。但是,发送附件的代码不起作用,但系统将文件存储到一个单独的文件夹中(我必须强调这是在我测试时)。
我的问题是,我可以创建CSV文件并通过电子邮件发送吗?如果是这样,我需要做什么?
我也知道存在安全风险:一个建议是将CSV文件存储在根目录之外。这是万无一失的,如果没有,任何人都可以提出任何建议吗?
我的代码是:
<?php
$_POST['password'] = md5($_POST['password']);
$headers=array_keys($_POST);
$file = "csv/" . $_POST['username'].date('Ymdhis').".csv"; //filename
$file = fopen($file, 'a');
fputcsv($file, $headers);
fputcsv($file, $_POST);
fclose($file);
require_once('email/PHPMailerAutoload.php');
$m = new PHPMailer;
$m->isSMTP();
$m->SMTPAuth = true;
$m->SMTPDebug = 0;
$m->Host = 'mymail.com';
$m->Username = 'me@mymail.com';
$m->Password = 'mypass';
$m->SMTPSecure = 'SSL';
$m->Port = 26;
$m->From = 'me@mymail.com';
$m->FromName = 'My name';
$m->addReplyTo('me@mymail.com', 'Reply Address');
$m->AddAddress('me@mymail.com', 'My name');
$m->isHTML(true);
$m->addAttachment('csv/data.csv', 'data.csv');
$m->Subject = 'New feed ';
$m->Body = '<p>This is an email just sent from our website</p><p><strong>Please import into your database.</strong></p>';
$m->AltBody = 'This is the body. Please import into the database';
if($m->send()) {
echo '<h1>Thank you</h1> <p>We have received your Registration and will send you confirmation details shortly.</p>';
} else {
echo $m->ErrorInfo;
}
我还有一个复选框字段,需要用逗号分隔值来编写,例如1,2,3。我怎么写这个?
任何帮助/建议都将一如既往地感激不尽。
非常感谢提前。
答案 0 :(得分:1)
$_POST['id']="101"; //example data
$_POST['username']="kraysak"; //example data
$_POST['password']="grumpycat"; //example data
$_POST['usergroup']="admin"; //example data
$_POST['lastaccess']="14-10-2014 00:01"; //example data,
$_POST['password'] = md5($_POST['password']);
$headers=array_keys($_POST);
$file = $_POST['username'].date('Ymdhis').".csv"; //filename
$file = fopen($file, 'a');
fputcsv($file, $headers ); //write headers (key of the $_POST array (id,username,password,etc)
fputcsv($file, $_POST );
fclose($file);
这将创建一个名为kraysak20141014010253.csv
的文件,其中包含下一个信息:
id,username,password,usergroup,lastaccess
101,kraysak,5557981401e83c1963412f19c7487965,amdin,"14-10-2014 00:01"
我很难解释,(我的英语不是很好),但fputcsv功能在文件中写入数组的内容,而$ _POST是一个数组...所以,你不需要创建新变量,你只需要在一个变量中使用md5()函数。
答案 1 :(得分:0)
fputcsv由两个参数组成;位置和内容。所以;
fputcsv(location, content);
或
$fileNameVariable = 'blah';
$fileName = $fileNameVariable . date('Ymdhis') . '.csv';
$fp = fopen('/exampleDirectoryName/' . $fileName, 'w');
$headers = array ('info1', 'info2', 'info3');
fputcsv($fp, $headers);
您可以非常轻松地根据自己的情况调整此情况。
答案 2 :(得分:0)
尝试:
$csvname=md5(rand());
$fp = fopen("csv/$csvname.csv", "w");
$savearray = [ $name, $email, $password, $usergroup, $lastsid, $fname, $lname, $lastaccess, $company, $phone, $addone, $addtwo, $city, $stateprov, $country, $postalcode, $rescom, $addbook, $subscriptions, $affilid, $affilcommpct, $affilsalestodate, $affilcommearned, $affilcommowed, $affilcommpaid, $whlsalepct, $show_currency, $loyaltypoints ];
fputcsv($fp, $savearray);
fclose($fp);
对于较旧的php版本,请array()
使用$savearray
代替[]
。