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

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

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

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

3回答

1698閲覧

コードの添削をお願いしたいPHP

ghtew2

総合スコア245

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2021/02/13 07:55

実現したいこと
このコードはどこがおかしいのでしょうか?
入力フォームのコード書いています。

505エラーがでます。分け合って、エラー箇所の表示に時間がかかるため、
添削お願いしたいのでが、よろしくお願いいたします

php

1<?php 2session_start(); 3 4$errors = array(); 5 6if(isset($_POST['submit'])) { 7 8$name = $_POST['name']; 9$furigana = $_POST['furigana']; 10$email = $_POST['email']; 11$tel = $_POST['tel']; 12$lineid = $_POST['lineid']; 13 14 15$time4 =$_POST['time4']; 16$timehh1 =$_POST['timehh1']; 17 18 19$age =$_POST['age']; 20$work =$_POST['work']; 21$nunsyuu =$_POST['nunsyuu']; 22$mokuhyuu =$_POST['mokuhyuu']; 23$badmoney =$_POST['badmoney']; 24$workkeikenn =$_POST['workkeikenn']; 25$question =$_POST['question']; 26 27 28$subject = $_POST['subject']; 29$body = $_POST['body']; 30 31 32 33 34 35$name = htmlspecialchars($name, ENT_QUOTES); 36$furigana = htmlspecialchars($furigana, ENT_QUOTES); 37$email = htmlspecialchars($email, ENT_QUOTES); 38$tel = htmlspecialchars($tel, ENT_QUOTES); 39$lineid = htmlspecialchars($lineid, ENT_QUOTES); 40 41$time4 = htmlspecialchars($time4, ENT_QUOTES); 42$timehh1 = htmlspecialchars($timehh1, ENT_QUOTES); 43 44 45$age = htmlspecialchars($age, ENT_QUOTES); 46$work = htmlspecialchars($work, ENT_QUOTES); 47$nunsyuu = htmlspecialchars($nunsyuu, ENT_QUOTES); 48$mokuhyuu = htmlspecialchars($mokuhyuu, ENT_QUOTES); 49$badmoney = htmlspecialchars($badmoney, ENT_QUOTES); 50$workkeikenn = htmlspecialchars($workkeikenn, ENT_QUOTES); 51$question = htmlspecialchars($question, ENT_QUOTES); 52 53$subject = htmlspecialchars($subject, ENT_QUOTES); 54$body = htmlspecialchars($body, ENT_QUOTES); 55 56 57if($name === "") { $errors['name'] ="名前が入力されていません。 "; 58} 59 60if($furigana === "") { $errors['furigana'] ="フリガナが入力されていません。 "; 61} 62if($email === "") { $errors['email'] ="メールアドレスが入力されていません。 "; 63} 64if(!email.match(/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/)) { 65 66 errmsg = errmsg + "メールアドレスをご確認下さい "; 67} 68 69if($tel === "") { $errors['tel'] ="電話番号が入力されていません。 "; 70} 71 72 73if($time4 === "") { $errors['time4'] ="第1希望:※月と日付を選択してください。 "; 74} 75if($timehh1 === "") { $errors['timehh1'] ="第1希望:※時間指定1を選択してください。 "; 76} 77 78 79} 80 81if(count($errors) === 0) { 82$_SESSION['name'] = $name; 83$_SESSION['furigana'] = $furigana; 84$_SESSION['email'] = $email; 85$_SESSION['tel'] = $tel; 86$_SESSION['lineid'] = $lineid; 87 88$_SESSION['time4'] = $time4; 89$_SESSION['timehh1'] = $timehh1; 90 91 92 93$_SESSION['age'] = $age; 94$_SESSION['work'] = $work; 95$_SESSION['nunsyuu'] = $nunsyuu; 96$_SESSION['mokuhyuu'] = $mokuhyuu; 97$_SESSION['badmoney'] = $badmoney; 98$_SESSION['workkeikenn'] = $workkeikenn; 99$_SESSION['question'] = $question; 100 101 102$_SESSION['subject'] = $subject; 103$_SESSION['body'] = $body; 104 105header('Location:http://www.rensyuu.shop/rensyuu.shop/form2.php'); 106 exit(); 107 } 108} 109 110 111if(isset($_GET['action']) && $_GET['action'] === 'edit'){ 112 113 114$name = $_SESSION['name']; 115$furigana = $_SESSION['furigana']; 116$email = $_SESSION['email']; 117$tel = $_SESSION['tel']; 118$lineid = $_SESSION['lineid']; 119 120$time4 = $_SESSION['time4']; 121$timehh1 = $_SESSION['timehh1']; 122 123 124$age = $_SESSION['age']; 125$work = $_SESSION['work']; 126$nunsyuu = $_SESSION['nunsyuu']; 127$mokuhyuu = $_SESSION['mokuhyuu']; 128$badmoney = $_SESSION['badmoney']; 129$workkeikenn = $_SESSION['workkeikenn']; 130$question = $_SESSION['questio']; 131 132 133$subject = $_SESSION['subject']; 134$body = $_SESSION['body']; 135 } 136?> 137 138 139 140<!DOCTYPE html> 141<html> 142 143<head> 144<meta content="text/html; charset=utf-8"/> 145 146 147 <title>お問い合わせ</title> 148</head> 149<body> 150 151 152<?php echo "<ul>";foreach($errors as $value) { 153 154echo "<li>"; 155echo $value; 156echo "</li>"; 157} 158 159echo "</ul>"; 160 161?> 162 163<form action ="form1.php" method ="post"> 164 165 166 167 以下追加↓ 168 169 170 <th>名前:※</th><td><input type ="text" name =" name" value =" <?php if(isset($name)){ echo $name; } ?>"/></td > 171 </tr> 172 <tr> 173 174 175 176 <th>フリガナ:※</th><td> 177 178 179<input type="text" name="furigana" value ="<?php if(isset($furigana)){ echo $furigana; } ?>"/></td > 180 181</tr> 182 <tr> 183 <th>メールアドレス:※</th><td> 184 185 186<input type ="text"name ="email" value ="<?php if(isset($email)){ echo $email; } ?>"/></td > 187</tr> 188 <tr> 189 190 191 <th>電話番号:※</th><td> 192 193 194<input type="text" name="tel" value ="<?php if(isset($tel)){ echo $tel; } ?>"/></td > 195 196</tr> 197 <tr> 198 199 200 201 <th> LINE ID:</th><td> 202 203<input type="text" name="lineid" value ="<?php if(isset($lineid)){ echo $lineid; } ?>"/></td > 204 205</tr> 206 <tr> 207 208 209 <div class="b c font25 span lt_004 w95 cm"><span>下記選択枠より、</span><span>ご希望の日時をご選択ください。</span></div> 210 211 212 213 214 215 216<div class="select_date font22"> 217 218 <table><tbody><tr class="time_list"> 219 <td class="b">第1希望:<span class="fontS"></span></td> 220 <td class="fontSS"> 221 <table><tbody><tr class="time_list2"> 222 <td> 223 <input type="date" id="input_date1" class="cal lt_004 hasDatepicker" name="time4" value="<?php if(isset($time4)){ echo $time4; } ?>"/></td > 224 225 226 </td> 227 <td> 228 <div class="wrap"> 229 230 231 <select id="input_time1" name="timehh1"> 232 <option value="時間指定1"></option> 233 <option value="10:00~11:00">10:00~11:00</option> 234 <option value="11:00~12:00">11:00~12:00</option> 235 <option value="12:00~13:00">12:00~13:00</option> 236 <option value="13:00~14:00">13:00~14:00</option> 237 <option value="14:00~15:00">14:00~15:00</option> 238 <option value="15:00~16:00">15:00~16:00</option> 239 <option value="16:00~17:00">16:00~17:00</option> 240 <option value="17:00~18:00">17:00~18:00</option> 241 <option value="18:00~19:00">18:00~19:00</option> 242 <option value="19:00~20:00">19:00~20:00</option> 243 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 244 10:00~11:00</option> 245 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 246 11:00~12:00</option> 247 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 248 12:00~13:00</option> 249 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 250 13:00~14:00</option> 251 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 252 14:00~15:00</option> 253 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 254 15:00~16:00</option> 255 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 256 16:00~17:00</option> 257 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 258 17:00~18:00</option> 259 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 260 18:00~19:00</option> 261 <?php if(isset($timehh1) && $timehh1==="時間指定1") { echo "selected" ;} ?>> 262 19:00~20:00</option> 263 </select> 264 </div> 265 </td> 266 </tr></tbody></table> 267 </td> 268 </tr></tbody></table> 269 270 271 272 273</div> 274<div class="font16 c b">※は必須項目となります。</div> 275 276 277 278<div class="padding5"></div> 279<div class="font25 black b c span w95 cm lt_004"> 280 <span>より明確なご提案を</span><span>させて</span><span>いただくため</span><br class="hidden400"><span>↓下記アンケートにも</span><span>任意で</span><span>お答えください。↓</span> 281</div> 282<div class="padding5"></div> 283 284 285年齢:<div> 286 287 <input type="text" name="age" value=""> 288 289 </div> 290 291 <div> 292 職業:<div> 293 294 <input type="text" name="work" value=""> 295 </div> 296 </div> 297 298 <div> 299 年収:<div> 300 301 <input type="text" name="nunsyuu" value=""> 302 </div> 303 </div> 304 305 306 <div> 307 目標月収:<div> 308 309 <input type="text" name="mokuhyuu" value=""> 310 </div> 311 </div> 312 313 314 315 <div> 316 借金:<div> 317 318 <input type="text" name="badmoney" value=""> 319 </div> 320 </div> 321 322 323 324 <div> 325 副業経験:</div> 326 <div> 327 328 <input type="text" name="workkeikenn" value=""> 329 </div> 330 331 332 333 <div> 334 その他質問:</div> 335 336 <textarea name="question"></textarea> 337 338 339<th>お問い合わせの種類</th><td> 340 341 342 <select name ="subject"> <option value ="お仕事に関するお問い合わせ"> 343 <?php if(isset($subject) && $subject==="お仕事に関するお問い合わせ") { echo "selected" ;} ?>> 344 お仕事に関するお問い合わせ</option> 345 346 <option value ="その他のお問い合わせ"> 347 <?php if( isset( $subject) && $subject ==="その他のお問い合わせ") {echo "selected"; } ?>>その他のお問い合わせ </option></select> 348 </td> 349 350 </tr> 351 <tr> 352 <th>お問い合わせ内容 </th> 353 <td><textarea name="body"cols ="40" rows ="10"><?php if(isset($body)){ echo $body; } ?></textarea></td></tr><tr> 354 355 <td colspan="2"><input type ="submit" name ="submit"value="確認画面へ"></td></tr> 356</table> 357 </form> 358</body> 359</html>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/13 08:02

