プロが教えるわが家の防犯対策術!

http://php.eweb-design.com/1301_mail.html
さんからアンケートフォームをダウンロードさせて頂き
メールアドレスの形式チェックをかけたいと思っています。

『php アドレス形式チェック』などで検索してみたのですが
単体のコードは出てくるのですが、私がほぼ無知なために
どこに付け加えたらいいのかわからずでphpファイルの
未入力項目のチェックのあたりにつけてみましたが
エラーの連続で自分ではお手上げ状態でした・・・

アドレス形式チェックを参考にしたのは下記のurlです。
http://homepage3.nifty.com/wowarlly/php2.html

詳しい方のお力を貸して頂きたいのですがどのようにすれば
動作するのでしょうか?

宜しくお願い致します!

A 回答 (6件)

デバック、チェックを私がサイトからダウンロードして同じようにプログラムを挿入し、関数を定義したところきちんと動作しました。


私がここまでする必要はないと思いましたが・・

もしエラーがでているとすれば、
あなたが何かプログラム上勝手に消したものがあるか
『空白(全角スペース)』などが挿入されているとかそういう初歩的なエラーだと思います。


<?php header("Content-Type:text/html;charset=Shift_JIS"); ?>
<?php
//==========================================================
// メールフォームシステム ver.0.96β
// eWeb http://www.eweb-design.com/
//==========================================================

// このファイルの名前
$script ="sendmail.php";

// メールを送信するアドレス(複数指定する場合は「,」で区切る)
$to = "xxx@xxx.com";

// 送信されるメールのタイトル
$sbj = "アンケート";

// 送信確認画面の表示(する=1, しない=0)
$chmail = 1;

// 送信後に自動的にジャンプする(する=1, しない=0)
// 0にすると、送信終了画面が表示されます。
$jpage = 0;

// 送信後にジャンプするページ(送信後にジャンプする場合)
$next = "http://www.xxxx.com/";

// 差出人は、送信者のメールアドレスにする(する=1, しない=0)
// する場合は、メール入力欄のname属性を「email」にしてください。
$from_add = 1;

// 差出人に送信内容確認メールを送る(送る=1, 送らない=0)
// 送る場合は、メール入力欄のname属性を「email」にしてください。
$remail = 1;

// 差出人に送信確認メールを送る場合のメールのタイトル
$resbj = "送信ありがとうございました";

// 必須入力項目を設定する(する=1, しない=0)
$esse = 1;

// 必須入力項目(入力フォームで指定したname)
$eles = array('名前','年齢','性別','email','規約');


//--------------------------------------------------------------------
// 以上で基本的な設定は終了です。
// 以下の変更は自己責任でお願いします。(行数はデフォルト時)
// 未入力画面のレイアウト → 88行目周辺
// 送信メールのレイアウト → 103行目周辺
// 差出人への送信確認メールのレイアウト → 128行目周辺
// 送信確認画面のレイアウト → 163行目周辺
// 送信終了画面のレイアウト → 194行目周辺
// 送信確認画面や終了画面のヘッダとフッタ → 209行目周辺
//--------------------------------------------------------------------

$sendm = 0;
foreach($_POST as $key=>$var) {
if($var == "eweb_submit") $sendm = 1;
}

// 文字の置き換え
$string_from = "\";
$string_to = "ー";

function checkEmail($email) {
global $isEAddressCorrect;
//@が中ほどにあればtrue,なければfalseをかえします。
//@が2文字目以降に現れている時
if(strpos($email , "@")>0){
//@より右側に文字が3文字以上あるとき
if(strlen(strstr($email,"@")) >= 3){
$url = substr(strrchr($email,"@"),1);
if(checkdnsrr($url)){
$isEAdressCorrect = TRUE;
return TRUE;
}
}
}
$isEAderessCorrect = FALSE;
return FALSE;
}

// 未入力項目のチェック
if($esse == 1) {
$flag = 0;
$length = count($eles) - 1;
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if($var == "eweb_submit") ;
else {
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i] && empty($var)) {
$errm .= "<FONT color=#ff0000>「".$key."」は必須入力項目です。</FONT><BR>\n";
$flag = 1;
}
}
}
}
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i]) {
$eles[$i] = "eweb_ok";
}
}
}
for($i=0; $i<=$length; $i++) {
if($eles[$i] != "eweb_ok") {
$errm .= "<FONT color=#ff0000>「".$eles[$i]."」が未選択です。</FONT><BR>\n";
$eles[$i] = "eweb_ok";
$flag = 1;
}
}
if(! checkEmail($_POST[email]))
{
$errm .= "<font color=#ff0000>「\"メールアドレス\"」が不正です。</font><br />\n";
$flag =1;
}
if($flag == 1){
htmlHeader();
?>


<!--- 未入力があった時の画面 --- 開始 --------------------->

入力エラー<BR><BR>
<?php echo $errm; ?>
<BR><BR>
<INPUT type="button" value="前画面に戻る" onClick="history.back()">

<!--- 終了 --->


<?php
htmlFooter();
exit(0);
}
}
//--- メールのレイアウトの編集 --- 開始 ------------------->

