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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

1回答

198閲覧

フォームの入力判定について

creative_09

総合スコア80

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2018/01/24 13:29

編集2018/01/24 14:17

勉強しながらフォームをコピペで改造しております

フォームで入力判定したいのですが、
[1]以下の文法で入力判定に誤りは無いでしょうか?
[2]$errors['password_length']はエラー数のカウントのためだけにあるのでしょうか?
なにか特別な意味があって、password_lengthについてなにか別に記述をするものなのでしょうか?この場所に一回だけ記述してるので、間違っていないのならいいんですが
[3]名前1-4はひとまとめにできるのでしょうか?全体をもっとシンプルに書く方法があればお願いします

//パスワード if ($password == ''): $errors['password'] = "パスワードが入力されていません。"; elseif(!preg_match('/^[0-9a-zA-Z]{5,30}$/', $_POST["password"])): $errors['password_length'] = "パスワードは半角英数字の5文字以上30文字以下で入力して下さい。"; else: $password_hide = str_repeat('*', strlen($password)); endif; //名前1 if ($name00 == ''): $errors['name00'] = "名前1が入力されていません。"; elseif(mb_strlen($name00)>12): $errors['name00_length'] = "名前1は12文字以内で入力して下さい。"; endif; //名前2 if ($name01 == ''): $errors['name01'] = "名前2が入力されていません。"; elseif(mb_strlen($name01)>8): $errors['name01_length'] = "名前2は8文字以内で入力して下さい。"; endif; //名前3 if ($name02 == ''): $errors['name02'] = "名前3が入力されていません。"; elseif(mb_strlen($name02)>8): $errors['name02_length'] = "名前3は8文字以内で入力して下さい。"; endif; //名前4 if ($kana01 == ''): $errors['kana01'] = "名前4が入力されていません。"; elseif(mb_strlen($kana01)>12): $errors['kana01_length'] = "名前4は12文字以内で入力して下さい。"; endif; //名前5 if ($kana02 == ''): $errors['kana02'] = "名前5が入力されていません。"; elseif(mb_strlen($kana02)>12): $errors['kana02_length'] = "名前5は12文字以内で入力して下さい。"; endif;

どれかでもお答え頂ければ・・・よろしくお願いします

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

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

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

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

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

kei344

2018/01/24 13:44

$errors['account_length'] が書かれていません。
creative_09

2018/01/24 14:07

$errors['password_length']でした。すみません
kei344

2018/01/24 14:12

ここは「質問への追記・修正の依頼」です。質問本文は編集することが可能なので、修正されてはいかがでしょうか。また、配布されているコードであれば出展元URLを提示されてはいかがでしょう。
creative_09

2018/01/24 14:16

修正がかのうなんですね。やってみます。配布元では時間がかかるので、ここで聞いてみました
kei344

2018/01/24 14:18

URLを提示することに時間がかかるとはどういうことでしょうか。
ikedas

2018/01/25 02:46

ご提示のソースコードの出所を明記して下さい (ウェブページならURL、書籍なら題名とページ)。
creative_09

2018/01/25 02:51

出どころを検索していますが、わからなく、分かり次第、追記します
guest

回答1

0

ベストアンサー

どれかでもお答え頂ければ・・・よろしくお願いします

聞きたいことが別ならまた別の質問を投げるという風に一個の質問では、質問は絞った方がいいと思います。

[1]以下の文法で入力判定に誤りは無いでしょうか?

どの項目にどのようなチェックをかけたいのか分からないので答えようがないと思います。

[2]$errors['password_length']はエラー数のカウントのためだけにあるのでしょうか?

①項目名、②何のエラーか という命名っぽいので、単にパスワードの形式チェックのエラー格納用のキーだと思います。

[3]名前1-4はひとまとめにできるのでしょうか?全体をもっとシンプルに書く方法があればお願いします

パスワード以外は空文字チェックと文字数制限のチェックが同じなので、判定を使い回せます。
こんな感じでいかがでしょうか

php

1<?php 2// Formのinputのリスト 3$inputList = [ 4 'password' => [ 5 'displayName' => 'パスワード' 6 ], 7 'name00' => [ 8 'displayName' => '名前1', 9 'maxLength' => 12 10 ], 11 'name01' => [ 12 'displayName' => '名前2', 13 'maxLength' => 8 14 ], 15 'name02' => [ 16 'displayName' => '名前3', 17 'maxLength' => 8 18 ], 19 'kana01' => [ 20 'displayName' => '名前4', 21 'maxLength' => 12 22 ], 23 'kana02' => [ 24 'displayName' => '名前5', 25 'maxLength' => 12 26 ] 27]; 28 29// エラー格納用のリスト 30$errorList = []; 31foreach($inputList as $key => $info) { 32 // POST受け取り 33 $$key = isset($_POST[$key]) ? $_POST[$key] : ''; 34 35 // 空文字チェック 36 if (trim($$key) === '') { 37 $errorList[$key.'_empty'] = $info['displayName'].'が入力されていません。'; 38 continue; 39 } 40 41 if ($key !== 'password') { 42 // 文字数チェック 43 if (mb_strlen($$key) > $info['maxLength']) { 44 $errorList[$key.'_format'] = $info['displayName'].'は'.$info['maxLength'].'以内で入力してください。'; 45 } 46 } else { 47 // password形式チェック 48 if (!preg_match('/^[0-9a-zA-Z]{5,30}$/', $$key)) { 49 $errorList['password_format'] = "パスワードは半角英数字の5文字以上30文字以下で入力して下さい。"; 50 } 51 } 52} 53 54// パスワード難読化 55$passwordHide = preg_replace('/./', '*', $password);

投稿2018/01/28 00:47

編集2018/01/28 00:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

creative_09

2018/01/30 04:52

ありがとうございます。 まだまだ把握しきれない部分が多いのですが、こちらを参考に勉強します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問