PHPでAjaxお問い合わせフォームを作る方法
PHPとAjaxを使ったお問い合わせフォームの作り方を紹介します。ページを再読み込みせずに非同期通信でデータを送信し、入力内容をCSVへ保存できるサンプルコードです。快適な操作性のお問い合わせフォームを作成したい場合や、Ajaxを利用したフォーム送信の仕組みを学びたい場合に活用できます。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
Ajaxお問い合わせフォーム
ページを再読み込みせずに送信が完了しました。(デモ)
コードをコピーして使おう!
<?php
// CSVファイル
$csv_file = __DIR__ . '/data.csv';
// フォーム送信時のみAjax処理を実行
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
header('Content-Type: application/json; charset=UTF-8');
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$message = trim($_POST['message'] ?? '');
if ($name === '') {
echo json_encode(['success' => false, 'message' => 'お名前を入力してください。']);
exit;
}
if ($email === '') {
echo json_encode(['success' => false, 'message' => 'メールアドレスを入力してください。']);
exit;
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo json_encode(['success' => false, 'message' => 'メールアドレスの形式が正しくありません。']);
exit;
}
if ($message === '') {
echo json_encode(['success' => false, 'message' => 'お問い合わせ内容を入力してください。']);
exit;
}
$fp = fopen($csv_file, 'a');
if (!$fp) {
echo json_encode(['success' => false, 'message' => 'CSVファイルに書き込めません。']);
exit;
}
if (filesize($csv_file) === 0) {
fputcsv($fp, ['date', 'name', 'email', 'message']);
}
fputcsv($fp, [
date('Y-m-d H:i:s'),
$name,
$email,
$message
]);
fclose($fp);
echo json_encode([
'success' => true,
'message' => 'ページを再読み込みせずに送信が完了しました。'
]);
exit;
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Ajaxお問い合わせフォーム</title>
<style>
.php-ajax-contact-form_wrap{
margin:0;
padding:30px;
font-family:sans-serif;
background:#fff;
}
.php-ajax-contact-form_card{
max-width:600px;
margin:0 auto;
padding:24px;
border:1px solid #e5e7eb;
border-radius:18px;
background:#f8fafc;
}
.php-ajax-contact-form_title{
font-size:22px;
font-weight:700;
margin-bottom:20px;
}
.php-ajax-contact-form_field{
display:flex;
flex-direction:column;
gap:6px;
margin-bottom:14px;
}
.php-ajax-contact-form_label{
font-weight:700;
}
.php-ajax-contact-form_input,
.php-ajax-contact-form_textarea{
width:100%;
box-sizing:border-box;
padding:12px;
border:1px solid #d1d5db;
border-radius:10px;
font:inherit;
}
.php-ajax-contact-form_textarea{
min-height:130px;
resize:vertical;
}
.php-ajax-contact-form_result{
display:none;
padding:14px;
border-radius:12px;
font-weight:700;
margin-bottom:14px;
}
.php-ajax-contact-form_result.success{
display:block;
border:1px solid #bbf7d0;
background:#f0fdf4;
color:#15803d;
}
.php-ajax-contact-form_result.error{
display:block;
color:#dc2626;
background:#fff;
}
.php-ajax-contact-form_btn{
width:100%;
height:46px;
border:none;
border-radius:10px;
background:#0b6bff;
color:#fff;
font-weight:700;
cursor:pointer;
}
</style>
</head>
<body>
<div class="php-ajax-contact-form_wrap">
<div class="php-ajax-contact-form_card">
<div class="php-ajax-contact-form_title">
Ajaxお問い合わせフォーム
</div>
<div id="result" class="php-ajax-contact-form_result"></div>
<form id="ajaxForm">
<div class="php-ajax-contact-form_field">
<label class="php-ajax-contact-form_label">お名前</label>
<input class="php-ajax-contact-form_input" type="text" name="name">
</div>
<div class="php-ajax-contact-form_field">
<label class="php-ajax-contact-form_label">メールアドレス</label>
<input class="php-ajax-contact-form_input" type="email" name="email">
</div>
<div class="php-ajax-contact-form_field">
<label class="php-ajax-contact-form_label">お問い合わせ内容</label>
<textarea class="php-ajax-contact-form_textarea" name="message"></textarea>
</div>
<button class="php-ajax-contact-form_btn" type="submit">
Ajaxで送信する
</button>
</form>
</div>
</div>
<script>
document.getElementById('ajaxForm').addEventListener('submit', async function(e){
e.preventDefault();
const form = e.target;
const result = document.getElementById('result');
const formData = new FormData(form);
result.className = 'php-ajax-contact-form_result';
result.textContent = '';
const response = await fetch('', {
method: 'POST',
body: formData
});
const data = await response.json();
result.textContent = data.message;
if (data.success) {
result.classList.add('success');
form.reset();
} else {
result.classList.add('error');
}
});
</script>
</body>
</html>
ファイル構成と設置方法
このサンプルでは、PHPファイルとCSVファイルを使用します。PHPファイルでAjax送信を受け取り、送信されたお問い合わせ内容をCSVファイルへ保存します。
sample/
├─ index.php
└─ data.csv
上記のファイルを同じフォルダ(同じ階層)へ配置してください。
index.phpがお問い合わせフォーム本体です。data.csvには送信されたお問い合わせ内容を保存します。
PHPはサーバー上で実行されるため、PHPファイルをダブルクリックしても動作しません。動作確認はレンタルサーバーまたはPHPが利用できるローカル環境で行ってください。
コメント