$body="「".$sbj."」からの発信です\n\n";
$body.="-------------------------------------------------\n\n";
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if(get_magic_quotes_gpc()) $var = stripslashes($var);
if($var == "eweb_submit") ;
else $body.="[".$key."] ".$var."\n";
}
$body.="\n-------------------------------------------------\n\n";
$body.="送信日時:".date( "Y/m/d (D) H:i:s", time() )."\n";
$body.="ホスト名:".getHostByAddr(getenv('REMOTE_ADDR'))."\n\n";

//--- 終了 --->


if($remail == 1) {
//--- 差出人への送信確認メールのレイアウトの編集 --- 開始 ->

$rebody="ありがとうございました。\n";
$rebody.="以下の内容が送信されました。\n\n";
$rebody.="-------------------------------------------------\n\n";
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if(get_magic_quotes_gpc()) $var = stripslashes($var);
if($var == "eweb_submit") ;
else $rebody.="[".$key."] ".$var."\n";
}
$rebody.="\n-------------------------------------------------\n\n";
$rebody.="送信日時:".date( "Y/m/d (D) H:i:s", time() )."\n";
$reto = $_POST['email'];
$rebody=mb_convert_encoding($rebody,"JIS","SHIFT_JIS");
$resbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resbj,"JIS","SHIFT_JIS"))."?=";
$reheader="From: $to\nReply-To: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();

//--- 終了 --->
}

$body=mb_convert_encoding($body,"JIS","SHIFT_JIS");
$sbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($sbj,"JIS","SHIFT_JIS"))."?=";
if($from_add == 1) {
$from = $_POST['email'];
$header="From: $from\nReply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
} else {
$header="Reply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
}
if($chmail == 0 || $sendm == 1) {
mail($to,$sbj,$body,$header);
if($remail == 1) { mail($reto,$resbj,$rebody,$reheader); }
}
else { htmlHeader();
?>

<!--- 送信確認画面のレイアウトの編集 --- 開始 ------------->

以下の内容で間違いがなければ、「送信する」ボタンを押してください。<BR><BR>
<FORM action="<? echo $script; ?>" method="POST">
<? echo $err_message; ?>
<TABLE width="400" bgcolor="#cccccc" cellspacing="1" cellpadding="3">
<?php
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if(get_magic_quotes_gpc()) $var = stripslashes($var);
$var = htmlspecialchars($var);
print("<TR bgcolor=#ffffff><TD bgcolor=#eeeeee>".$key."</TD><TD>".$var);
?>
<INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>">
<?php
print("</TD></TR>\n");
}
?>
</TABLE>
<BR>
<INPUT type="hidden" name="eweb_set" value="eweb_submit">
<INPUT type="submit" value="送信する">
<INPUT type="button" value="前画面に戻る" onClick="history.back()">
</FORM>

<!--- 終了 --->


<?php htmlFooter(); } if(($jpage == 0 && $sendm == 1) || ($jpage == 0 && ($chmail == 0 && $sendm == 0))) { htmlHeader(); ?>


<!--- 送信終了画面のレイアウトの編集 --- 開始 ------------->

ありがとうございました。<BR>
送信は無事に終了しました。<BR><BR>

<!-- 著作権表示 -->
<!-- 消しても構いませんが、その際はeWebにリンクを貼ってくれると嬉しいです。-->
<FONT size="-1"><A href="http://www.eweb-design.com/">eWeb Mail</A></FONT><BR>

<!--- 終了 --->


<?php htmlFooter(); } else if(($jpage == 1 && $sendm == 1) || $chmail == 0) { header("Location: ".$next); } function htmlHeader() { ?>


<!--- ヘッダーの編集 --- 開始 ----------------------------->

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<!--- 終了 --->


<?php } function htmlFooter() { ?>


<!--- フッターの編集 --- 開始 ----------------------------->

</BODY>
</HTML>

<!--- 終了 --->


<?php } ?>
    • good
    • 0
この回答へのお礼

エラーの原因は全角のスペースが入っていたようです・・・
最後の最後までご迷惑おかけしましたがおかげさまで動作正常です。
お礼の言葉が足りないくらいですが本当にありがとうございました!

お礼日時:2007/07/07 22:18

関数の定義はphpはどこにいれてもいいです。


一般的なのが最初にいれると一番普通かも。
<?php

function checkEmail($email) {
 global $isEAddressCorrect;
 //@が中ほどにあればtrue,なければfalseをかえします。
 //@が2文字目以降に現れている時
 if(strpos($email , "@")>0){
  //@より右側に文字が3文字以上あるとき
  if(strlen(strstr($email,"@")) >= 3){
   $url = substr(strrchr($email,"@"),1);
    if(checkdnsrr($url)){
     $isEAdressCorrect = TRUE;
     return TRUE;
    }
  }
 }
 $isEAderessCorrect = FALSE;
 return FALSE;
}




とかにしとけばいいです。

この回答への補足

>関数の定義はphpはどこにいれてもいいです。
ということで未入力項目のチェックの上に付け足してみました!

