下記のコードで以下のようなエラーが出てしまいます。
input.php
PHP
1<?php 2 3session_start(); 4 5require 'validation.php'; 6 7header('X-FRAME-OPTIONS:DENY'); 8 9// スーパーグローバル変数 php 9種類 10// 連想配列 11if(!empty($_POST)){ 12 echo '<pre>'; 13 var_dump($_POST) ; 14 echo '</pre>'; 15} 16 17function h($str) 18{ 19 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 20} 21 22 23// 入力、確認、完了 input.php, confirm.php, thanks.php 24// CSRF 偽物のinput.php->悪意のあるページ 25// input.php 26 27$pageFlag = 0; 28$errors=validation($_POST); 29 30if(!empty($_POST['btn_confirm']) && empty($errors)){ 31 $pageFlag = 1; 32} 33if(!empty($_POST['btn_submit'])){ 34 $pageFlag = 2; 35} 36 37 38?> 39 40<!DOCTYPE html> 41<meta charset="utf-8"> 42<head></head> 43<body> 44 45 46<?php if($pageFlag === 1 ) : ?> 47<?php if($_POST['csrf'] === $_SESSION['csrfToken']) :?> 48<form method="POST" action="input.php"> 49氏名 50<?php echo h($_POST['your_name']) ;?> 51<br> 52メールアドレス 53<?php echo h($_POST['email']) ;?> 54<br> 55ホームページ 56<?php echo h($_POST['url']) ;?> 57<br> 58性別 59<?php 60 if($_POST['gender'] === '0'){ echo '男性'; } 61 if($_POST['gender'] === '1'){ echo '女性'; } 62?> 63<br> 64年齢 65<?php 66 if($_POST['age'] === '1'){ echo '〜19歳' ;} 67 if($_POST['age'] === '2'){ echo '20歳〜29歳' ;} 68 if($_POST['age'] === '3'){ echo '30歳〜39歳' ;} 69 if($_POST['age'] === '4'){ echo '40歳〜49歳' ;} 70 if($_POST['age'] === '5'){ echo '50歳〜59歳' ;} 71 if($_POST['age'] === '6'){ echo '60歳〜' ;} 72?> 73 74<br> 75お問い合わせ内容 76<?php echo h($_POST['contact']) ;?> 77<br> 78 79<input type="submit" name="back" value="戻る"> 80<input type="submit" name="btn_submit" value="送信する"> 81<input type="hidden" name="your_name" value="<?php echo h($_POST['your_name']) ;?>"> 82<input type="hidden" name="email" value="<?php echo h($_POST['email']) ;?>"> 83<input type="hidden" name="url" value="<?php echo h($_POST['url']) ;?>"> 84<input type="hidden" name="gender" value="<?php echo h($_POST['gender']) ;?>"> 85<input type="hidden" name="age" value="<?php echo h($_POST['age']) ;?>"> 86<input type="hidden" name="contact" value="<?php echo h($_POST['contact']) ;?>"> 87<input type="hidden" name="csrf" value="<?php echo h($_POST['csrf']) ;?>"> 88</form> 89 90<?php endif; ?> 91 92<?php endif; ?> 93 94<?php if($pageFlag === 2 ) : ?> 95<?php if($_POST['csrf'] === $_SESSION['csrfToken']) :?> 96送信が完了しました。 97 98<?php unset($_SESSION['csrfToken']); ?> 99<?php endif; ?> 100<?php endif; ?> 101 102 103<?php if($pageFlag === 0 ) : ?> 104<?php 105if(!isset($_SESSION['csrfToken'])){ 106 $csrfToken = bin2hex(random_bytes(32)); 107 $_SESSION['csrfToken'] = $csrfToken; 108} 109$token = $_SESSION['csrfToken']; 110?> 111 112<?php if(!empty($errors) && !empty($_POST['btn_confirm'])) :?> 113<?php echo '<ul>';?> 114<?php 115 foreach($errors as $error){ 116 echo '<li>'.$error.'</li>'; 117 } 118?> 119<?php echo '</ul>';?> 120 121<?php endif; ?> 122 123<form method="POST" action="input.php"> 124氏名 125<input type="text" name="your_name" value="<?php if(!empty($_POST['your_name'])){echo h($_POST['your_name']) ;} ?>"> 126<br> 127メールアドレス 128<input type="email" name="email" value="<?php if(!empty($_POST['email'])){echo h($_POST['email']) ;} ?>"> 129<br> 130ホームページ 131<input type="url" name="url" value="<?php if(!empty($_POST['url'])){echo h($_POST['url']) ;} ?>"> 132<br> 133性別 134<input type="radio" name="gender" value="0" 135<?php if(isset($_POST['gender']) && $_POST['gender'] === '0' ) 136{ echo 'checked'; } ?>>男性 137<input type="radio" name="gender" value="1" 138<?php if(isset($_POST['gender']) && $_POST['gender'] === '1' ) 139{ echo 'checked'; } ?>>女性 140<br> 141年齢 142<select name="age"> 143 <option value="">選択してください</option> 144 <option value="1">〜19歳</option> 145 <option value="2">20歳〜29歳</option> 146 <option value="3">30歳〜39歳</option> 147 <option value="4">40歳〜49歳</option> 148 <option value="5">50歳〜59歳</option> 149 <option value="6">60歳〜</option> 150</select> 151<br> 152お問い合わせ内容 153<textarea name="contact"> 154<?php if(!empty($_POST['contact'])){echo h($_POST['contact']) ;} ?> 155</textarea> 156<br> 157<input type="checkbox" name="caution" value="1">注意事項にチェックする 158<br> 159 160<input type="submit" name="btn_confirm" value="確認する"> 161<input type="hidden" name="csrf" value="<?php echo $token; ?>"> 162</form> 163<?php endif; ?> 164 165</body> 166</html> 167
validation.php
php
1<?php 2 3 4function validation($request){ 5 6 $errors=[]; 7 8 if(empty($request['your_name']) || 20<mb_strlen($request['your_name'])){ 9 $errors[]='氏名は必須です。20文字以内で入力してください。'; 10 } 11 12 if(empty($request['email']) || !filter_var($request['email'], FILTER_VALIDATE_EMAIL)){ 13 $errors[]='「メールアドレスは必須です。正しい形式で入力してください。'; 14 } 15 16 17 18 if(!empty($request['url'])){ 19 if(!filter_var($request['url'],FILTER_VALIDATE_URL)){ 20 $errors[]='「ホームページ」は正しい形式で入力してください。'; 21 } 22 } 23 24 if(!isset($request)['gender'])){ 25 $errors[]='「性別」は必須です。'; 26 } 27 28 if(empty($request['age']) || 6<$request['age']){ 29 $errors[]='「年齢」は必須です。'; 30 } 31 32 if(empty($request['contact']) || 200<mb_strlen($request['contact'])){ 33 $errors[]='お問い合わせ内容は必須です。200文字以内で入力してください。'; 34 } 35 36 if(empty($request['caution'])){ 37 $errors[]='「注意事項」をご確認ください。'; 38 } 39 40 return $errors; 41} 42 ?> 43
・エラー名
Parse error: syntax error, unexpected token "}" in C:\Users\bikek\Desktop\xamp\htdocs\train\validation.php on line 14
そしてvalisation.phpの正解サンプルが存在するのですが、この正解サンプルと自分が書いたコードに違いは無いように見えます。
以下がvalidaion.phpの正解サンプルです。
php
1<?php 2 3function validation($request){ //$_POST連想配列 4 5 $errors = []; 6 7 if(empty($request['your_name']) || 20 < mb_strlen($request['your_name']) ){ 8 $errors[] = '「氏名」は必須です。20文字以内で入力してください。'; 9 } 10 11 if(empty($request['email']) || !filter_var($request['email'], FILTER_VALIDATE_EMAIL)){ 12 $errors[] = '「メールアドレス]は必須です。正しい形式で入力してください。'; 13 } 14 15 if(!empty($request['url'])){ 16 if(!filter_var($request['url'], FILTER_VALIDATE_URL)){ 17 $errors[] = '「ホームページ」は正しい形式で入力してください。'; 18 } 19 } 20 21 if(!isset($request['gender'])){ 22 $errors[] = '「性別」は必須です。'; 23 } 24 25 if(empty($request['age']) || 6 < $request['age']){ 26 $errors[] = '「年齢」は必須です。' ; 27 } 28 29 30 if(empty($request['contact']) || 200 < mb_strlen($request['contact']) ){ 31 $errors[] = '「お問い合わせ内容」は必須です。200文字以内で入力してください。'; 32 } 33 34 if(empty($request['caution'])){ 35 $errors[] = '「注意事項」をご確認ください。'; 36 } 37 38 return $errors; 39} 40 41?>
特に14行目あたりで、コードの間違いがないように見えるのですが、なぜエラーが発生するのかが分かりません。
この理由をご回答頂ければ幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/05 11:06
2021/10/05 11:07
2021/10/05 11:45