- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Ситуация. Есть скрипт для отправки писем с сайта. Кроме отправки данных по почте, эти данные сохраняются в текстовый файл. Каждая запись выглядит так:
В скрипте, насколько я понял, данные записываются этим фрагментом:
function gettext(){
global $fields;
$text="";
if (isset($_SERVER['REMOTE_ADDR'])) $text.="REMOTE_ADDR: ".$_SERVER['REMOTE_ADDR']."\n";
if (isset($_SERVER['HTTP_VIA'])) $text.="HTTP_VIA: ".$_SERVER['HTTP_VIA']."\n";
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $text.="HTTP_X_FORWARDED_FOR: ".$_SERVER['HTTP_X_FORWARDED_FOR']."\n";
foreach($fields as $key => $field){
$text.=$field[0].": ".$_POST[$key]."\n";
}
return $text;
}
function sendform($text){
global $email, $subject, $logfile, $from;
mail($email, $subject, $text, "From: $from\nContent-Type: text/plain; charset=windows-1251\n");
$fp = fopen ($logfile, "a");
fputs ($fp, $text."\n----------------------------\n\n");
fclose($fp);
}
А надо чтобы во-первых, не писались данные из поля Enquiry не писались в файл, а во-вторых чтобы запись была вида:
Если это не сложно делается, подскажите пожалуйста как?
P.S. Если сделать так, чтобы данные из поля Enquiry не писались в файл, не видя сам скрипт сложно, пусть оно будет, это не критично.
А по почте отправлять тот же формат, что и в файл писать или прежний? И версия PHP?
Поменять $text.=$field[0].": ".$_POST[$key]."\n"; на $text.=$_POST[$key].";"; и убрать данные которые не нужны
Письмом отправлять такой же текст или другой?
Поменять $text.=$field[0].": ".$_POST[$key]."\n"; на $text.=$_POST[$key].";"; и убрать данные которые не нужны
Письмом отправлять такой же текст или другой?
А если пользователь введет в какое-то поле текст с ';'?
PHP 5 (используется функция fputcsv). Структура csv файла будет одинаковая для всех форм - REMOTE_ADDR,HTTP_VIA,HTTP_X_FORWARDED_FOR, дальше поля с $fields, кроме Enquiry. После замены скрипта - не забыть сохранить старый лог и обнулить его.
Добавить в начале функции $fields
global $email, $subject, $logfile, $from, $fields;
Если PHP4, взять fputcsv на http://www.php.net/manual/en/function.fputcsv.php#77866
Роман, версия PHP4. По почте надо отправлять в том виде, в котором сейчас. Что-то голова к вечеру совсем не работает, что теперь сделать исходя из этих данных, с вашим кодом?
Заменить функцию sendform($text) на новую и в тот же файл положить функцию fputcsv (ссылка выше). По почте будет как раньше, в логе будет корректный csv. После замены скрипта - сохранить где-то старый лог и обнулить его. Это необходимо сделать потому что старый лог в другом формате.
Shtogrin дело говорит, есть еще вариант сделать вот так:
function gettext(){
global $fields;
$text="";
if (isset($_SERVER['REMOTE_ADDR'])) $text.="REMOTE_ADDR: ".$_SERVER['REMOTE_ADDR']."\n";
if (isset($_SERVER['HTTP_VIA'])) $text.="HTTP_VIA: ".$_SERVER['HTTP_VIA']."\n";
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $text.="HTTP_X_FORWARDED_FOR: ".$_SERVER['HTTP_X_FORWARDED_FOR']."\n";
$ar = array();
foreach($fields as $key => $field){
$text.=$field[0].": ".$_POST[$key]."\n";
$ar[] = $field[0].": ".$_POST[$key]."\n";
}
return $text;
}
function sendform($text){
global $email, $subject, $logfile, $from;
mail($email, $subject, $text, "From: $from\nContent-Type: text/plain; charset=windows-1251\n");
// вставить данный кусок
$ar = explode("\n", $text);
$tofile = array();
foreach($ar as $row) {
if (preg_match("#^([^\:]+)\:(.*)$#msi", $row, $m)) {
if ($m[1]=="Enquiry") continue;
$tofile[0][] = trim($m[1]);
$tofile[1][] = trim($m[2]);
}
}
$text = implode(";",$tofile[0])."\n".implode(";",$tofile[1]);
// конец вставки
$fp = fopen ($logfile, "a");
fputs ($fp, $text."\n----------------------------\n\n");
fclose($fp);
}
Попроще и по сути нужно лишь добавить в функцию sendform блок:
Данный вариант будет работать, если все данные однострочные, и имеют именно ту структуру как в примере, если Enquiry многострочный параметр, идет в конце и в принципе в логе не нужен, то возможного мусора в логе можно избежать заменив
на
Всем огромное спасибо! Буду разбираться.
Удалено. :) Разобрался. Все работает как надо :)
Люди, подскажите пожалуйста, как добавлять дату к каждой записи? Т.е. чтобы помимо тех данных что забивает человек, проставлялась дата автоматически, когда была заполнена форма.