提交表单并重写URL后出现错误回显

时间:2013-10-12 12:35:57

标签: php forms .htaccess email echo

大家好,并提前致谢!

我在创建的网站上需要一些帮助。

Localhost中的一切都很好。

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

在重写url(简单的html到简单的php)之后,回应文字说:“我将重播asap”,在我提交表单后不再工作了。 我收到邮件,但是用户看不到“回音”,因此他们不知道表格是否已正确完成以及邮件是否已发送..

所以我想因为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>

1 个答案:

答案 0 :(得分:1)

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

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

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


嗯,这很难从您发布的内容中解读,让我给您一个可以帮助您的完整解决方案。如果您怀疑网址重写是您的问题,请发布完整的.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开发工具更喜欢它(也许只是因为我使用它已经很多年了)。