前提
PHP工房のメールフォームを改造しています。
NGワードが含まれていた際に送信できない旨のメッセージを表示して送信できないようにする機能を実装中に以下のエラーメッセージが発生しました。
なぜ「Undefined variable: str」が出るのかわかりません。
ご回答よろしくお願いします。
実現したいこと
- NGワードが含まれていた場合、ブラウザに「NGワードが含まれています」と表示したい
発生している問題・エラーメッセージ
Notice: Undefined variable: str in C:\Program Files\Ampps\www\mailform.php on line 270 array(4) { ["type"]=> int(8) ["message"]=> string(23) "Undefined variable: str" ["file"]=> string(80) "C:\Program Files\Ampps\www\mailform.php" ["line"]=> int(270) }
前提
PHP工房のメールフォームを改造しています。
NGワードが含まれていた際に送信できない旨のメッセージを表示して送信できないようにする機能を実装中に以下のエラーメッセージが発生しました。
なぜこれが出るのかわかりません。
ご回答よろしくお願いします。
実現したいこと
- NGワードが含まれていた場合、ブラウザに「NGワードが含まれています」と表示したい
発生している問題・エラーメッセージ
Notice: Undefined variable: str in C:\Program Files\Ampps\www\mailform.php on line 270 array(4) { ["type"]=> int(8) ["message"]=> string(23) "Undefined variable: str" ["file"]=> string(80) "C:\Program Files\Ampps\www\mailform.php" ["line"]=> int(270) } ```PHP <?php function debug() { var_dump(error_get_last()); } register_shutdown_function('debug'); ?> <?php header("Content-Type:text/html;charset=utf-8"); ?> <?php //error_reporting(E_ALL | E_STRICT); if (version_compare(PHP_VERSION, '5.1.0', '>=')) {//PHP5.1.0以上の場合のみタイムゾーンを定義 date_default_timezone_set('Asia/Tokyo');//タイムゾーンの設定(日本以外の場合には適宜設定ください) } //フォームのメールアドレス入力箇所のname属性の値(name="○○" の○○部分) $Email = "Email"; // 自動返信メール設定(START) // 差出人に送信内容確認メール(自動返信メール)を送る(送る=1, 送らない=0) // 送る場合は、フォーム側のメール入力欄のname属性の値が上記「$Email」で指定した値と同じである必要があります $remail = 0; //自動返信メールの送信者欄に表示される名前 ※あなたの名前や会社名など(もし自動返信メールの送信者名が文字化けする場合ここは空にしてください) $refrom_name = ""; // 差出人に送信確認メールを送る場合のメールのタイトル(上記で1を設定した場合のみ) $re_subject = "送信ありがとうございました"; //フォーム側の「名前」箇所のname属性の値 ※自動返信メールの「○○様」の表示で使用します。 //指定しない、または存在しない場合は、○○様と表示されないだけです。あえて無効にしてもOK $dsp_name = 'お名前'; //自動返信メールの冒頭の文言 ※日本語部分のみ変更可 $remail_text = <<< TEXT お問い合わせありがとうございました。 早急にご返信致しますので今しばらくお待ちください。 送信内容は以下になります。 TEXT; FOOTER; //------------ // 自動返信メール設定(END) //------------- //メールアドレスの形式チェックを行うかどうか。(する=1, しない=0) //※デフォルトは「する」。特に理由がなければ変更しないで下さい。メール入力欄のname属性の値が上記「$Email」で指定した値である必要があります。 $mail_check = 1; //全角英数字→半角変換を行うかどうか。(する=1, しない=0) $hankaku = 0; $use_envelope = 0; // 関数実行、変数初期化 //トークンチェック用のセッションスタート if($useToken == 1 && $confirmDsp == 1){ session_name('PHPMAILFORMSYSTEM'); session_start(); } $encode = "UTF-8";//このファイルの文字コード定義(変更不可) if(isset($_GET)) $_GET = sanitize($_GET);//NULLバイト除去// if(isset($_POST)) $_POST = sanitize($_POST);//NULLバイト除去// if(isset($_COOKIE)) $_COOKIE = sanitize($_COOKIE);//NULLバイト除去// if($encode == 'SJIS') $_POST = sjisReplace($_POST,$encode);//Shift-JISの場合に誤変換文字の置換実行 $funcRefererCheck = refererCheck($Referer_check,$Referer_check_domain);//リファラチェック実行 //変数初期化 $sendmail = 0; $empty_flag = 0; $ng_flag = 0; $post_mail = ''; $errm =''; $header =''; if($requireCheck == 1) { $requireResArray = requireCheck($require);//必須チェック実行し返り値を受け取る $errm = $requireResArray['errm']; $empty_flag = $requireResArray['empty_flag']; } //NGワード設定 // 小文字化 $str = mb_strtolower($str, "UTF-8"); // 半角英数字全角カタカナへ置換 $str = mb_convert_kana($str, "KVas"); // スペース、句読点などを削除 $target_sentence = preg_replace("/\s|、|。/", "’’", $str); // 禁止キーワード $ng_words = array("あいう"); foreach ($ng_words as $ngWordsVal) { // 対象文字列にキーワードが含まれるか if (mb_strpos($target_sentence, $ngWordsVal) !== FALSE) { $ng_flag == 1; } } // 縦読み対策 // 1文字に分割 $lines = explode("\n", $str); if (! empty($lines)) { if (count($lines) > 1) { foreach($lines as $linesKey => $linesVal) { $onechar[$linesKey] = preg_split('//u', $linesVal, -1, PREG_SPLIT_NO_EMPTY); } } } // 縦列を結合し、単語にする if (! empty($onechar)) { foreach($onechar as $onecharVal) { foreach($onecharVal as $positionKey => $positionVal) { $rows[$positionKey] = $rows[$positionKey] . $positionVal; } } } // 単語を結合し、1行にする if (! empty($rows)) { foreach($rows as $rowsVal) { // 3文字以下は対象外 if (mb_strlen($rowsVal) <= 3) { continue; } $target_tateyomi = $target_tateyomi . '/' . $rowsVal; } // 全体でなく、1行目 $rows[0] や 2行目 $rows[1] だけの場合 // $target_tateyomi = $rows[0] . '/' . $rows[1]; } if (! empty($target_tateyomi)) { // 通常文と同じように禁止キーワードチェック foreach ($ng_words as $ngWordsVal) { // 対象文字列にキーワードが含まれるか if (mb_strpos($target_tateyomi, $ngWordsVal) !== FALSE) { $ng_flag == 1; } } } ?> <!-- ▼************ 送信内容表示部 ※編集は自己責任で ************ ▼--> <div id="formWrap"> <?php if($ng_flag == 1){ ?> <h4>NGワードが含まれています。</h4> } <?php if($empty_flag == 1){ ?> <div align="center"> <h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4> <?php echo $errm; ?><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"> </div> <?php }else{ ?> <h3>確認画面</h3> <p align="center">以下の内容で間違いがなければ、「送信する」ボタンを押してください。</p> <form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="POST"> <table class="formTable"> <?php echo confirmOutput($_POST);//入力内容を表示?> </table> <p align="center"><input type="hidden" name="mail_set" value="confirm_submit"> <input type="hidden" name="httpReferer" value="<?php echo h($_SERVER['HTTP_REFERER']);?>"> <input type="submit" value=" 送信する "> <input type="button" value="前画面に戻る" onClick="history.back()"></p> </form> <?php } ?> </div><!-- /formWrap --> <!-- ▲ *********** 送信内容確認部 ※編集は自己責任で ************ ▲--> <!-- ▼ Footerその他コンテンツなど ※編集可 ▼--> </body> </html> <?php /* ▲▲▲送信確認画面のレイアウト ※オリジナルのデザインも適用可能▲▲▲ */ } if(($jumpPage == 0 && $sendmail == 1) || ($jumpPage == 0 && ($confirmDsp == 0 && $sendmail == 0))){ } /* ▼▼▼送信完了画面のレイアウト 編集可 ※送信完了後に指定のページに移動しない場合のみ表示▼▼▼ */ ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <meta name="format-detection" content="telephone=no"> <title>完了画面</title> </head> <body> <div align="center"> <?php if($ng_flag == 1){ ?> <h4>NGワードが含まれています。</h4> <?php if($empty_flag == 1){ ?> <h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4> <div style="color:red"><?php echo $errm; ?></div> <br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"> </div> </body> </html> <?php }else{ ?> 送信ありがとうございました。<br /> 送信は正常に完了しました。<br /><br /> <a href="<?php echo $site_top ;?>">トップページへ戻る»</a> </div> <?php copyright(); ?> <!-- CV率を計測する場合ここにAnalyticsコードを貼り付け --> </body> </html> <?php /* ▲▲▲送信完了画面のレイアウト 編集可 ※送信完了後に指定のページに移動しない場合のみ表示▲▲▲ */ } } //確認画面無しの場合の表示、指定のページに移動する設定の場合、エラーチェックで問題が無ければ指定ページヘリダイレクト else if(($jumpPage == 1 && $sendmail == 1) || $confirmDsp == 0) { if($ng_flag == 1){ ?> <div align="center"><h4>NGワードが含まれています。</h4><div style="color:red"><?php echo $errm; ?></div><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"></div> <?php if($empty_flag == 1){ ?> <div align="center"><h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4><div style="color:red"><?php echo $errm; ?></div><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"></div> <?php }else{ header("Location: ".$thanksPage); } } } ?>
試したこと
記述する場所を送信内容表示部から関数実行、変数初期化のところに書き換えた
また、変数を追加したりなどをしてみたが違うエラー(Parse error: syntax error...)が出る
### 試したこと 記述する場所を***送信内容表示部***から***関数実行、変数初期化***のところに書き換えた また、変数を追加したりなどをしてみたが違うエラー(Parse error: syntax error...)が出る
回答1件
あなたの回答
tips
プレビュー