2014-10-13 8 views
1

Изменено положение:

Я сумел создать регистрационную форму, которая выводит данные в новый 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 = '[email protected]'; 
$m->Password = 'mypass'; 
$m->SMTPSecure = 'SSL'; 
$m->Port = 26; 

$m->From = '[email protected]'; 
$m->FromName = 'My name'; 
$m->addReplyTo('[email protected]', 'Reply Address'); 
$m->AddAddress('[email protected]', '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

Что происходит при запуске этого файла? – will

+1

Если кто-то предложил вам попробовать ['fputcsv'] (http://php.net/manual/en/function.fputcsv.php), прочитали ли вы документы и экспериментировали с ним? –

+0

Вы уверены, что вам не нужна база данных? вы подумали об этом или просто делаете то, что вам рассказывают случайные люди? – meda

ответ

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 Funtion записать содержимое массива в файле, а $ _POST - это массив ... так что вам не нужно создавать новые переменные, вам нужно только использовать функцию md5() в одной переменной.

+0

Это работает, но как я могу удалить заголовки, которые перечислены? - Этот номер строки, имя пользователя, пароль, пользовательская группа, lastaccess 101, kraysak, 5557981401e83c1963412f19c7487965, amdin, "14-10-2014 00:01" – debonator

+0

Он работает без $ headers, но я получаю файл error_log с пара предупреждений PHP. – debonator

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); 

Вы можете адаптировать этот exmaple для вашей ситуации довольно легко.

0

Try:

$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); 

Использование array() на $savearray вместо [] для старых версий PHP.

+0

Спасибо @ toster-cx. Это работает, но как я могу назвать новое имя файла для отправки в качестве вложения? – debonator

+0

Но если я заполняю форму запятой, она ломается и ничего не отправляется. – debonator