質問編集履歴

1

PHPコードを記載

2022/04/24 01:20

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -29,9 +29,246 @@
29
29
  ```
30
30
  Notice: Undefined variable: str in C:\Program Files\Ampps\www\mailform.php on line 270
31
31
  array(4) { ["type"]=> int(8) ["message"]=> string(23) "Undefined variable: str" ["file"]=> string(80) "C:\Program Files\Ampps\www\mailform.php" ["line"]=> int(270) }
32
- ```
33
-
34
- [コード(長くて入りきらないのでリンクします)](https://yd8lm.sakura.ne.jp/dllink.html)
32
+
33
+
34
+ ```PHP
35
+ <?php
36
+ function debug()
37
+ {
38
+ var_dump(error_get_last());
39
+ }
40
+ register_shutdown_function('debug');
41
+ ?>
42
+
43
+ <?php header("Content-Type:text/html;charset=utf-8"); ?>
44
+ <?php //error_reporting(E_ALL | E_STRICT);
45
+ if (version_compare(PHP_VERSION, '5.1.0', '>=')) {//PHP5.1.0以上の場合のみタイムゾーンを定義
46
+ date_default_timezone_set('Asia/Tokyo');//タイムゾーンの設定(日本以外の場合には適宜設定ください)
47
+ }
48
+
49
+ //フォームのメールアドレス入力箇所のname属性の値(name="○○" の○○部分)
50
+ $Email = "Email";
51
+
52
+ // 自動返信メール設定(START)
53
+ // 差出人に送信内容確認メール(自動返信メール)を送る(送る=1, 送らない=0)
54
+ // 送る場合は、フォーム側のメール入力欄のname属性の値が上記「$Email」で指定した値と同じである必要があります
55
+ $remail = 0;
56
+
57
+ //自動返信メールの送信者欄に表示される名前 ※あなたの名前や会社名など(もし自動返信メールの送信者名が文字化けする場合ここは空にしてください)
58
+ $refrom_name = "";
59
+
60
+ // 差出人に送信確認メールを送る場合のメールのタイトル(上記で1を設定した場合のみ)
61
+ $re_subject = "送信ありがとうございました";
62
+
63
+ //フォーム側の「名前」箇所のname属性の値 ※自動返信メールの「○○様」の表示で使用します。
64
+ //指定しない、または存在しない場合は、○○様と表示されないだけです。あえて無効にしてもOK
65
+ $dsp_name = 'お名前';
66
+
67
+ //自動返信メールの冒頭の文言 ※日本語部分のみ変更可
68
+ $remail_text = <<< TEXT
69
+
70
+ お問い合わせありがとうございました。
71
+ 早急にご返信致しますので今しばらくお待ちください。
72
+
73
+ 送信内容は以下になります。
74
+
75
+ TEXT;
76
+
77
+
78
+ FOOTER;
79
+
80
+
81
+ //------------
82
+ // 自動返信メール設定(END)
83
+ //-------------
84
+
85
+ //メールアドレスの形式チェックを行うかどうか。(する=1, しない=0)
86
+ //※デフォルトは「する」。特に理由がなければ変更しないで下さい。メール入力欄のname属性の値が上記「$Email」で指定した値である必要があります。
87
+ $mail_check = 1;
88
+
89
+ //全角英数字→半角変換を行うかどうか。(する=1, しない=0)
90
+ $hankaku = 0;
91
+
92
+ $use_envelope = 0;
93
+
94
+
95
+
96
+ // 関数実行、変数初期化
97
+ //トークンチェック用のセッションスタート
98
+ if($useToken == 1 && $confirmDsp == 1){
99
+ session_name('PHPMAILFORMSYSTEM');
100
+ session_start();
101
+ }
102
+ $encode = "UTF-8";//このファイルの文字コード定義(変更不可)
103
+ if(isset($_GET)) $_GET = sanitize($_GET);//NULLバイト除去//
104
+ if(isset($_POST)) $_POST = sanitize($_POST);//NULLバイト除去//
105
+ if(isset($_COOKIE)) $_COOKIE = sanitize($_COOKIE);//NULLバイト除去//
106
+ if($encode == 'SJIS') $_POST = sjisReplace($_POST,$encode);//Shift-JISの場合に誤変換文字の置換実行
107
+ $funcRefererCheck = refererCheck($Referer_check,$Referer_check_domain);//リファラチェック実行
108
+
109
+ //変数初期化
110
+ $sendmail = 0;
111
+ $empty_flag = 0;
112
+ $ng_flag = 0;
113
+ $post_mail = '';
114
+ $errm ='';
115
+ $header ='';
116
+
117
+ if($requireCheck == 1) {
118
+ $requireResArray = requireCheck($require);//必須チェック実行し返り値を受け取る
119
+ $errm = $requireResArray['errm'];
120
+ $empty_flag = $requireResArray['empty_flag'];
121
+
122
+ }
123
+
124
+
125
+ //NGワード設定
126
+ // 小文字化
127
+ $str = mb_strtolower($str, "UTF-8");
128
+
129
+ // 半角英数字全角カタカナへ置換
130
+ $str = mb_convert_kana($str, "KVas");
131
+
132
+ // スペース、句読点などを削除
133
+ $target_sentence = preg_replace("/\s|、|。/", "’’", $str);
134
+
135
+ // 禁止キーワード
136
+ $ng_words = array("あいう");
137
+ foreach ($ng_words as $ngWordsVal) {
138
+ // 対象文字列にキーワードが含まれるか
139
+ if (mb_strpos($target_sentence, $ngWordsVal) !== FALSE) {
140
+ $ng_flag == 1;
141
+ }
142
+ }
143
+
144
+ // 縦読み対策
145
+ // 1文字に分割
146
+ $lines = explode("\n", $str);
147
+ if (! empty($lines)) {
148
+ if (count($lines) > 1) {
149
+ foreach($lines as $linesKey => $linesVal) {
150
+ $onechar[$linesKey] = preg_split('//u', $linesVal, -1, PREG_SPLIT_NO_EMPTY);
151
+ }
152
+ }
153
+ }
154
+ // 縦列を結合し、単語にする
155
+ if (! empty($onechar)) {
156
+ foreach($onechar as $onecharVal) {
157
+ foreach($onecharVal as $positionKey => $positionVal) {
158
+ $rows[$positionKey] = $rows[$positionKey] . $positionVal;
159
+ }
160
+ }
161
+ }
162
+ // 単語を結合し、1行にする
163
+ if (! empty($rows)) {
164
+ foreach($rows as $rowsVal) {
165
+ // 3文字以下は対象外
166
+ if (mb_strlen($rowsVal) <= 3) {
167
+ continue;
168
+ }
169
+ $target_tateyomi = $target_tateyomi . '/' . $rowsVal;
170
+ }
171
+ // 全体でなく、1行目 $rows[0] や 2行目 $rows[1] だけの場合
172
+ // $target_tateyomi = $rows[0] . '/' . $rows[1];
173
+ }
174
+
175
+ if (! empty($target_tateyomi)) {
176
+ // 通常文と同じように禁止キーワードチェック
177
+ foreach ($ng_words as $ngWordsVal) {
178
+ // 対象文字列にキーワードが含まれるか
179
+ if (mb_strpos($target_tateyomi, $ngWordsVal) !== FALSE) {
180
+ $ng_flag == 1;
181
+ }
182
+ }
183
+ }
184
+
185
+ ?>
186
+
187
+ <!-- ▼************ 送信内容表示部 ※編集は自己責任で ************ ▼-->
188
+ <div id="formWrap">
189
+ <?php
190
+ if($ng_flag == 1){ ?>
191
+ <h4>NGワードが含まれています。</h4>
192
+ }
193
+ <?php if($empty_flag == 1){ ?>
194
+ <div align="center">
195
+ <h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4>
196
+ <?php echo $errm; ?><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()">
197
+ </div>
198
+ <?php }else{ ?>
199
+ <h3>確認画面</h3>
200
+ <p align="center">以下の内容で間違いがなければ、「送信する」ボタンを押してください。</p>
201
+ <form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="POST">
202
+ <table class="formTable">
203
+ <?php echo confirmOutput($_POST);//入力内容を表示?>
204
+ </table>
205
+ <p align="center"><input type="hidden" name="mail_set" value="confirm_submit">
206
+ <input type="hidden" name="httpReferer" value="<?php echo h($_SERVER['HTTP_REFERER']);?>">
207
+ <input type="submit" value=" 送信する ">
208
+ <input type="button" value="前画面に戻る" onClick="history.back()"></p>
209
+ </form>
210
+ <?php } ?>
211
+ </div><!-- /formWrap -->
212
+ <!-- ▲ *********** 送信内容確認部 ※編集は自己責任で ************ ▲-->
213
+
214
+ <!-- ▼ Footerその他コンテンツなど ※編集可 ▼-->
215
+ </body>
216
+ </html>
217
+ <?php
218
+ /* ▲▲▲送信確認画面のレイアウト ※オリジナルのデザインも適用可能▲▲▲ */
219
+ }
220
+
221
+ if(($jumpPage == 0 && $sendmail == 1) || ($jumpPage == 0 && ($confirmDsp == 0 && $sendmail == 0))){
222
+ }
223
+
224
+ /* ▼▼▼送信完了画面のレイアウト 編集可 ※送信完了後に指定のページに移動しない場合のみ表示▼▼▼ */
225
+ ?>
226
+ <!DOCTYPE HTML>
227
+ <html lang="ja">
228
+ <head>
229
+ <meta charset="utf-8">
230
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
231
+ <meta name="format-detection" content="telephone=no">
232
+ <title>完了画面</title>
233
+ </head>
234
+ <body>
235
+ <div align="center">
236
+ <?php if($ng_flag == 1){ ?>
237
+ <h4>NGワードが含まれています。</h4>
238
+ <?php if($empty_flag == 1){ ?>
239
+ <h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4>
240
+ <div style="color:red"><?php echo $errm; ?></div>
241
+ <br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()">
242
+ </div>
243
+ </body>
244
+ </html>
245
+ <?php }else{ ?>
246
+ 送信ありがとうございました。<br />
247
+ 送信は正常に完了しました。<br /><br />
248
+ <a href="<?php echo $site_top ;?>">トップページへ戻る&raquo;</a>
249
+ </div>
250
+ <?php copyright(); ?>
251
+ <!-- CV率を計測する場合ここにAnalyticsコードを貼り付け -->
252
+ </body>
253
+ </html>
254
+ <?php
255
+ /* ▲▲▲送信完了画面のレイアウト 編集可 ※送信完了後に指定のページに移動しない場合のみ表示▲▲▲ */
256
+ }
257
+ }
258
+ //確認画面無しの場合の表示、指定のページに移動する設定の場合、エラーチェックで問題が無ければ指定ページヘリダイレクト
259
+ else if(($jumpPage == 1 && $sendmail == 1) || $confirmDsp == 0) {
260
+ if($ng_flag == 1){ ?>
261
+ <div align="center"><h4>NGワードが含まれています。</h4><div style="color:red"><?php echo $errm; ?></div><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"></div>
262
+ <?php if($empty_flag == 1){ ?>
263
+ <div align="center"><h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4><div style="color:red"><?php echo $errm; ?></div><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"></div>
264
+ <?php
265
+ }else{ header("Location: ".$thanksPage); }
266
+ }
267
+ }
268
+ ?>
269
+
270
+ ```
271
+
35
272
 
36
273
  ### 試したこと
37
274
  記述する場所を***送信内容表示部***から***関数実行、変数初期化***のところに書き換えた