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

質問編集履歴

1

記入漏れなので、accountSetting.phpソースとエラーメッセージ表示部分を修正しました。

2020/06/08 12:12

投稿

dashu_sena
dashu_sena

スコア2

title CHANGED
File without changes
body CHANGED
@@ -1,11 +1,14 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  アカウント設定画面にて使用者IDの更新処理を行いたい。
4
+ 会員管理TBに会員IDを更新後、関連あるお問い合わせ履歴TBは会員管理TBを参照して、会員IDを更新処理を行います。
4
5
 
5
6
  使用者IDの更新な機能を実装中に以下のエラーメッセージが発生しました。
6
7
 
7
8
  ```
8
- Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\PHP\pleiades\xampp\htdocs\test_mailform\PHPsouce\accountSetting.php on line 53
9
+ Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\PHP\pleiades\xampp\htdocs\test_mailform\PHPsouce\accountSetting.php on line 63
10
+
11
+ Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\PHP\pleiades\xampp\htdocs\test_mailform\PHPsouce\accountSetting.php on line 73
9
12
  ```
10
13
 
11
14
  ### 該当のソースコード
@@ -125,64 +128,121 @@
125
128
  //実行した結果をセット
126
129
  $row1 = mysqli_fetch_assoc($query1);
127
130
 
131
+ //現在使用者ID、または現在のパスワード
128
- //使用者IDが入力された場合
132
+ //現在使用者IDが入力された場合
129
- if (!empty($_POST['before_id']) || !empty($_POST['after_id']) || !empty($_POST['check_id'])){
133
+ if (!empty($_POST['before_id'])){
130
134
 
131
135
  //入力した値を変数に格納
132
136
  //使用者ID
133
- $input_BeforeID = mysqli_real_escape_string($db, $_POST['before_id']); //現在の使用者ID
137
+ $input_BeforeID = mysqli_real_escape_string($db, $_POST['before_id']);
134
- $input_AfterID = mysqli_real_escape_string($db, $_POST['after_id']); //新しい使用者ID
138
+ $input_AfterID = mysqli_real_escape_string($db, $_POST['after_id']);
135
- $input_CheckID = mysqli_real_escape_string($db, $_POST['check_id']); //新しい使用者ID(確認用)
139
+ $input_CheckID = mysqli_real_escape_string($db, $_POST['check_id']);
136
140
 
141
+
137
142
  //入力チェック
138
- //現在使用者IDとログイン中使用者IDの一致チェック
143
+ //現在使用者IDとログイン中使用者IDの一致チェック
139
144
  if ($row1['input_id'] != $_POST['before_id']){
140
145
  $error['before_id'] = 'false';
141
146
  }
142
147
 
143
- //重複登録チェック
148
+ //新しい使用者IDが入力された場合
144
- $sql01 = sprintf('SELECT count(*) as cnt FROM m_member WHERE member_id = "%s"',$input_AfterID);
145
- $query01 = mysqli_query($db, $sql01) or die(mysqli_errno($db));
149
+ if ($_POST['after_id'] != '') {
146
- $row01 = mysqli_fetch_assoc($query01);
147
150
 
151
+ //重複登録チェック
152
+ $sql01 = sprintf('SELECT count(*) as cnt FROM m_member WHERE member_id = "%s"',$input_AfterID);
153
+ $query01 = mysqli_query($db, $sql01);
154
+ $row01 = mysqli_fetch_assoc($query01);
155
+
148
- if ( $row01 == 1) {
156
+ if ( $row01 == 1) {
149
- $error ['after_id'] = 'double';
157
+ $error ['after_id'] = 'double';
158
+ }
159
+ if ( $_POST['after_id'] != $_POST['check_id']) {
160
+ $error['check_id'] = 'false';
161
+ }
150
162
  }
151
- if ( $_POST['after_id'] != $_POST['check_id']) {
152
- $error['check_id'] = 'false';
153
- }
154
163
 
155
164
  //エラーがなかった場合、使用者IDの更新を行う
156
165
  if (empty($error['before_id']) && empty($error['check_id']) && empty($error['after_id'])) {
157
166
 
167
+ //更新用変数
168
+ $UPdate_BeforeID =$input_BeforeID;
169
+ $UPdate_AfterID =$input_AfterID;
170
+
158
171
  //会員情報Tbを更新
159
172
  //使用者IDの更新SQL文を用意
160
- $sql2 = sprintf('UPDATE m_member SET member_id = "%s" WHERE id = "%d" and member_id = "%s"',$input_AfterID , $_SESSION['id'], $input_BeforeID);
173
+ $sql2 = sprintf('UPDATE m_member SET member_id = "%s" WHERE member_id = "%s"', $UPdate_BeforeID,$UPdate_AfterID);
161
174
 
162
175
  //SQL文を実行処理に代入
163
- $query2 = mysqli_query($db, $sql2) or die(mysqli_errno($db));
176
+ $query2 = mysqli_query($db, $sql2);
164
177
 
165
178
  //実行した結果をセット
166
179
  $row2 = mysqli_fetch_assoc($query2);
167
180
 
168
- //会員情報TBを更新成功した場合、履歴更新を行う
169
- if(!empty($row2['member_id'])){
181
+ //申込履歴TB更新
182
+ //申込履歴一覧更新SQL文を用意
183
+ $sql4 = sprintf('UPDATE h_form h SET h.member_id = ( SELECT member_id FROM m_member m where m.member_id = "%s") WHERE EXISTS ( SELECT 1 FROM m_member mm WHERE mm.member_name = h.member_nm )',$input_AfterID);
170
184
 
171
- //申込履歴TB更新
172
- //申込履歴一覧更新SQL文を用意
173
- $sql4 = sprintf('UPDATE h_form h SET h.member_id = ( SELECT member_id FROM m_member m where m.member_id = "%s") WHERE EXISTS ( SELECT 1 FROM m_member mm WHERE mm.member_name = h.member_nm )',$input_AfterID);
185
+ //SQL文を実行処理に代入
186
+ $query4 = mysqli_query($db, $sql4);
174
187
 
175
- //SQL文を実行処理に代入
188
+ //実行した結果をセット
176
- $query4 = mysqli_query($db, $sql4);
189
+ $row4 = mysqli_fetch_assoc($query4);
177
190
 
178
- //実行した結果をセット
191
+ }
179
- $row4 = mysqli_fetch_assoc($query4);
192
+ }
180
193
 
181
- //アカウント設定変更完了画面へ遷移
194
+ //現在のパスワードが入力された場合
195
+ if (!empty($_POST['before_password'])) {
196
+
197
+ //会員IDを変数に格納
198
+ $updatePass_memberID = mysqli_real_escape_string($db,$_SESSION['member_id']);
199
+
200
+ //入力したパスワードを変数に格納
201
+ $input_BeforePass = mysqli_real_escape_string($db, sha1($_POST['before_password']));
202
+
203
+
204
+ //パスワード桁数用
205
+ $input_AfterPassLen = strlen($_POST['after_password']);
206
+ $input_CheckPassLen = strlen($_POST['check_password']);
207
+
208
+ //登録された現在パスワードと一致するかを確認
209
+ if ($input_BeforePass != $row1['password']) {
182
- header('Location: complete.php');
210
+ $error['before_password'] = 'false';
183
- exit;
184
- }
211
+ }
212
+
213
+ //新しいパスワードと新しいパスワード(確認用)の桁数チェック
214
+ if ($input_AfterPassLen <4){
215
+ $error['after_password'] = 'length';
185
216
  }
217
+ if ($input_CheckPassLen<4){
218
+ $error['check_password'] = 'length';
219
+ }
220
+
221
+ //新しいパスワードと新しいパスワード(確認用)一致チェック
222
+ if ($_POST['after_password'] != $_POST['check_password']) {
223
+ $error['check_password'] = 'false';
224
+ }
225
+
226
+ //エラーがなかった場合、パスワードの更新処理を行う
227
+ if ((empty($error['before_password'])) && (empty($error['after_password'])) && (empty($error['check_password']))) {
228
+
229
+ //更新用暗号化パスワード
230
+ $input_AfterPassMask = mysqli_real_escape_string($db, sha1($_POST['after_password']));
231
+
232
+ //パスワードの更新SQL文を用意する
233
+ $sql3 = sprintf('UPDATE m_member SET member_pass = "%s" WHERE member_id = "%s"',$input_AfterPassMask,$updatePass_memberID);
234
+
235
+ //SQL文を実行処理に代入
236
+ $query3 = mysqli_query($db, $sql3) or die (mysqli_error($db));
237
+
238
+ //実行した結果をセット
239
+ $row3 = mysqli_fetch_assoc($query3);
240
+
241
+
242
+ //アカウント設定変更完了画面へ遷移
243
+ header('Location: complete.php');
244
+ exit;
245
+ }
186
246
  }
187
247
  }
188
248
  ?>