2012-04-12 14 views
0

これは何度も回答されている問題だと確信していますが、問題を把握するのに時間を費やしても連絡フォームに問題があります。Jquery/Ajax連絡フォームがメールを送信しない

私がフォームを送信すると、私はsubmit.phpページにThank youメッセージでリダイレクトされますが、$ email_toアドレスには電子メールは送信されません。

それは私が間違ってやっているものがあるかどう

誰も私に言うことができるでしょう(これはしかし何も影響を与えるのだろうか?)このコードは、Wordpressのテーマ内であり、それは現在、私のローカルマシン上で実行されていることは注目に値しますここに?私はこのプラグインを間違って使用していると感じています。このAjaxゲームには全く新しいものです!

  • jQueryのフォームプラグイン(http://pastebin.com/cC5899ns)
  • jqueryの検証(http://pastebin.com/GyYuVwAH):私は、次のプラグインを使用してい

    ここで

は私のHTMLです:

<div id="footer"> 
       <h3>Contact</h3> 
       <div id="preview"></div> 
       <form name="form" id="form" action="<?php bloginfo('template_directory'); ?>/_/inc/submit.php" method="post"> 
        <input type="text" value="Your name" name="name" /> 
        <input type="tel" value="Your contact number" name="email" /> 
        <textarea name="message">Quick Note</textarea> 
        <button>Submit</button> 
       </form> 
      </div> 

私のJS:

$(document).ready(function(){ 

$('#form').validate(
{ 
rules: 
{ 
"name":{ 
required:true, 
maxlength:40 
}, 
"email":{ 
required:true, 
email:true, 
maxlength:100 
}, 
"message":{ 
required:true 
}}, 

messages: 
{ 
"name":{ 
required:"This field is required" 
}, 
"email":{ 
required:"This field is required", 
email:"Please enter a valid email address" 
}, 
"message":{ 
required:"This field is required" 
}}, 

submitHandler: function(form){ 
$(form).ajaxSubmit({ 
target: '#preview', 
success: function() { 
alert('hello'); 
$('#foooter').slideUp('fast'); 
} 
}); 
} 

}) 
}); 

マイSubmit.php

<?php 
include("db.php"); 

if($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    $name=mysql_real_escape_string($_POST['name']); 
    $email=mysql_real_escape_string($_POST['email']); 
    $message=mysql_real_escape_string($_POST['message']); 
    if(strlen($name)>0 && strlen($email)>0 && strlen($message)>0) 
     { 
      $email_to = "*********"; 
      $email_from = $email; 
      $email_subject = "Contact Form"; 
      $email_message = stripslashes($message); 

      $headers = 'From: '.$email_from."\r\n" . 
      'Reply-To: '.$email_from."\r\n"; 

      mail($email_to, $email_subject, $email_message, $headers); 

      $time=time(); 
      mysql_query("INSERT INTO contact (name,email,message,created_date) VALUES('$name','$email','$message','$time')"); 
      echo "<h1>Thank You !</h1>"; 
     } 
} 
?> 

私をdb.php

<?php 
$mysql_hostname = "localhost"; 
$mysql_user = "root"; 
$mysql_password = "*****"; 
$mysql_database = "******"; 
$prefix = ""; 
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Opps some thing went wrong"); 
mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong"); 

?> 
+1

どこが間違っているのかを段階的に追跡する必要があります。エンドツーエンドのプロセスを提供しましたが、これを自分で絞り込むことができます。アラート(「こんにちは」)が表示されていますか? Firebugなどを使用して、要求がサーバーに送信されていることを確認します。最後に、保存とdbコードを確認する必要があります。 –

+0

Chromeを使用している場合は、Javascriptコンソールがあります(レンチボタンを押すと 'ツール 'の内側にあります)。これにより、すべてのエラーと警告(存在する場合)がわかります。 –

+0

これは決してあなたのエラーとは関係ありませんが、$( '#foooter')にあります。slideUp( 'fast'); 「フッター」のスペルが間違っています。 :) – Jan

答えて

0

あなたcontactテーブルは、レコードで更新なっていますか?もしそうなら、間違っていると思われる2つのことがあります。

1)mailのドキュメントから:Lines should not be larger than 70 characters.

2)ローカルホストがメールを送信するように設定されていない場合も、あなたはそれらを受け取ることを期待してはいけません。

contactテーブルが更新されている場合、#2は問題であると判断します。この質問と

その他のstackoverflowのユーザー:

Sending email from localhost

Options for mailing from localhost

更新: あなたは機能が動作していることを自分自身を安心させることが可能になるまで絶対に電子メールで送信する部分を削除またはコメントアウトします。ローカルホストのメールサーバを設定するには、多くの作業が必要です。メールを送信できることが分かるまで、これらの部分については心配しません。 AJAXが関与していないテストファイルでこのプロセスを試してください。メールがあるかどうかを確認するための一連の警告とエラーメッセージが表示されます。

通常のGETページで行うことができるとわかるまで、AJAX内で電子メールなどの機能を使用しようとしないでください。

+0

あなたの助けをありがとうveeTrain - それは私のローカルホストからメールを送信するのにまだ問題があるようにinfactのように見えます(あなたはそうです正確にまっすぐではありません!)。私は示唆したようにテストを行い、それはライブサーバー上で動作しますが、私のローカルホスト上では動作しません。私はMAMP Proのアカウントでこの設定を変更できるはずだと確信しているので、これを調べます。 – remi90

+0

これは素晴らしいことです。あなたの機能を正しく実装する良い仕事。 – veeTrain

0

データベースに正しく追加されますか?だから唯一の問題は、電子メールが送信されていないということですか?

その場合、localhostを使用してmail()を送信していることが問題です。これは、Windowsマシン上にあると想定しています。 Windows(通常)にはlocalhost上にメールサーバーがないので、localhostを送信することはできません。これには実際の電子メールサーバーを使用し、サーバーアドレスをphp.iniに割り当てる必要があります。

これらの設定:

SMTP = smtp.example.com 
smtp_port = 25 

詳しい情報here

関連する問題