помогите из формы на сайте записать в текстовый файл на сервере(собрать email)

winsofts

Постоялец
Регистрация
25 Июл 2009
Сообщения
83
Реакции
1
есть форма
Код:
<form name=getnews method="post" action="subscribe.php">
        <span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Подписаться на новости</span>
        <input type="text" name="email" class="egetnews"  value="Ваш e-mail" onfocus="javascript: if(this.value == 'Ваш e-mail') this.value = '';" onblur="javascript: if(this.value == '') this.value = 'Ваш e-mail';"/>
        <input type="submit" class="addemail"  value="" />
        </form>

нужно передать email скрипту, что бы он его отправил по нажатию кнопки.
без всяких подтверждений и переходов на др.страницу.
просто записал, какждая запись с новой строки в mail.data

попробывал 3 скрипта с поисковика, ничего не подходит.
помогите люди добрые!)

пробывал такое, не подходит, т.к. не получилось ни записать в итоге в файл и переходит дальше
Код:
<html> 
 <head> 
     <title>Подписка на рассылку<</title> 
     <meta http-equiv="content-type" content="text/html; charset=windows-1251"> 
     <meta http-equiv="content-language" content="ru"> 
 </head> 

 <body bgcolor="darkseagreen" color="black"> 
 <?php 
    error_reporting(0); 

    $dbFile = "maillist.data"; 

 if ($action == "save") 
 { 
    function checkMail($newMail) 
    { 
     $bIsMail = false; 

     if (eregi("^[_\.0-9a-z-]+@([0-9a-z][-0-9a-z\.]+)\.([a-z]{2,3,4}$)", $newMail)) 
       $bIsMail = true; 

     if ($bIsMail) 
       return true; 
     else 
       return false; 
    } 

    $mail = trim(strtolower($mail)); 

    function findMail($newMail) 
    { 
     $dbFile = "maillist.data"; 
     $dbList = file($dbFile); 

     for ($i = 0; $i < sizeof($dbList); $i++) 
      if ($newMail == trim($dbList[$i])) 
       $bIsPresent = true; 

     if ($bIsPresent) 
      return true; 
     else 
      return false; 
    } 

    if (is_file($dbFile)) 
    { 
     $maillist = file($dbFile); 

     if ($mail != '') 
     { 
      if (checkMail($mail)) 
      { 
       if (!findMail($mail)) 
       { 
        $maillist[] = "\n$mail"; 
        ?> 
        <font color="red">Ваш e-mail успешно добавлен в базу данных рассылки!</font> 
       <?php 
       } 
       else 
       { 
       ?> 
        <font color="red">Внимание! Введенный e-mail уже есть в базе данных рассылки!</font> 
       <?php 
       } 
      } 
      else 
      { 
      ?> 
       <font color="red"><strong>Ошибка! Вы ввели недопустимый e-mail адрес!</strong></font> 
      <?php 
      } 
     } 
     else 
     { 
     ?> 
      <font color="red">Внимание! Необходимо заполнить поле e-mail!</font> 
     <?php 
     } 
    } 
    else 
    { 
    ?> 
     <font color="red"><strong>Ошибка! Не найден файл базы данных!</strong></font> 
    <?php 
    } 
 } 
 ?> 

 <br><br> 
 <strong>ПОДПИСКА НА РАССЫЛКУ</strong> 
 <form method="post" action="mailserv.php?action=save"> 
    Введите e-mail: 
     <input type="text" name="mail" size="25"> 
     <input type="submit" name="submit" value="Подписка"> 
 </form> 

 <br> 
 <strong>ОТКАЗАТЬСЯ ОТ РАССЫЛКИ</strong> 
 <form method="post" action="mailserv.php?action=delete"> 
     Введите e-mail: 
     <input type="text" name="delete" size="15"> 
     <input type="submit" name="submit" value="Отказаться"> 
 </form>

