PHPに複数のformのvalueをsubmitするときに生じる問題
htmlとphpで『PHPの型の相互変換学習プログラム』を作りました。
Noticeエラーが発生するという不完全部分があるので、質問させていただきます。
仕様、問題点、ソースコード
htmlのテキストボックスに入力した値を、
boolean、integer型、float型、string型に型変換を施すと何の値に変換されるか、
を確認する学習プログラムです。
(ファイル名は、それぞれtypeTrans.htmlとtypeTrans.phpです。)
今回はString型とinteger型のみで、
それぞれのテキストボックスとsubmitボタンを用意しました。
問題点は、
一方のフォームのsubmitボタンを押すと、
もう一方のフォームの情報が送られないため、
対応するスーパーグローバル変数がundefinedになり、
Noticeの発生を避けられないことです。
(line 21とline 39/ typeTrans.php)
エラー回避の良い方法、及び、もっと根本的によい設計はありますか?
ご回答宜しくお願いします。
html
1<!DOCTYPE html> 2<!--このファイルのファイル名は、typeTrans.htmlです--> 3<html lang="ja" dir="ltr"> 4 <head> 5 <meta charset="utf-8"> 6 <title>typeTrans</title> 7 </head> 8 <body> 9 <h1>型の相互変換 等の学習</h1> 10 <form class="" action="typeTrans.php" method="post"> 11 <h2>文字列の型変換</h2> 12 型を調べたい文字列を入力 13 <input type="text" name="inputStr" value=""> 14 <input type="submit" name="" value="送信"><br> 15 </form> 16 【注意】 17 <ul>・PHPプログラムに(POSTなどで)送られたフォームの入力情報は、全て文字列として(スーパーグローバル変数$_POST)渡される。 18 </ul> 19 <ul>・文字列のブール型への変換で、 20 <ul>nullとなるのは、空文字列と"0"のみ。</ul> 21 <ul>false(=0)となるのは、ない</ul> 22 <ul>それ以外は全部true(=1)。</ul> 23 </ul> 24 25 <ul> 26 ・文字列の整数型への変換で、 27 <ul>"1"or1からはじまる文字列は、1となる。</ul> 28 <ul>"任意の数字n"or任意の数字nから始まる文字列は、nとなる。</ul> 29 <ul>それ以外("0"や空""を含む)は全部0。</ul> 30 </ul> 31 <form class="" action="typeTrans.php" method="post"> 32 <h2>整数値の型変換</h2> 33 型を調べたい整数値を入力(絶対に整数値のみを入力!) 34 <input type="text" name="inputInt" value=""> 35 <input type="submit" name="" value="送信"><br> 36 </form> 37 </body> 38</html> 39
php
1<?php 2//このファイルのファイル名は、typeTrans.phpです 3echo "<h1>前提事項</h1>"; 4echo "フォームから受け取ったデータは、文字列型として$_POSTに格納される<br>"; 5 6 7echo "<h1>文字列について</h1>"; 8if(isset($_POST['inputStr'])){ 9 if($_POST['inputStr'] === ""){//未入力(入力が空文字列)の場合 10 $inputStr = $_POST['inputStr'];//to int 11 echo "未入力(入力が空文字列'')なので、$_POST['inputStr']のString型へのキャストは、".$inputStr."である。"; 12 }else{ 13 $inputStr = $_POST['inputStr'];//as it is 14 echo "$_POST['inputStr'] の中身「".$inputStr."」の型:".gettype($inputStr); 15 echo "<br><br>文字列「".$inputStr."」のbool型への変換:".(bool)$inputStr; 16 echo "<br>文字列「".$inputStr."」のint型への変換:".(int)$inputStr; 17 echo "<br>文字列「".$inputStr."」のfloat型への変換:".(float)$inputStr; 18 echo "<br>文字列「".$inputStr."」のstring型への変換:".(string)$inputStr; 19} 20}else{ 21 $inputStr = $_POST['inputStr'];//存在しないもの(undefined)を代入している 22 echo "別のsubmitボタンを押してしまったので、$_POST['inputStr'])がundefined。よって、$_POST['inputStr']のString型へのキャストは、".$inputStr."である。"; 23}; 24 25echo "<h1>整数値について</h1>"; 26if(isset($_POST['inputInt'])){ 27 if($_POST['inputInt'] === ""){//未入力(入力が空文字列)の場合 28 $inputInt = (int)$_POST['inputInt'];//to int 29 echo "未入力(入力が空文字列'')なので、$_POST['inputInt']のint型へのキャストは、".$inputInt."である。"; 30 }else{ 31 $inputInt = (int)$_POST['inputInt'];//to int 32 echo "$_POST['inputStr'] の中身「".$inputInt."」の型:".gettype($inputInt); 33 echo "<br><br>int値「".$inputInt."」のbool型への変換:".(bool)$inputInt; 34 echo "<br>int値「".$inputInt."」のint型への変換:".(int)$inputInt; 35 echo "<br>int値「".$inputInt."」のfloat型への変換:".(float)$inputInt; 36 echo "<br>int値「".$inputInt."」のstring型への変換:".(string)$inputInt; 37 }; 38}else{ 39 $inputInt = (int)$_POST['inputInt'];//存在しないもの(undefined)を代入している 40 echo "別のsubmitボタンを押してしまったので、$_POST['inputInt'])がundefined。よって、$_POST['inputInt']のint型へのキャストは、".$inputInt."になる。"; 41}; 42 43/*追加用のecho達*/ 44echo "<br>"; 45echo "<br><br>"; 46echo "<br>"; 47echo "<br>"; 48 49?> 50
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/26 22:29
2019/03/27 01:44
2019/03/27 01:45
2019/03/27 07:56
2019/03/27 09:59
2019/03/30 18:32