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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

5763閲覧

[html] maxlengthによる入力フォームの桁数チェックが働かない

hiiro_no

総合スコア1

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/07 02:39

前提・実現したいこと

こんにちわ、今回初めてのサイト利用となります。
プログラミングも初心者であるため少しずれた質問になるかもしれませんが、その際はご指摘いただけますと幸いです。

現在サイトにて1~4桁の番号を入力出来る入力フォームを作ろうとしています。
その際maxlengthを利用して4桁までしか入力できないよう制限を掛けているのですが、デバッグ中に本来発生するはずのエラーが特定の条件で発生せず困っております。

前提として
拡張子は.tpl。
最大4桁のため当該項目はmaxlength=4で設定。
半角文字のみの入力を受け付ける。(全角を入力するとエラーを出力)
SQLDBから情報を取得することもある。
SQLでの当該カラムは「varchar(255)」。
使用ブラウザはIE

以下にそのソースコードと問題、および実施観点を載せます。
どうかご助力いただけますようお願い申し上げます。

発生している問題・エラーメッセージ

maxlengthを指定しているためサイトの入力フォームから5桁以上を入力することはできませんが、DBから直接データを変更し5桁以上を入力すると、サイト更新時入力フォームにDBから入力した5桁以上のデータが表示されます。
この状態で更新ボタンを押すと本来であれば「〇〇文字以内でテキストを入力してください。」とエラーが表示され更新不可になるのですがそのまま更新が出来て、DBにも5桁以上で登録されたままになります。
全角文字の項目で同じことを試したところ上記のエラーが発生し更新不可でした。

半角と全角で何か処理の違いがあるのでしょうか。調べても有力な情報が見つからなかったため教えていただきたいです。

また、今回の質問は何故上記の条件下でエラーが発生しないのかという観点のみでの回答をお待ちしております。

該当のソースコード

html

12<th colspon="2" width="200">番号</th> 3<td> 4 <input type="text" id="hoge_no" name="hoge_no" size="5" maxlength="4" value="{hoge_no|htmlspecialchars}" class="hoge"><span class="str_black"></span> 5</td> 6

試したこと

DB入力=111122 maxlength="4"
①入力フォームに触らずそのまま更新
→結果:エラーが発生せず更新可
②入力フォームから「111122」を「11112」に変更して更新。(deleteで1文字削除)
→結果:「4文字以内でテキストを入力してください。」のエラー表示。更新不可。
③minlengthを設定して上記のテストをおこなう。
→結果:同様の結果が得られる。

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

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

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

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

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

m.ts10806

2020/09/07 02:44

> SQLDB 使っているDBはタグにある「SQL Server」で間違いないのでしょうか。 念のためバージョン情報も含めて追記いただけますか?
hiiro_no

2020/09/07 02:47

失礼しました。 現在使用しているDBは「A5M2」です。 バージョンは2.14.3です。
hiiro_no

2020/09/07 02:50

すみません間違えました。 DBは「MySQL」です。
maisumakun

2020/09/07 02:50

> DBから直接データを変更し5桁以上を入力すると えっと、これ自体は正当な(あるいは設計上そうなることを想定する必要がある)操作なのでしょうか?
m.ts10806

2020/09/07 02:54 編集

>A5M2 それはDBではなく、「DBを操作するツール」です。 代表的なものは下記のどれかで確認できます(DB固有のコマンドなのでたぶん1個しか通りません。1個ずつ実行してみてください) SELECT version(); SELECT * FROM V$VERSION; SELECT @@VERSION; SELECT sqlite_version(); 上から、 MySQL/MariaDB/PostgreSQL Oracle SQL Server SQLite です。 いずれも通らなかったらそれ以外です。
hiiro_no

2020/09/07 02:55

>えっと、これ自体は正当な(あるいは設計上そうなることを想定する必要がある)操作なのでしょうか? 現在のデータ取得方法として ・入力フォームから直接入力する。 ・外部からデータを連携していただきDBにて変更する。 の2種類がありますが、後者については連携前に4桁を超えてないかチェックが入ります。 ただし万が一5桁以上のデータが連携された場合の修正作業をおこなっているためこのような質問をさせていただきました。
m.ts10806

2020/09/07 02:56

>DBは「MySQL」です。 では SELECT version(); の実行結果を「質問本文」に追記してください。
hiiro_no

2020/09/07 02:57

>代表的なものは下記のどれかで確認できます(DB固有のコマンドなのでたぶん1個しか通りません。1個ずつ実行してみてください) 大変丁寧なご指導ありがとうございます。 ただいまコマンドを実行して確認したところバージョンは「5.1.73」でした。
m.ts10806