function checkEmail($email) {
 global $isEAddressCorrect;
 //@が中ほどにあればtrue,なければfalseをかえします。
 //@が2文字目以降に現れている時
 if(strpos($email , "@")>0){
  //@より右側に文字が3文字以上あるとき
  if(strlen(strstr($email,"@")) >= 3){
   $url = substr(strrchr($email,"@"),1);
    if(checkdnsrr($url)){
     $isEAdressCorrect = TRUE;
     return TRUE;
    }
  }
 }
 $isEAderessCorrect = FALSE;
 return FALSE;
}

// 未入力項目のチェック
if($esse == 1) {
$flag = 0;
$length = count($eles) - 1;
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if($var == "web_submit") ;
else {
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i] && empty($var)) {
$errm .= "<font color=#ff0000>「".$key."」は必須入力項目です。</font><br />\n";
$flag = 1;
}
}
}
}
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i]) {
$eles[$i] = "web_ok";
}
}
}
for($i=0; $i<=$length; $i++) {
if($eles[$i] != "web_ok") {
$errm .= "<font color=#ff0000>「".$eles[$i]."」が未選択です。</font><br />\n";
$eles[$i] = "web_ok";
$flag = 1;
}
}
if(! checkEmail($_POST[email]))
{
$errm .= "<font color=#ff0000>「\"メールアドレス\"」が不正です。</font><br />\n";
$flag =1;
}
if($flag == 1){
htmlHeader();
?>

Parse error: syntax error, unexpected T_VARIABLE in /パス/form.php

このようなエラーが出てしまったのですが何が原因なのでしょうか?
<?phpのすぐ下につけても同じ結果でした。

補足日時:2007/07/06 21:26
    • good
    • 0

ifを付け忘れました。


これでエラーはでないと思いますがどうでしょう?

if(! checkEmail($_POST[email]))
{
$errm .= "<font color=#ff0000>「\"メールアドレス\"」が不正です。</font><br />\n";
$flag =1;
}

この回答への補足

何度も申し訳ございませんが下記のようなエラーがでてしまいました。
Fatal error: Call to undefined function: checkemail()

checkemail()というファンクションをつけてください的なものだと思うのですが
どこにどのように付け足すものなのでしょうか?

function checkEmailとしてメールアドレスの形式を定義するとは思うのですがわかるのはそこまでが限界です・・・^^;

補足日時:2007/07/06 15:35
    • good
    • 0

エスケープ文字「\」入れ忘れました。




(! checkEmail($_POST[email]))
{
$errm .= "<font color=#ff0000>「\"メールアドレス\"」が不正です。</font><br />\n";
$flag =1;
}

この回答への補足

またまたお返事ありがとうございます!

>functionは適当な位置にコピーするなりしてください。
ファンクションはcheckEmailということはわかるのですが
どこにどのように書いたらいいのかがわかりません・・・

ちなみにそのままソースを張り付けたら以下のようなエラーが出ました。
Parse error: syntax error, unexpected '{' in /パス/form.php
お手数ですが教えて下さい。

補足日時:2007/07/05 22:15
    • good
    • 0

このように挿入すればいいとおもいます。


functionは適当な位置にコピーするなりしてください。

for($i=0; $i<=$length; $i++) {
if($eles[$i] != "web_ok") {
$errm .= "<font color=#ff0000>「".$eles[$i]."」が未選択です。</font><br />\n";
$eles[$i] = "web_ok";
$flag = 1;
}
}
//--------ここに挿入

(! checkEmail($_POST[email]))
{
$errm .= "<font color=#ff0000>「"メールアドレス"」が不正です。</font><br />\n";
$flag =1;
}
//--------------------
if($flag == 1){
htmlHeader();
?>
    • good
    • 0

恐らくメアドは$_POSTで取っていると思うので、その下あたりに入れればいいんじゃないかと思いますが…。


アンケートフォームのソース(コード)を出していただけると回答がつきやすいかと。

この回答への補足

お返事ありがとうございます!
phpのソースは下記のようになっています。

// 未入力項目のチェック
if($esse == 1) {
$flag = 0;
$length = count($eles) - 1;
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if($var == "web_submit") ;
else {
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i] && empty($var)) {
$errm .= "<font color=#ff0000>「".$key."」は必須入力項目です。</font><br />\n";
$flag = 1;
}
}
}
}
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i]) {
$eles[$i] = "web_ok";
}
}
}
for($i=0; $i<=$length; $i++) {
if($eles[$i] != "web_ok") {
$errm .= "<font color=#ff0000>「".$eles[$i]."」が未選択です。</font><br />\n";
$eles[$i] = "web_ok";
$flag = 1;
}
}
if($flag == 1){
htmlHeader();
?>


<!--- 未入力があった時の画面 --- 開始 --------------------->

入力エラー<br /><br />
<?php echo $errm; ?>
<br /><br />
<input type="button" value="前画面に戻る" onClick="history.back()">

<!--- 終了 --->

htmlからphpを呼び出す設定でhtmlには
<form method="POST" action="mailform.php">
メールアドレスを入力するname属性はemailです。

補足日時:2007/07/05 11:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!