<?php 
 if ($action == "delete" $action == "save") 
 { 
    $bIsDelete = false; 

    if ($action == "delete") 
     $maillist = file($dbFile); 

    $fw = fopen($dbFile, "w"); 

    for ($i = 0; $i < sizeof ($maillist); $i++) 
    { 
     if (trim(strtolower($delete)) == trim(strtolower($maillist[$i]))) 
     { 
      if ($delete != '') 
      { 
      ?> 
       <font color="red">Введенный e-mail успешно удален из базы данных рассылки!</font> 
       <?php 
       $bIsDelete = true; 
      } 
     } 
     else 
     { 
      fputs($fw, $maillist[$i]); 
     } 
    } 

    fclose($fw); 

    if ($delete != '') 
    { 
     if (!$bIsDelete) 
     { 
     ?> 
      <font color="red"><strong>Ошибка! Введенный e-mail не найден в базе данных рассылки!</strong></font> 
      <?php 
     } 
    } 
 } 
 ?> 
 </body> 

 </html>
 
в аттаче, на php + jquery
javascript валидирует данные, отправляет POST запрос php, затем подставляет ответ в DOM
если js отключен работает как обычная форма
 

Вложения

  • subscribe.zip
    1,9 KB · Просмотры: 19
в аттаче, на php + jquery
javascript валидирует данные, отправляет POST запрос php, затем подставляет ответ в DOM
если js отключен работает как обычная форма


как мне на главной форму оформить? что бы сразу отправлял в базу, не переходил на страницу сайт.ру/subscribe.php

прямо с главной по нажатьию кнопки добавить сразу падал в mail_db.txt
 
зависит от движка
если cms или шаблонизатор, то вырезать из subscribe.php все кроме php кода и разместить файл в корне сайта
а вырезанное вставить в шаблон (сохранив все id и классы у тегов, т.к с ними работает jquery) (js можно вынести в отдельный файл)
и заменить в js:
Код:
var url = $(location).attr('href'); // (адрес обработчика) var url = "other_page.php";
на
var url = "subscribe.php";
также как альтернатива, можно открывать скрипт в ифрейме или в попандере
 
PHP:
<html> 
 <head> 
     <title>Подписка на рассылку<</title> 
     <meta http-equiv="content-type" content="text/html; charset=windows-1251"> 
     <meta http-equiv="content-language" content="ru"> 
 </head> 
 <body bgcolor="darkseagreen" color="black"> 
 <?php 
    error_reporting(0); 
    $dbFile = "maillist.data"; 
//сделай так для проверки
$action = $_REQUEST['action'];


 if ($action == "save") 
 { 
    function checkMail($newMail) 
    { 
     $bIsMail = false; 
     if (eregi("^[_\.0-9a-z-]+@([0-9a-z][-0-9a-z\.]+)\.([a-z]{2,3,4}$)", $newMail)) 
       $bIsMail = true; 
     if ($bIsMail) 
       return true; 
     else 
       return false; 
    } 
    $mail = trim(strtolower($mail)); 
    function findMail($newMail) 
    { 
     $dbFile = "maillist.data"; 
     $dbList = file($dbFile); 
     for ($i = 0; $i < sizeof($dbList); $i++) 
      if ($newMail == trim($dbList[$i])) 
       $bIsPresent = true; 
     if ($bIsPresent) 
      return true; 
     else 
      return false; 
    } 
    if (is_file($dbFile)) 
    { 
     $maillist = file($dbFile); 
     if ($mail != '') 
     { 
      if (checkMail($mail)) 
      { 
       if (!findMail($mail)) 
       { 
        $maillist[] = "\n$mail"; 
        ?> 
        <font color="red">Ваш e-mail успешно добавлен в базу данных рассылки!</font> 
       <?php 
       } 
       else 
       { 
       ?> 
        <font color="red">Внимание! Введенный e-mail уже есть в базе данных рассылки!</font> 
       <?php 
       } 
      } 
      else 
      { 
      ?> 
       <font color="red"><strong>Ошибка! Вы ввели недопустимый e-mail адрес!</strong></font> 
      <?php 
      } 
     } 
     else 
     { 
     ?> 
      <font color="red">Внимание! Необходимо заполнить поле e-mail!</font> 
     <?php 
     } 
    } 
    else 
    { 
    ?> 
     <font color="red"><strong>Ошибка! Не найден файл базы данных!</strong></font> 
    <?php 
    } 
 } 
 ?> 
 <br><br> 
 <strong>ПОДПИСКА НА РАССЫЛКУ</strong> 
 <form method="post" action="mailserv.php?action=save"> 
    Введите e-mail: 
     <input type="text" name="mail" size="25"> 
     <input type="submit" name="submit" value="Подписка"> 
 </form> 
 <br> 
 <strong>ОТКАЗАТЬСЯ ОТ РАССЫЛКИ</strong> 
 <form method="post" action="mailserv.php?action=delete"> 
     Введите e-mail: 
     <input type="text" name="delete" size="15"> 
     <input type="submit" name="submit" value="Отказаться"> 
 </form>
