teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

画像追加

2020/03/10 20:50

投稿

YYmd0525
YYmd0525

スコア10

title CHANGED
File without changes
body CHANGED
@@ -193,6 +193,10 @@
193
193
  この関数使えばいいよ、などヒントあったら教えていただきたいです。
194
194
 
195
195
 
196
- ### 補足情報(FW/ツールのバージョンなど
196
+ ### 補足情報(20/3/11追記
197
+ ![イメージ説明](8cc663fcdafac339b792ef98d50a93e2.png)
198
+ 上記のようなのをイメージしています。
197
199
 
200
+ [https://logic-a.com/2013/05/22/submit_false_on_textbox_text_none/](https://logic-a.com/2013/05/22/submit_false_on_textbox_text_none/)
201
+ ただ検索すると、入力される、という条件で投稿ボタンを出すものばかりなので、
198
- こにより詳細情報を記載してください。
202
+ それ以外の条件を入れるとはできないのでしょうか

1

HTML、CSSの追記

2020/03/10 20:50

投稿

YYmd0525
YYmd0525

スコア10

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,101 @@
5
5
 
6
6
  ### 該当のソースコード
7
7
 
8
+ ```PHP
9
+ <?php
10
+
11
+ const ERROR_NAME = '10文字以内で入力';
12
+ const ERROR_EMPTY = '入力してください';
13
+ const ERROR_MAIL = '正しい形式で入力';
14
+ const ERROR_COMMENT = '4文字以上で入力';
15
+
16
+ if (!empty($_POST)) {
17
+ $error = array();
18
+
19
+ $username = $_POST['username'];
20
+ $usermail = $_POST['usermail'];
21
+ $userpass = $_POST['userpass'];
22
+
23
+ if(empty($username)) {
24
+ $error['error_name'] = ERROR_EMPTY;
25
+ }
26
+ if(!empty($username)) {
27
+ if(strlen($username) > 10) {
28
+ $error['error_name2'] = ERROR_NAME;
29
+ }
30
+ }
31
+
32
+ if(empty($usermail)) {
33
+ $error['error_mail'] = ERROR_EMPTY;
34
+ }
35
+ if(!empty($usermail)) {
36
+ $reg_str = '/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/';
37
+
38
+ if (!preg_match($reg_str, $usermail)) {
39
+ $error['error_mail2'] = ERROR_MAIL;
40
+ }
41
+ }
42
+
43
+ if(empty($userpass)) {
44
+ $error['error_pass'] = ERROR_EMPTY;
45
+ }
46
+ if(!empty($userpass)) {
47
+ if(strlen($userpass) < 4) {
48
+ $error['error_pass'] = ERROR_COMMENT;
49
+ }
50
+ }
51
+
52
+ if(empty($error)) {
53
+ header('Location: index.html');
54
+ exit();
55
+ }
56
+ }
57
+
58
+
59
+ ?>
60
+ <!DOCTYPE html>
61
+ <html lang="en">
62
+ <head>
63
+ <meta charset="UTF-8">
64
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
65
+ <title>Document</title>
66
+ <link rel="stylesheet" href="style.css">
67
+ </head>
68
+ <body>
69
+ <form action="" method="post">
70
+ <div class="form_g <?php if(!empty($error['error_name'] || $error['error_name2'])) echo 'has-error' ?>">
71
+ <label><span class="help-block">
72
+ <?php if(!empty($error['error_name'])) echo $error['error_name'] ?>
73
+ <?php if(!empty($error['error_name2'])) echo $error['error_name2'] ?>
74
+ </span>
75
+ <input type="text" name="username" class="username" placeholder="ユーザー名" value="<?php if(!empty($username)) echo $username ?>">
76
+ </label>
77
+ </div>
78
+ <div class="form_g <?php if(!empty($error['error_mail'] || $error['error_mail2'])) echo 'has-error' ?>">
79
+ <label><span class="help-block">
80
+ <?php if(!empty($error['error_mail'])) echo $error['error_mail'] ?>
81
+ <?php if(!empty($error['error_mail2'])) echo $error['error_mail2'] ?>
82
+ </span>
83
+ <input type="text" name="usermail" class="usermail" placeholder="メールアドレス" value="<?php if(!empty($usermail)) echo $usermail ?>">
84
+ </label>
85
+ </div>
86
+ <div class="form_g <?php if(!empty($error['error_pass'] || $error['error_pass2'])) echo 'has-error' ?>">
87
+ <label><span class="help-block">
88
+ <?php if(!empty($error['error_pass'])) echo $error['error_pass'] ?>
89
+ <?php if(!empty($error['error_pass2'])) echo $error['error_pass2'] ?>
90
+ </span>
91
+ <input type="password" name="userpass" class="serpassu" placeholder="パスワード" value="<?php if(!empty($userpass)) echo $userpass ?>">
92
+ </label>
93
+ </div>
94
+ <button type="submit" value="signup" class="send">新規登録</button>
95
+ </form>
96
+
97
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
98
+ <script src="style.js"></script>
99
+ </body>
100
+ </html>
101
+ ```
102
+
8
103
  ```JavaScript
9
104
  const ERROR_EMPTY = '入力してください';
10
105
  const ERROR_NAME = '10文字以内で入力';
@@ -66,17 +161,35 @@
66
161
  }
67
162
  })
68
163
  ```
164
+ ```CSS
165
+ .send[disabled] {
166
+ background-color: #aaa;
167
+ cursor: not-allowed;
168
+ }
69
169
 
170
+ .has-error {
171
+ color: red;
172
+ }
173
+
174
+ .has-error span {
175
+ display: block;
176
+ padding-bottom: 10px;
177
+ color: #ff0000;
178
+ }
179
+ ```
180
+
181
+
70
182
  ### 試したこと
71
183
 
72
184
  3項目の入力する箇所があり、それぞれエラーメッセージを表示するようにしています。
73
185
  さらに、エラーの場合にhas-errorというクラスを与えて、エラーでない場合にhas-successというクラスを与えています。
74
- 最後にhas-successがあった場合、登録ボタンのdisabledをfalseにすればできるんではないか?と思いましたができまんで
186
+ 最後にhas-successがあった場合、登録ボタンのdisabledをfalseにすればできるんではないか?と思いましたが、最後の構文の構成がわからず、inputからカーソルを外すとボタンが押るようになってまいます
75
187
 
76
188
  他の方法としては、グローバル変数を定義して、それぞれのfunction内でエラーが表示されるif文内で、
77
189
  グローバル変数にfalseを代入、エラーじゃないelseの中でtrueを代入。
78
- 3つのfunctionが終わった後に、if文でfalseならボタンは非表示、trueなら表示としましたが、これもうくいきませんでした
190
+ 3つのfunctionが終わった後に、if文でfalseならボタンは非表示、trueなら表示としましたが、こちらはdisabeledのままで押るようになりません。
79
191
 
192
+
80
193
  この関数使えばいいよ、などヒントあったら教えていただきたいです。
81
194
 
82
195