【问题标题】:Contact form with file attachment?带有文件附件的联系表?
【发布时间】:2011-09-06 17:44:04
【问题描述】:

我有一个联系表格,它是我需要联系表格时使用的 wordpress 页面模板。一切正常,但我想添加添加文件附件的功能,这样当用户填写他们的姓名等时,他们可以上传照片,该照片将作为附件发送给我。

我有一个完美的工作联系表,我只想向其中添加该功能。我当前的所有代码都完成了这一切,它将人的姓名发送到他们的电子邮件地址和他们的信息到我的电子邮件中,我所缺少的只是附件功能。我一直在查看许多具有此功能的联系表格,但将该功能集成到我的 sendmail.php 似乎非常困难,因为编码风格完全不同。这是一个实际的演示。 demo

这是我的 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;
            }
  ?>

谢谢!

【问题讨论】:

    标签: forms php


    【解决方案1】:

    您可以阅读这个简单的教程,了解需要做什么才能将文件上传支持添加到您当前的表单:

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

    希望对你有帮助!

    已编辑


    上传完成后,你可以这样做:

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

    这样做是通过从 PHPMailer 调用 AddAttachment 并使用刚刚从服务器的 TMP 文件夹上传的文件来向您的电子邮件添加附件......因此不需要实际存储文件。

    【讨论】:

    • @Zull 我不想上传任何东西。图像附加到电子邮件中,而不存储在服务器等上。不过,谢谢!
    • @Stam:对不起,我的错!无论如何,如果您想将图像附加到电子邮件中,您需要进行正常上传,但不是将图像存储到服务器,而是将其附加到电子邮件......所以,你不要“moveuploadedfile”到任何地方,您只需在电子邮件中添加附件!
    • 好的,很酷,我该如何做最后的部分,将它实际添加为附件?
    • @Stam:刚刚编辑了我的答案,以包含 PHPMailer 类的“AddAttachment”部分,并参考您的表单临时上传的文件。假设“上传”了您的输入文件类型的名称。
    【解决方案2】:

    你可以使用

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

    它有一个上传字段以及所有验证选项,非常易于使用。

    您只需要输入简码,就可以在任何地方使用联系表。

    【讨论】:

      猜你喜欢
      • 2013-11-11
      • 2017-11-12
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多