<?php 
 if ($action == "delete" $action == "save") 
 { 
    $bIsDelete = false; 
    if ($action == "delete") 
     $maillist = file($dbFile); 
    $fw = fopen($dbFile, "w"); 
    for ($i = 0; $i < sizeof ($maillist); $i++) 
    { 
     if (trim(strtolower($delete)) == trim(strtolower($maillist[$i]))) 
     { 
      if ($delete != '') 
      { 
      ?> 
       <font color="red">Введенный e-mail успешно удален из базы данных рассылки!</font> 
       <?php 
       $bIsDelete = true; 
      } 
     } 
     else 
     { 
      fputs($fw, $maillist[$i]); 
     } 
    } 
    fclose($fw); 
    if ($delete != '') 
    { 
     if (!$bIsDelete) 
     { 
     ?> 
      <font color="red"><strong>Ошибка! Введенный e-mail не найден в базе данных рассылки!</strong></font> 
      <?php 
     } 
    } 
 } 
 ?> 
 </body> 
 </html>

если нужно просто записать в файл адреса, то так
HTML:
<form name="getnews" method="post" action="">
        <span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Подписаться на новости</span>
        <input type="text" name="email" class="egetnews"  value="Ваш e-mail" onfocus="javascript: if(this.value == 'Ваш e-mail') this.value = '';" onblur="javascript: if(this.value == '') this.value = 'Ваш e-mail';"/>
        <input type="submit" class="addemail"  value="" />
        </form>

В той части, что выводит шапку страницы.
PHP:
if($_REQUEST['email']) {
//здесь всевозможные проверки
//если удовлетворяет требованиям запись в файл
$file = "mail.txt"; // файл
$fh = fopen($file, "a+") or die("File ($file) does not exist!"); 
if ( is_writeable($file) ) fwrite($fh, $_REQUEST['email']."\n"); 
else "Записать не удалось";
fclose($fh);
}
естественно права на запись
 
зависит от движка
если cms или шаблонизатор, то вырезать из subscribe.php все кроме php кода и разместить файл в корне сайта
а вырезанное вставить в шаблон (сохранив все id и классы у тегов, т.к с ними работает jquery) (js можно вынести в отдельный файл)
и заменить в js:
Код:
var url = $(location).attr('href'); // (адрес обработчика) var url = "other_page.php";
на
var url = "subscribe.php";
также как альтернатива, можно открывать скрипт в ифрейме или в попандере


симпла цмс у меня.
можете прикрепить архивчик с уже готовым, не могу понять что именно нужно их кода, что можно удалить. буду очень признателен. в кодинге ну совсем не очень

Добавлено через 5 минут
PHP:
если нужно просто записать в файл адреса, то так
[HTML]
<form name="getnews" method="post" action="">
        <span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Подписаться на новости</span>
        <input type="text" name="email" class="egetnews"  value="Ваш e-mail" onfocus="javascript: if(this.value == 'Ваш e-mail') this.value = '';" onblur="javascript: if(this.value == '') this.value = 'Ваш e-mail';"/>
        <input type="submit" class="addemail"  value="" />
        </form>
[/HTML]
В той части, что выводит шапку страницы.


тут смущает action="" так и надо, что там ничего не стоит, никакого адреса скрипта?[COLOR="Silver"]