2020/09/07 04:02

実行結果を「質問本文」に追記してください。 maisumakunさんからの確認事項についても同様です。 こちらはあくまで質問への追記修正依頼のコメント欄です。 質問は編集できますので、何かしら指摘や修正依頼があった場合は原則質問本文を編集して返してください。 >5.1.73 実行結果そのまま記載してくださいね。バージョンだけ出るというのはないはずなので。 それに5.1ってそもそも前提としてどういう環境なのでしょうか。 さすがに古すぎるような。 https://openstandia.jp/oss_info/mysql/version/
hiiro_no

2020/09/07 06:46

大変お時間を取らせてしまい申し訳ございません。 今後は他の方に余計なリソースを吐かせないためにも、質問本文に追記させていただきます。 本件の根本的な解決には至りませんでしたが皆さまの助言のおかげでより具体的な方針を定めることが出来ました。ありがとうございます。 最後になりますが >それに5.1ってそもそも前提としてどういう環境なのでしょうか。 こちらについてですが、確かに調べてみたところ2013年と随分古い環境でした。 私は与えられた環境下で作業をおこなっていたため具体的な理由はわかりませんが、本件が維持管理作業のため環境を安易に変えられずにいたのかもしれません。 最新のバージョンで管理できるか掛け合ってみます。 ご指摘いただきありがとうございます。
m.ts10806

2020/09/07 07:06

質問編集して追記してもらいたかったのですけど・・・
guest

回答2

0

ベストアンサー

SQLでの当該カラムは「varchar(255)」。

絶対に4桁以下の値しか入れないのであれば、varchar(4)にしておきましょう。そうすれば、「DBから直接データを変更し5桁以上を入力する」ことそのものが不可能となり、このような心配をせずに済みます。

投稿2020/09/07 02:53

maisumakun

総合スコア145184

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

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

hiiro_no

2020/09/07 03:02

回答いただきありがとうございます。 最終的な対応作業はそのようになるかもしれません。 しかし今回は全角と半角で何故桁数チェックのエラー有無に差異が発生するのかをお聞きしております。ご理解いただけますと幸いです。
maisumakun

2020/09/07 03:04

逆に聞きますが、いまさらIE11を本気でサポートしたいのですか?
hiiro_no

2020/09/07 03:09

すみません、界隈に疎くIEのサポートが何であるかを理解できませんでした。 試したことに書いておらず大変申し訳ございません。FirefoxおよびGoogleChromeでもエラーの文言は違いましたが、同様の結果が得られたことをここにご報告いたします。
maisumakun

2020/09/07 03:15

そもそも論として、maxlengthによるチェックは開発ツールを使えば簡単に外せるようなものなので、仮に効かなくても問題ないよう、サーバサイドでチェックして異常値を弾く必要があります。 ということで、「maxlengthが利かないこと」以上に「サーバサイドで長さチェックをしていない」ことのほうが問題です。
hiiro_no

2020/09/07 03:26

>maxlengthによるチェックは開発ツールを使えば簡単に外せるようなものなので、仮に効かなくても問題ないよう、サーバサイドでチェックして異常値を弾く必要があります。 はい、サーバーサイドでもチェックをおこなう必要があることは存じております。 ですがどうしても今回のエラー不備の理由を知りたいのです。そのため「発生している問題・エラーメッセージ」にて >また、今回の質問は何故上記の条件下でエラーが発生しないのかという観点のみでの回答をお待ちしております。 このような条件を付け加えさせていただきました。 しつこいようで大変申し訳ございません。
maisumakun

2020/09/07 03:40 編集

> また、今回の質問は何故上記の条件下でエラーが発生しないのかという観点のみでの回答をお待ちしております。 実用的には、そんな重箱の隅を追い詰めても仕方ないです。どのブラウザを使うか、製作者側が選べるものでもないですし、「そういうこともありうる」ぐらいに捉えておく程度で大丈夫かと思います(全角文字関係はブラウザによってmaxlengthの挙動が違うようです)。
hiiro_no

2020/09/07 06:37

そうですね。最終対応ではサーバサイドのチェックも入るため無理に原因を探る必要も無いですね。 丁寧なご回答をありがとうございます。 今回のベストアンサーとさせていただきます。
guest

0

使用ブラウザはIE

の時点で制限が大きすぎる気がしますが
基本的には受け取ったサーバー側でバリデートすれば済む話です
(クライアントサイドのバリデートはあくまでもユーザー補助)

投稿2020/09/07 03:58

yambejp

総合スコア114843

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

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

hiiro_no

2020/09/07 06:39

ご回答いただきありがとうございます。 そのように対応させていただきます、お手間を取らせました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問