phpでフォームの作成失敗

僕はWEBデザイン系の仕事がメインなのでプログラムなどは苦手な分野です。特にPHPは専門学生時代から関わっていますが相性が凄い悪いと思っています。PHPなどは凄い苦手です。自作でフォームを作成してみようと思って失敗しているので暫くネタにしたいとおもいます。

この記事は失敗フォームなのでソースなどを参考にはしないほうが良いと思います。

フォームを作成しようと思った理由

理由は単純です。プラグインのコンタクトフォームがあるのですが、これではなく自分でフォームを作成して使ってみたいと思ったからです。セキュリティーの面で自作はうんぬんとか言われそうですがとりあえず現状そういうのは考えないでおいてます。

フォームの処理

sample.htmlで入力をして、sample.phpに渡します。sample.phpは確認画面となりそこからmail.phpなどにわたしてメールを配信するのとサンクスページを見せようとしました。最終的にはsample.htmlをform.phpなどにしてセッションなどで渡そうと考えていました。

sample.html(後にform.phpにしたかった)ソース

最初からphpファイルにすればいいのにと意見があるかもしれませんが、ローカルで確認をしたかったので最初はhtmlで作成しようと思いました。最終的にはこのフォームでセッションを渡そうと考えていました。

<body>
<form action="sample.php" method="post">
<p>名前:<input type="text" name="yourname" /></p>
<p>メールアドレス:<input type="text" name="yourmail" /></p>
<p>題名:<input type="tel" name="yoursubject" /></p>
<p>内容:<textarea name="yourmessage"></textarea></p>
<p><input type="submit" value="確認"></p>
</form>
</body>

ここは普通にhtmlでnameに各項目をいれています。

sample.php(確認画面)

確認画面があるとどう処理していいのかわからないのでこれは普通に迷います。今でもどう作っていいのかわからなくて困っています。

<?php
//$me = $_SERVER[SCRIPT_NAME];
//名前の条件分岐
$yourname = $_POST["yourname"];
$yourmail = $_POST["yourmail"];
$yoursubject = $_POST["yoursubject"];
$yourmessage = $_POST["yourmessage"];

//yournameの入力チェック
if(empty($yourname)){
	//データがない
	var_dump ("なにもないです");
}else{
	//データがある
	$act = "confirm"; //confirmに格納していく
}

if($yourmail != ""){
	if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $yourmail)){
		$act = "confirm"; //confirmに格納していく
	}else{
		print"メールアドレスが不正です";
	}
}else{
	var_dump ("メールアドレスが入力されていません。");
}

//件名のチェック
if(empty($yoursubject)){
	//データがない
	var_dump ("件名がありません");
}else{
	//データがある
	$act = "confirm"; //confirmに格納していく
}

//内容のチェック
if(empty($yourmessage)){
	//データがない
	var_dump ("内容がありません");
}else{
	//データがある
	$act = "confirm"; //confirmに格納していく
}

//送信処理
if($act == "confirm"){
	print "以下の内容で送信します";
	print "<form action=\"mail.php\" method=\"post\">\n";
	print "<input type=\"hidden\" name=\"yourname\" value=\"$yourname\">$yourname <br />";
	print "<input type=\"hidden\" name=\"yourmail\" value=\"$yourmail\">$yourmail";
	print "<input type=\"hidden\" name=\"yoursubject\" value=\"$yoursubject\">$yoursubject <br />";
	print "<input type=\"hidden\" name=\"yourmessage\" value=\"$yourmessage\">$yourmessage <br />";
	print "<input type=submit value=送信>

	</form>";
}else{
	print "入力内容に問題があります";
}
?>

ここで確認画面にしてメールを送信処理をしたかったですが、うまくいってないです。

mail.php(送信処理とサンクスメッセージ)

確認画面で送信を押したときにこのphpに引き渡し、データを受け取ったmail.phpが送信処理をします。

<?php
$yourname = $_POST["yourname"];
$yourmail = $_POST["yourmail"];
$yoursubject = $_POST["yoursubject"];
$yourmessage = $_POST["yourmessage"];

//文字コード設定
mb_language("Japanese");
mb_internal_encoding("UTF-8");

//環境設定
//件名
$tosubject = "お問い合わせがありました";

//宛先
$to = "hayashin10@gmail.com";

//差出人
$header = "From: ".$yourmail."\r\nContent-Type: text/plain;\n";

//本文
$namae = "お名前:".$yourname."\n";
$body= "メールアドレス:".$yourmail."\n";
$body.= "件名:".$yoursubject."\n";
$body.= "内容:".$yourmessage."\n";

var_dump ($to,$tosubject,$namae,$body,$header);

//メール送信

if(mb_send_mail($to,$tosubject,$namae,$body,$header)){
   print "メール送信成功しました。";
}else{
   var_dump( "メール送信失敗しました。");
}

?>

普通にメールの送信に失敗します。

問題点

色々問題点はあります。例えば、入力チェックのところでメールアドレスを半角英数字以外で入力するとエラーを返すようにしています。しかしお名前などどこか別の箇所が入力されていればメールアドレスを半角英数字以外で入力してもエラーは返しません。普通に通ってしまいます。

エラーがある場合は戻るボタンで戻らないといけないですが、このフォームはエラーがあっても送信できるようになっています。根本的に問題しかないです。