505が出ているのであれば、まずそれから解消して、そののちに切り分けを行い質問してください。 ただ、現状では「全体がおかしいです」って回答が付くので、適切な教本で体系的な学習をした方が良いです。
m.ts10806

2021/02/13 08:05

1個1個指摘していくのは億劫になる内容です。 ちゃんとしたレビューをお望みなら質問と回答という形ではおさまりません。
m.ts10806

2021/02/13 08:06 編集

PHPの中にそのままJavaScriptのコード混じってるみたいですし、これは厳しい。
guest

回答3

0

ツッコミどころが多数なので、ヒントのみ示します。


email.match()なんて、phpでjsは動かないよね。
それにメールアドレスを正規表現で検証するなら正確性はさておき、
filter_input検証フィルタにFILTER_VALIDATE_EMAILを使ってみるとか。
ここを改善すれば、とりあえず505エラーは突破できるかもしれませんし、ほかにも潜んでいるかもしれません。

if () { ... }
の{}の対応がとてもあやしいです。
phpの文法を理解してせめてphpのみの箇所だけでも、
適切にインデントしてかっこの対応ができているかチェックしてみてください。

php

1<?php 2session_start(); 3 4$errors = array(); 5 6if (isset($_POST['submit'])) { 7 8 $name = $_POST['name']; 9 $furigana = $_POST['furigana']; 10 $email = $_POST['email']; 11 $tel = $_POST['tel']; 12 $lineid = $_POST['lineid']; 13 14 $time4 =$_POST['time4']; 15 $timehh1 =$_POST['timehh1']; 16 17 $age =$_POST['age']; 18 $work =$_POST['work']; 19 $nunsyuu =$_POST['nunsyuu']; 20 $mokuhyuu =$_POST['mokuhyuu']; 21 $badmoney =$_POST['badmoney']; 22 $workkeikenn =$_POST['workkeikenn']; 23 $question =$_POST['question']; 24 25 $subject = $_POST['subject']; 26 $body = $_POST['body']; 27 28 //$name = htmlspecialchars($name, ENT_QUOTES); 29 //$furigana = htmlspecialchars($furigana, ENT_QUOTES); 30 //$email = htmlspecialchars($email, ENT_QUOTES); 31 //$tel = htmlspecialchars($tel, ENT_QUOTES); 32 //$lineid = htmlspecialchars($lineid, ENT_QUOTES); 33 34 //$time4 = htmlspecialchars($time4, ENT_QUOTES); 35 //$timehh1 = htmlspecialchars($timehh1, ENT_QUOTES); 36 37 //$age = htmlspecialchars($age, ENT_QUOTES); 38 //$work = htmlspecialchars($work, ENT_QUOTES); 39 //$nunsyuu = htmlspecialchars($nunsyuu, ENT_QUOTES); 40 //$mokuhyuu = htmlspecialchars($mokuhyuu, ENT_QUOTES); 41 //$badmoney = htmlspecialchars($badmoney, ENT_QUOTES); 42 //$workkeikenn = htmlspecialchars($workkeikenn, ENT_QUOTES); 43 //$question = htmlspecialchars($question, ENT_QUOTES); 44 45 //$subject = htmlspecialchars($subject, ENT_QUOTES); 46 //$body = htmlspecialchars($body, ENT_QUOTES); 47 48 if ($name === "") { 49 $errors['name'] ="名前が入力されていません。 "; 50 } 51 if ($furigana === "") { 52 $errors['furigana'] ="フリガナが入力されていません。 "; 53 } 54 if ($email === "") { 55 $errors['email'] ="メールアドレスが入力されていません。 "; 56 } 57 //if (!email.match(/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/)) { // <--- 正しいやり方を調べてね 58 // 59 // errmsg = errmsg + "メールアドレスをご確認下さい "; 60 //} 61 if ($tel === "") { 62 $errors['tel'] ="電話番号が入力されていません。 "; 63 } 64 if($time4 === "") { 65 $errors['time4'] ="第1希望:※月と日付を選択してください。 "; 66 } 67 if ($timehh1 === "") { 68 $errors['timehh1'] ="第1希望:※時間指定1を選択してください。 "; 69 } 70 71 if(count($errors) === 0) { 72 $_SESSION['name'] = $name; 73 $_SESSION['furigana'] = $furigana; 74 $_SESSION['email'] = $email; 75 $_SESSION['tel'] = $tel; 76 $_SESSION['lineid'] = $lineid; 77 $_SESSION['time4'] = $time4; 78 $_SESSION['timehh1'] = $timehh1; 79 $_SESSION['age'] = $age; 80 $_SESSION['work'] = $work; 81 $_SESSION['nunsyuu'] = $nunsyuu; 82 $_SESSION['mokuhyuu'] = $mokuhyuu; 83 $_SESSION['badmoney'] = $badmoney; 84 $_SESSION['workkeikenn'] = $workkeikenn; 85 $_SESSION['question'] = $question; 86 $_SESSION['subject'] = $subject; 87 $_SESSION['body'] = $body; 88 89 header('Location:http://www.rensyuu.shop/rensyuu.shop/form2.php'); 90 exit(); 91 } 92} 93

などと、インデント量を吟味して書かないと、かっこの対応すら見失います。


$_POSTから受け取ったフォーム送信データを早々にhtmlspecialchars()で加工していますが、
ファイルに保存したりデータベースに格納するときにHTML出力用の加工が加わっていると、
いざ検索するときにヒットしなくなります。
検索する単語もhtmlspecialchars()で加工すれば回避できそうに見えますが、
そもそもHTML出力する直前で加工して出力しさえすれば、
HTML出力用に加工したデータを変数で引っ張り回す必要などありません。

よくある手として、
PHP で h() を書くなら一緒に echo しよう。 - こせきの技術日記
なんてのもあります。
いわゆる「h関数」ですが、いっそechoも組み合わせて出力させちゃえばいいって考え方もアリです。


htmlの文法をあれこれ無視した記述があり、
とても指摘しきれません。

option要素のselectedって、<option value="10:00~11:00" selected>10:00~11:00</option>の位置に出現しないと効果がないため、

php

1<option value="10:00~11:00"<?php 2 if (...) { 3 echo ' selected'; 4} 5?>>10:00~11:00</option>

みたいになります。

とか。
用事があるので、打ち切ります。

投稿2021/02/13 08:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ざっくり書き直しておきます

PHP

1<?php 2$submit = filter_input(INPUT_POST,'submit'); 3$name = filter_input(INPUT_POST,'name'); 4$furigana = filter_input(INPUT_POST,'furigana'); 5$email = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL); 6$tel = filter_input(INPUT_POST,'tel',FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^\d+$/"]]); 7$lineid = filter_input(INPUT_POST,'lineid'); 8$errors=[]; 9 10function h($val){ 11 return htmlspecialchars($val); 12} 13 14if(!is_null($submit)){ 15 if($name === "") $errors['name'] ="名前が入力されていません。 "; 16 if($furigana === "") $errors['furigana'] ="フリガナが入力されていません。 "; 17 if($email===false) $errors['email'] ="メールアドレスをチェックして。 "; 18 if($tel===false) $errors['tel'] ="電話番号をチェックして。 "; 19 if(count($errors)>0){ 20 echo "<ul>"; 21 array_walk($errors,function($x){ 22 echo "<li>$x</li>\n"; 23 }); 24 echo "</ul>"; 25 }else{ 26 echo "OK!<br>\n"; 27 } 28} 29?> 30 31<form method ="post"> 32<table> 33<tbody> 34<tr> 35<th>名前:※</th> 36<td><input type ="text" name =" name" value ="<?=h($name)?>" required></td> 37</tr> 38<tr> 39<th>フリガナ:※</th> 40<td><input type="text" name="furigana" value ="<?=h($furigana)?>" required></td > 41</tr> 42<tr> 43<th>メールアドレス:※</th> 44<td><input type ="text"name ="email" value ="<?=h($email)?>" required></td > 45</tr> 46<tr> 47<th>電話番号:※</th> 48<td><input type="text" name="tel" value ="<?=h($tel)?>" required></td > 49</tr> 50<tr> 51<th> LINE ID:</th><td> 52<input type="text" name="lineid" value ="<?=h($lineid)?>"></td > 53</tr> 54</tbody> 55</table> 56<input type="submit" name="submit" value="send"> 57</form>

投稿2021/02/13 17:55

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

タグの中にタイプミスがありますが、大丈夫ですか?
空白が足りないです。
name="body"cols
になっています。

<td><textarea name="body"cols ="40" rows ="10"><?php if(isset($body)){ echo $body; } ?></textarea></td></tr><tr>

ただ、それだけで505エラーが出るかは分かりません。
普通にエラー番号を受けとめると、検証しているクライアントのHTTPリクエストは大丈夫かなと?想像してしまいます。(ブラウザが古くて、サーバーが受け付けなくなった古いタイプのリクエストを送っているなど。phpやhttpdの設定でエラーを厳し目に出す環境はあったような気もします)

もし単純なタイプミスを直しても、同じ現象が続く場合、エラーを返しているサーバーやがエラーを受け取っているクライアント(フラウザなど)が何かなどの動作環境がわかれば、もう少し見当がつく人がでてくるかもしれませんね。

505 HTTP Version Not Supported
サポートしていないHTTPバージョン。リクエストがサポートされていないHTTPバージョンである場合に返される。

投稿2021/02/13 08:21

phoepsilonix

総合スコア233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問