2

大家好,提前感谢!

我需要一些关于我正在创建的网站的帮助。

本地主机中的一切都很好。

所以我在一个页面(contact.php)中得到了表格(和一个 email-action.php ; 用于该过程)。

在重写 url(简单的 html 到简单的 php)后,回显文本说:“我会尽快重播”,在我提交表单后不再工作。我收到了邮件,但用户看不到“回声”,因此他们不知道表格是否已正确填写以及电子邮件是否已发送..

所以我猜想由于url重写而发生了一些事情,因为在本地所有文件都在最后得到.php时工作。

恢复:电子邮件已正确发送,但回显未显示..

编辑 :

这是我的 htaccess

http://pastebin.com/J00GcwYd

这是表单的(开始)代码:

<form onSubmit="return submitForm();" action="" method="post" class="form-a" name="homefrm1" id="homefrm1">
                       <input type="hidden"  name="event" value="start" /> 

电子邮件操作的代码:

<?php //ob_start();
if(isset($_REQUEST['event']) && $_REQUEST['event']!=''){$event=$_REQUEST['event'];}else{$event='';}
define('SITE_EMAIL', 'myemail@mail.com');

if(isset($_POST['copyemail_check'])) { $adddata = '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td height="22" colspan="2" align="center">Une copie de cet e-mail a été envoyé.O</td></tr></table>';} else { $adddata="";}

    /* recipients */
    $to1= SITE_EMAIL;
    /* subject */
    $subject1 = "Contact ";
    /* message */
    $message1 = '<table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="33%"><font color="#f35D14" size="2" face="Tahoma">Nom :</font></td>
        <td width="67%" height="22"><font color="#333333" size="-1" face="Tahoma">'.$_POST['name'].'</font></td>
      </tr>

      <tr>
        <td width="33%"><font color="#f35D14" size="2" face="Tahoma">E-mail :</font></td>
        <td width="67%" height="22"><font color="#333333" size="-1" face="Tahoma">'.$_POST['email'].'</font></td>
      </tr>

      <tr>
        <td width="33%"><font color="#f35D14" size="2" face="Tahoma">Message :</font></td>
        <td width="67%" height="22"><font color="#333333" size="-1" face="Tahoma">'.$_POST['msg'].'</font></td>
      </tr>

    </table>';
    /* To send HTML mail, you can set the Content-type header. */
    $headers1  = "MIME-Version: 1.0\r\n";
    $headers1 .= "Content-type: text/html; charset=iso-8859-1\r\n";
    /* additional headers */
    $headers1 .= "From: ".$_POST['name']." <".$_POST['email'].">\r\n";
    /* and now mail it */

    if(isset($_POST['copyemail_check'])) { 
        $to2 = $_POST['email'];
        mail($to2, $subject1, $message1, $headers1);
        $message1 = $message1.$adddata;
      }

  mail($to1, $subject1, $message1, $headers1);

  echo "<div class='alert alert-email-success'>Merci, nous avons bien reçu votre message et nous vous répondrons dans les meilleurs délais.</div>"; 

?>

联系页面代码结尾:

<script type="text/javascript">
    function submitForm() {
            $.ajax({type:'POST', url:'email-action.php', data:$('#homefrm1').serialize(), success: function(response) {
                $('#alert').find('.message')(response);                                     
            }});                
            return false;
        }       
  </script>
4

1 回答 1

1

我们解决了这个问题,在 Gosax 向我发送页面的 URL 后,使用 Firebug 很容易发现问题。问题是 jQuery 部分中的这行代码$('#alert').find('.message')(response);。这很明显,我应该马上发现它。jQuery 的find()函数返回一个 jQuery 对象,可以在该对象上调用该对象的另一个函数,但它不是一个函数,就像它被使用的那样。解决方案是:

$('#alert').find('.message').html(response);

以下是我对该问题的(旧)原始答案。


好吧,这很难从您发布的内容中破译,让我给您一个可能对您有所帮助的完整解决方案。如果您怀疑 URL 重写是您的问题,请发布您的完整信息.htaccess,我也可以在那里为您提供帮助。

您的表单页面可能如下所示:

<!doctype html>
<html dir="ltr" lang="fr">
<head>
  <!-- HTML head stuff -->
</head>
<body>
  <!-- HTML -->
  <form id="contact" action="/contact.php" method="post">
    <p><label for="from">Your email address</label><input id="from" name="from" type="email"></p>
    <p><label for="body">Message</label><textarea id="body" name="body"></textarea></p>
    <p><input type="submit"></p>
  </form>
  <!-- HTML -->
  <script>
  // You already have jQuery as I've seen.
  $(function () {
    var $contact = $('#contact');
    $contact.submit(function (e) {
      e.preventDefault();
      $.when($contact.fadeOut(), $.post('/email.php', { from: $('#from').val(), body: $('#body').val() }, function (response) {
        $contact.html(response);
      })).done(function () {
        $contact.fadeIn();
      });
    });
  });
  </script>
</body>
</html>

你的 PHP 脚本:

<?php

$from = filter_input(INPUT_POST, "from", FILTER_VALIDATE_EMAIL, FILTER_REQUIRE_SCALAR);
$body = filter_input(INPUT_POST, "body", FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_REQUIRE_SCALAR);

if ($from !== false && $body !== false) {
  mail("foo@bar", "new contact", $body, implode("\r\n", array(
    "MIME-Version: 1.0",
  "Content-type: text/html; charset=iso-8859-1",
    "FROM: {$from}",
  )));
  echo "<div class='alert alert-email-success'>Merci, nous avons bien reçu votre message et nous vous répondrons dans les meilleurs délais.</div>";
}
else {
  echo "<div class='alert alert-email-error'>Email address and/or message is invalid or empty.</div>";
}

?>

这是您尝试做的事情的一种更简单、更安全的方式。但请张贴您的.htaccess.

还可以考虑使用浏览器的开发控制台(通常是F12键)并在点击提交按钮时检查控制台,您应该能够调试那里发生的事情。我也可以为 Firefox 推荐Firebug,我比 Firefox 开发工具更喜欢它(也许只是因为我使用了这么多年)。

于 2013-10-12T14:41:32.677 回答