[SIZE=1]---------- Post added at 22:24 ---------- Previous post was at 21:18 ----------[/SIZE]

[/COLOR]попробывал способы выше, ничего не вышло, кнопка просто не нажимается
 
более компактная версия. работает без перезагрузки, отписку можно раскомментировать
HTML:
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/mail.js"></script>
<form name="getnews" method="POST" id="add_mail" action="subscribe.php">
<span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Подписаться на новости</span> 
<input type="text" name="mail" class="egetnews" value="Ваш e-mail" />
<input type="hidden" name="act" value="add" />
<input type="submit" class="addemail" id="sub" value="Подписка"/>
<div class="res"></div>
</form>
<!--
<form method="POST" id="del_mail" action="subscribe.php">
<span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Отписаться от новостей</span>
<input type="text" name="mail" class="egetnews" value="Ваш e-mail" />
<input type="hidden" name="act" value="del" />
<input type="submit" class="addemail" id="unsub" value="Отписаться" />
<div class="res"></div>
</form>
-->
аттач обновлен, теперь в utf-8. также улучшена валидация
 

Вложения

  • form.zip
    3,1 KB · Просмотры: 12
более компактная версия. работает без перезагрузки, отписку можно раскомментировать
HTML:
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/mail.js"></script>
<form name="getnews" method="POST" id="add_mail" action="subscribe.php">
<span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Подписаться на новости</span> 
<input type="text" name="mail" class="egetnews" value="Ваш e-mail" />
<input type="hidden" name="act" value="add" />
<input type="submit" class="addemail" id="sub" value="Подписка"/>
<div class="res"></div>
</form>
<!--
<form method="POST" id="del_mail" action="subscribe.php">
<span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Отписаться от новостей</span>
<input type="text" name="mail" class="egetnews" value="Ваш e-mail" />
<input type="hidden" name="act" value="del" />
<input type="submit" class="addemail" id="unsub" value="Отписаться" />
<div class="res"></div>
</form>
-->
файл subscribe.php из предыдущего аттача
срипты этого аттача распаковать в папку 'js'

права нужно выставлять какие то?

Добавлено через 15 минут
все ок, работает!
но только с небольшим косяком

1е - почему то нужно нажимать на верхний правй угол кнопки
2е - перед тем как кнопка пропадает, сверху на ней появлется какая то надпись, высвечивается вопросиками. (кнопка графическая)

как сделать все ок?


посмотреть можно тут p-shup.ru в низу страницы
 
когда мимо кнопки жмешь, тогда сохраняет)
 
У меня вобще не работает. И кнопка не жмется.
нужно передать email скрипту, что бы он его отправил по нажатию кнопки.
без всяких подтверждений и переходов на др.страницу.
просто записал, какждая запись с новой строки в mail.data
HTML:
action=""
Отправляет данные на страницу с формой.
Единственное, что надо , для того, чтобы сделать запись в файл, принять $_post и записать его в файл
Если трудно найти где вставить код, используй свою форму:
[HTML]<form name="getnews" method="post" action="subscribe.php">
<span class="sgetnews">&nbsp;&nbsp;&nbsp;&nbsp;Подписаться на новости</span>
<input type="text" name="email" class="egetnews" >
<input type="submit" class="addemail" value="" />
</form>[/HTML]
В файл subscribe.php вставь код, что ниже.
[PHP]

<?php
$error = "";
$_REQUEST['email']=trim($_REQUEST['email']);
if(!preg_match("/^[a-z0-9\.\-_]+@[a-z0-9\-_]+\.([a-z0-9\-_]+\.)*?[a-z]+$/is", $_REQUEST['email']) or $_REQUEST['email']=="") {
$error = true;
}

if(!$error) {
//mail.txt - путь к файлу с мылами
$file = "mail.txt"; // файл
$fh = fopen($file, "a+") or die("File ($file) does not exist!");
if ( is_writeable($file) ) fwrite($fh, $_REQUEST['email']."\n");
fclose($fh);
}
Header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
?>

[/PHP]
 
Назад
Сверху