質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

1915閲覧

WordPressでのajax通信のエラー

imio_o

総合スコア4

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/04/04 15:57

編集2020/04/04 16:44

wordpressで自作のお問合せフォームを作成/メール送信

さくらサーバーを用いてwordpressで自作のお問合せフォームを作成しているのですが、ajaxの通信でエラーが出てしまいます

発生している問題・エラーメッセージ

/wp/wp-content/themes/JM/sendmail.php:1 Failed to load the server responded with a status of 500 ()

該当のソースコード

sendmail.php

php

1<?php 2ini_set('display_errors',1); 3header('Content-type: application/json'); 4date_default_timezone_set('Asia/Tokyo'); 5 6// 送信先メールアドレス 7$to = '';//メールアドレス入れています 8// メールタイトル 9$subject = 'お問い合わせフォームより'; 10// ドメイン(リファラチェックと送信元メールアドレスに利用) 11$domain = '';//さくらサーバーで取得したドメイン入れています 12 13//変数初期化 14$errflg =0; // エラー判定フラグ 15$dispmsg =''; // 画面出力内容 16 17// 入力項目 18$name = ''; // 名前 19$email = ''; // メールアドレス 20$tel = ''; // 電話番号 21$time = ''; // 希望時間 22$text = ''; // 内容 23$referrer = ''; // 遷移元画面 24var_dump($emai) 25var_dump($name) 26var_dump($text) 27// 画面からのデータを取得 28if(isset($_POST['name'])){ $name = $_POST['name']; } 29if(isset($_POST['email'])){ $email = $_POST['email']; } 30if(isset($_POST['tel'])){ $tel = $_POST['tel']; } 31if(isset($_POST['time'])){ $tel = $_POST['time']; } 32if(isset($_POST['text'])){ $message = $_POST['text']; } 33if(isset($_POST['referrer'])){ $referrer = $_POST['referrer']; } 34 35if(strpos($_SERVER['HTTP_REFERER'], $domain) === false){ 36 // リファラチェック 37 $dispmsg = '<p id="errmsg">【リファラチェックエラー】お問い合わせフォームから入力されなかったため、メール送信できませんでした。</p>'; 38 $errflg = 1; 39} 40else if($name == '' || $email == '' || $text == ''){ 41 //必須チェック 42 $dispmsg = '<p id="errmsg">【エラー】名前・メールアドレス・内容は必須項目です。</p>'; 43 $errflg = 1; 44} 45else if(!preg_match("/^[.!#%&\-_0-9a-zA-Z?/+]+\@[!#%&\-_0-9a-z]+(.[!#%&\-_0-9a-z]+)+$/", $email) || count( explode('@',$email) ) !=2){ 46 //メールアドレスチェック 47 $dispmsg .= '<p id="errmsg">【エラー】メールアドレスの形式が正しくありません。</p>'; 48 $errflg = 1; 49} 50else{ 51 // メールデータ作成 52 $subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,'JIS','UTF-8'))."?="; 53 $message= '名前:'.$name."\n"; 54 $message.='メール:'.$email."\n"; 55 $message.='電話番号:'.$tel."\n"; 56 $message.='希望時間:'.$time."\n"; 57 $message.="\n――――――――――――――――――――――――――――――\n\n"; 58 $message.=$text; 59 $message.="\n\n――――――――――――――――――――――――――――――\n"; 60 $message.='送信日時:'.date( "Y/m/d (D) H:i:s", time() )."\n"; 61 $message= mb_convert_encoding($message,'JIS','UTF-8'); 62 $fromName = mb_encode_mimeheader(mb_convert_encoding($name,'JIS','UTF-8')); 63 $header ='From: '.$fromName.'<wordpress@'.$domain.'>'."\n"; 64 $header.='Reply-To: '.$email."\n"; 65 $header.='Content-Type:text/plain;charset=iso-2022-jp\nX-Mailer: PHP/'.phpversion(); 66 // メール送信 67 $retmail = mb_send_mail($to,$subject,$message,$header); 68 69 // 送信結果の判定 70 if( $retmail ){ 71 $dispmsg ='<p class="success">メールを送信しました。返信までしばらくお待ちください。</p>'; 72 $dispmsg.='<blockquote><p>名前: '.hsc_utf8($name).'<br />'; 73 $dispmsg.= 'メール: '.hsc_utf8($email).'<br />'; 74 $dispmsg.= '電話番号: '.hsc_utf8($tel).'</p>'; 75 $dispmsg.= '希望時間: '.hsc_utf8($time).'</p>'; 76 $dispmsg.= '<pre>'.hsc_utf8($text).'</pre></blockquote>'; 77 }else{ 78 $dispmsg .= '<p id="errmsg">【エラー】メール送信に失敗しました。。</p>'; 79 $errflg = 1; 80 } 81} 82 83// 処理結果を画面に戻す 84$result = array('errflg'=>$errflg, 'dispmsg'=>$dispmsg); 85echo json_encode( $result ); 86 87// HTMLエスケープ処理 88function hsc_utf8($str) { 89 return htmlspecialchars($str, ENT_QUOTES,'UTF-8'); 90} 91?>

