Форма обратной связи с вложенным файлом? - PullRequest
1 голос
/ 06 сентября 2011

У меня есть контактная форма, которая является шаблоном для страниц на WordPress, который я использую, если мне нужна контактная форма. Все работает нормально, но я хочу добавить возможность добавления файлового вложения, чтобы, когда пользователь вводит свое имя и т. Д., Он мог загрузить фотографию, и эта фотография будет отправлена ​​мне как вложение.

У меня есть идеальная рабочая контактная форма, и я только хочу добавить эту функциональность к ней. Весь мой текущий код делает все это, он отправляет имя человека, его адрес электронной почты и их сообщение на мою электронную почту, все, что мне не хватает, это функция вложения. Я просматривал множество контактных форм с этой функцией, но интегрировать эту функцию в мой sendmail.php кажется очень сложным, так как стиль кодирования совершенно другой. Вот демонстрация этого в действии. демо

Это мой php файл, в котором есть форма.

<?php get_header(); ?>
 <script type="text/javascript">
         $(document).ready(function(){
              $('#contact').ajaxForm(function(data) {
                 if (data==1){
                     $('#success').fadeIn("slow");
                     $('#bademail').fadeOut("slow");
                     $('#badserver').fadeOut("slow");
                     $('#contact').resetForm();
                     }
                 else if (data==2){
                         $('#badserver').fadeIn("slow");
                      }
                 else if (data==3)
                    {
                     $('#bademail').fadeIn("slow");
                    }
                    });
                 });
        </script>
<!-- begin colLeft -->
    <div id="colLeft">
    <!-- Begin .postBox -->
        <div class="postBox">
            <div class="postBoxTop"></div>
            <div class="postBoxMid">
                <div class="postBoxMidInner first clearfix">
            <h1>Contact Us</h1>
            <p><?php echo get_option('alltuts_contact_text')?></p>

            <p id="success" class="successmsg" style="display:none;">Your email has been sent! Thank you!</p>

            <p id="bademail" class="errormsg" style="display:none;">Please enter your name, a message and a valid email address.</p>
            <p id="badserver" class="errormsg" style="display:none;">Your email failed. Try again later.</p>

            <form id="contact" action="<?php bloginfo('template_url'); ?>/sendmail.php" method="post">
            <label for="name">Your name: *</label>
                <input type="text" id="nameinput" name="name" value=""/>
            <label for="email">Your email: *</label>

                <input type="text" id="emailinput" name="email" value=""/>
            <label for="comment">Your message: *</label>
                <textarea cols="20" rows="7" id="commentinput" name="comment"></textarea><br />
            <input type="submit" id="submitinput" name="submit" class="submit" value="SEND MESSAGE"/>
            <input type="hidden" id="receiver" name="receiver" value="<?php echo strhex(get_option('alltuts_contact_email'))?>"/>
            </form>

            </div>
        </div>
        <div class="postBoxBottom"></div>
        </div>
     <!-- End .postBox -->
    </div>
    <!-- end colleft -->

            <?php get_sidebar(); ?> 

<?php get_footer(); ?>

и вот файл, который обрабатывает отправку почты.

    <?php
    if(isset($_POST['submit'])) {
      error_reporting(E_NOTICE);
      function valid_email($str)
      {
      return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
         }
      if($_POST['name']!='' && $_POST['email']!='' && valid_email($_POST['email'])==TRUE && strlen($_POST['comment'])>1)
      {
          $to = preg_replace("([\r\n])", "", hexstr($_POST['receiver']));
          $from = preg_replace("([\r\n])", "", $_POST['email']);
          $subject = "Website contact message from ".$_POST['name'];
          $message = $_POST['comment'];

          $match = "/(bcc:|cc:|content\-type:)/i";
            if (preg_match($match, $to) ||
                preg_match($match, $from) ||
                preg_match($match, $message)) {
              die("Header injection detected.");
            }
          $headers = "From: ".$from."\r\n";
          $headers .= "Reply-to: ".$from."\r\n";

    if(mail($to, $subject, $message, $headers))
          {
              echo 1; //SUCCESS
          }
          else {
              echo 2; //FAILURE - server failure
          }
      }
      else {
      echo 3; //FAILURE - not valid email

      }
      }else{
         die("Direct access not allowed!");
       }
        function hexstr($hexstr) {
              $hexstr = str_replace(' ', '', $hexstr);
              $hexstr = str_replace('\x', '', $hexstr);
              $retstr = pack('H*', $hexstr);
              return $retstr;
            }
  ?>

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Вы можете прочитать этот простой учебник, чтобы узнать, что нужно сделать, чтобы добавить поддержку загрузки файлов в вашу текущую форму:

http://www.tizag.com/phpT/fileupload.php

Надеюсь, это поможет!

РЕДАКТИРОВАНИЕ


После процесса загрузки вы можете сделать это следующим образом:

if (file_exists($_FILES['uploaded']['tmp_name'])) {
    $mail->AddAttachment($_FILES['uploaded']['tmp_name'], $_FILES['uploaded']['name']);
}

Для этого нужно добавить вложение в электронное письмо, позвонив по телефону.AddAttachment из PHPMailer и использование файла, только что загруженного из папки TMP вашего сервера ... поэтому фактическое хранение файла не требуется.

0 голосов
/ 16 июня 2013

Вы можете использовать

http://wordpress.org/plugins/contact-form-7/

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

Вам просто нужно ввести шорткод, и вы можете использовать контактную форму где угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...