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

Тема в разделе "PHP", создана пользователем winsofts, 31 май 2011.

Модераторы: latteo
  1. winsofts

    winsofts Постоялец

    Регистр.:
    25 июл 2009
    Сообщения:
    82
    Симпатии:
    0
    есть форма
    Код:
    <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>
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    в аттаче, на php + jquery
    javascript валидирует данные, отправляет POST запрос php, затем подставляет ответ в DOM
    если js отключен работает как обычная форма
     

    Вложения:

    • subscribe.zip
      Размер файла:
      1,9 КБ
      Просмотров:
      16
  3. winsofts

    winsofts Постоялец

    Регистр.:
    25 июл 2009
    Сообщения:
    82
    Симпатии:
    0

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

    прямо с главной по нажатьию кнопки добавить сразу падал в mail_db.txt
     
  4. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    зависит от движка
    если cms или шаблонизатор, то вырезать из subscribe.php все кроме php кода и разместить файл в корне сайта
    а вырезанное вставить в шаблон (сохранив все id и классы у тегов, т.к с ними работает jquery) (js можно вынести в отдельный файл)
    и заменить в js:
    Код:
    var url = $(location).attr('href'); // (адрес обработчика) var url = "other_page.php";
    на
    var url = "subscribe.php";
    также как альтернатива, можно открывать скрипт в ифрейме или в попандере
     
  5. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    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);
    }
    естественно права на запись
     
  6. winsofts

    winsofts Постоялец

    Регистр.:
    25 июл 2009
    Сообщения:
    82
    Симпатии:
    0

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

    Добавлено через 5 минут
     
  7. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    более компактная версия. работает без перезагрузки, отписку можно раскомментировать
    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 КБ
      Просмотров:
      8
    winsofts нравится это.
  8. winsofts

    winsofts Постоялец

    Регистр.:
    25 июл 2009
    Сообщения:
    82
    Симпатии:
    0
    права нужно выставлять какие то?

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

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

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


    посмотреть можно тут p-shup.ru в низу страницы
     
  9. winsofts

    winsofts Постоялец

    Регистр.:
    25 июл 2009
    Сообщения:
    82
    Симпатии:
    0
    когда мимо кнопки жмешь, тогда сохраняет)
     
  10. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    У меня вобще не работает. И кнопка не жмется.
    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]
     
    winsofts нравится это.