page-send.php

php

1<html lang="ja"> 2<body> 3<div id="form"> 4 5<div class="fish" id="fish"></div> 6<div class="fish" id="fish2"></div> 7 8<form id="waterform" method="post"> 9 10<div class="formgroup" id="name-form"> 11 <label for="name">お名前(必須)</label> 12 <input type="text" id="name" name="name" required/> 13</div> 14 15<div class="formgroup" id="email-form"> 16 <label for="email">メールアドレス</label> 17 <input type="email" id="email" name="email" required/> 18</div> 19 20<div class="formgroup" id="tel-form"> 21 <label for="tel">電話番号(必須)</label> 22 <input type="text" id="tel" name="tel" required/> 23</div> 24 25<div class="formgroup" id="time-form"> 26 <label for="time">連絡可能な時間帯(必須)</label> 27 <input type="text" id="time" name="time" required/> 28</div> 29 30<div class="formgroup" id="text-form"> 31 <label for="text">お問合せ</label> 32 <textarea id="text" name="text" required></textarea> 33</div> 34 35 <input type="submit" value="確認" /><input 36 id="referrer" type="hidden" name="referrer" /> 37</form><div id="dispmsg"></div> 38 </div><?php wp_footer(); ?></body></div></html> 39 40<!-- JavaScript --> 41<div> 42<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 43 44<script> 45jQuery(function ($) { 46 $("#referrer").val(document.referrer); 47 $("#waterform").submit(function(){ 48 $.ajax({ 49 url : '/wp/wp-content/themes/JM/sendmail.php', 50 type: 'POST', 51 dataType: 'json', 52 data: $(this).serialize() 53 }) 54 .done( function(data){ 55 $("#dispmsg").empty(); 56 $("#dispmsg").html(data.dispmsg); 57 if(data.errflg != 1){ 58 $("#waterform").remove(); 59 } 60 }) 61 .fail( function(data){ 62 alert('メール送信に失敗しました'); 63 }) 64 return false; 65 }); 66}); 67</script></div>

試したこと

ini_set('display_errors',1);を加え、デベロッパーツールのnetworkでエラー原因のプレビューができないか試しましたが表示されず原因がいまいちわからなかったです。また、var_dump($emai)を加てエラーチェックを行おうとしたのですがこれも表示されず行き詰まっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

サーバーの方ですが、何を使って確認してるかにもよりますが、postmanなどを使っていればvardumpは表示されます。

ブラウザからなら、ajax通信なので表示されないのでlogを仕込むべきですね。

個人的にはpostmanならところどころvardump入れて直感的視覚的に該当場所つきとめていけるのでオススメです。

投稿2020/04/04 17:00

mackintosh

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imio_o

2020/04/04 17:12

ご回答ありがとうございます。 postmanは今まで使用したことがなかったので一度こちらを使用して原因を突き止めたいと思います。 デバックで悩んでいたのでとても助かります。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問