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

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

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

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

解決済

エラーの解決方法がわからない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

1回答

-6評価

0クリップ

240閲覧

投稿2022/04/23 13:27

編集2022/04/24 10:22

前提

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 ;?>">トップページへ戻る&raquo;</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...)が出る

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

mather

2022/04/23 18:31

URLは踏まないでください。 チェッカーでアクセスしてみたところ、zipファイルを自動ダウンロードさせる仕組みがあるようです。試してないので内容は確認していませんが、マルウェア等の可能性があります。 質問をするならそのような手段を使わずにソースコードを質問に記載してください。
退会済みユーザー

退会済みユーザー

2022/04/24 00:56

ある程度省略していいなら記載しますが

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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