質問編集履歴

2

ログイン情報の変更

2021/02/21 08:36

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  整理のため再度投稿します。
2
2
 
3
- PHPでログイン機能を実装しています。
3
+ PHPで投稿機能を実装しています。
4
+
5
+
4
6
 
5
7
 
6
8
 
@@ -10,7 +12,9 @@
10
12
 
11
13
 
12
14
 
13
- こちらを見てログイン機能を作成しているのですが、不明点としてログイン後、セッション情報を保持したまま、トップページ遷移しません
15
+ こちらを見て投稿機能を作成しているのですが、不明点として投稿する度user_idが0とて扱われ
16
+
17
+
14
18
 
15
19
  試したこととしては、requireで読み込んでいる部分(/common/auth.phpやfunction.php、database.phpなどをコメントアウトしてみる)をやってみました。この処理がまとまっていないために起きている不具合だと考えましたが、こちら原因わかる方いますか?
16
20
 
@@ -22,19 +26,7 @@
22
26
 
23
27
  ```ここに言語を入力
24
28
 
25
- [21-Feb-2021 06:53:31 UTC] PHP Notice: session_start(): A session had already been started - ignoring in /Applications/MAMP/htdocs/aaaa/common/function.php on line 18
26
-
27
- [21-Feb-2021 06:53:31 UTC] PHP Notice: Undefined index: pass in /Applications/MAMP/htdocs/working_space/users/login.php on line 120
28
-
29
- [21-Feb-2021 06:53:34 UTC] PHP Notice: session_start(): A session had already been started - ignoring in /Applications/MAMP/htdocs/aaaa/common/function.php on line 18
30
-
31
- [21-Feb-2021 06:53:34 UTC] PHP Notice: Undefined index: pass in /Applications/MAMP/htdocs/aaaa/users/login.php on line 120
32
-
33
- [21-Feb-2021 06:53:42 UTC] PHP Notice: session_start(): A session had already been started - ignoring in /Applications/MAMP/htdocs/aaaa/common/function.php on line 18
34
-
35
- [21-Feb-2021 06:53:42 UTC] PHP Notice: session_start(): A session had already been started - ignoring in /Applications/MAMP/htdocs/aaaa/common/function.php on line 18
36
-
37
- [21-Feb-2021 06:53:42 UTC] PHP Notice: Undefined index: pass in /Applications/MAMP/htdocs/aaaa/users/login.php on line 120
29
+ [21-Feb-2021 08:15:39 UTC] PHP Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /Applications/MAMP/htdocs/aaaa/tweets/create.php on line 37
38
30
 
39
31
  ```
40
32
 
@@ -42,462 +34,384 @@
42
34
 
43
35
  ```ここに言語を入力
44
36
 
45
- //users.login.php
46
-
47
-
48
-
49
- <?php
50
-
51
-
52
-
53
- require '../common/auth.php';
54
-
55
-
56
-
57
- if(isLogin()) {
58
-
59
- header('Location: ../tweets/index.php');
37
+ //tweets/create.php
38
+
39
+
40
+
41
+ <?php
42
+
43
+ require('../common/auth.php');
44
+
45
+ require('../common/function.php');
46
+
47
+ require('../common/database.php');
48
+
49
+ require('../common/head_info.php');
50
+
51
+ if (!isLogin()) {
52
+
53
+ header('Location: ../login/');
54
+
55
+ exit;
56
+
57
+ }
58
+
59
+
60
+
61
+ $user_id = getLoginUserId();
62
+
63
+ $database_handler = getDatabaseConnection();
64
+
65
+
66
+
67
+ //post送信されていた場合
68
+
69
+ if(!empty($_POST)) {
70
+
71
+ //バリデーションチェック
72
+
73
+ $title = (isset($_POST['title'])) ? $_POST['title'] : '';
74
+
75
+ $content = (isset($_POST['content'])) ? $_POST['content'] : '';
76
+
77
+ // //最大文字数チェック
78
+
79
+ // validMaxLen($comment, 'comment');
80
+
81
+ // //未入力チェック
82
+
83
+ // validNotEntered($comment, 'comment');
84
+
85
+
86
+
87
+ if(empty($err_msg)) {
88
+
89
+ //例外処理
90
+
91
+ try {
92
+
93
+ $user_id = getLoginUserId();
94
+
95
+ print_r('debug',$user_id);
96
+
97
+ //DB接続
98
+
99
+ $database_handler = getDatabaseConnection();
100
+
101
+ // プリペアドステートメントで SQLをあらかじめ用意しておく
102
+
103
+ $statement = $database_handler->prepare('INSERT INTO tweets (user_id, title, content) VALUES (:user_id, :title, :content)');
104
+
105
+ //指定された変数名にパラメータをバインド(紐付け)
106
+
107
+ $statement->bindParam(':title', $title);
108
+
109
+ $statement->bindParam(':user_id', $user_id);
110
+
111
+ $statement->execute();
112
+
113
+
114
+
115
+ $_SESSION['select_tweet'] = [
116
+
117
+ 'id' => $database_handler->lastInsertId(),
118
+
119
+ 'title' => $title,
120
+
121
+ 'content' => $content,
122
+
123
+ ];
124
+
125
+
126
+
127
+
128
+
129
+ //クエリ成功の場合
130
+
131
+ if($statement) {
132
+
133
+ $_POST = array(); //postをクリア
134
+
135
+ header('Location:../tweets/community01.php'); //自分自身に遷移する
136
+
137
+ exit();
138
+
139
+ }
140
+
141
+
142
+
143
+ } catch(Exception $e) {
144
+
145
+ error_log('エラー発生:'. $e->getMessage());
146
+
147
+ }
148
+
149
+ }
150
+
151
+ }
152
+
153
+ ?>
154
+
155
+
156
+
157
+ <?php
158
+
159
+ require('../common/header.php');
160
+
161
+ ?>
162
+
163
+
164
+
165
+ <?php
166
+
167
+ if(!empty($_SESSION['user']['id'])) {
168
+
169
+ ?>
170
+
171
+ <div class="main-top">
172
+
173
+ <form action="" method='post' class='form review-form'>
174
+
175
+ <div class='button-containers'>
176
+
177
+ <div class="tweet-header">zzz</div>
178
+
179
+ <div class="tweet-body">
180
+
181
+ <div class="tweet-tops">
182
+
183
+ <label>
184
+
185
+ <input type="text" name='title' placeholder="タイトル">
186
+
187
+ <div class="error_mes">
188
+
189
+ <?php
190
+
191
+ if(!empty($err_msg['pass'])) echo $err_msg['pass'];
192
+
193
+ ?>
194
+
195
+ </div>
196
+
197
+ </label>
198
+
199
+ <label>
200
+
201
+ <textarea name="content" cols="82" rows="10" class='review-textarea'></textarea>
202
+
203
+ <div class="error_mes">
204
+
205
+ <?php
206
+
207
+ if(!empty($err_msg['pass'])) echo $err_msg['pass'];
208
+
209
+ ?>
210
+
211
+ </div>
212
+
213
+ </label>
214
+
215
+ <div class='button-container'>
216
+
217
+ <input type="submit" value='投稿する'>
218
+
219
+ </div>
220
+
221
+ </div>
222
+
223
+ </div>
224
+
225
+ </div>
226
+
227
+ </form>
228
+
229
+ </div>
230
+
231
+
232
+
233
+ <?php
234
+
235
+ require('../common/footer.php');
236
+
237
+ ?>
238
+
239
+ <?php
240
+
241
+ }
242
+
243
+ ?>
244
+
245
+ ```
246
+
247
+
248
+
249
+ ```ここに言語を入力
250
+
251
+ //common/function.php
252
+
253
+ <?php
254
+
255
+
256
+
257
+ define('message01', '入力必須です');
258
+
259
+ define('message02', 'ニックネームは256文字以内で入力してください。');
260
+
261
+ define('message03', 'パスワードは256文字以内で入力してください。');
262
+
263
+ define('message04', 'パスワードは半角英数字8文字以上で入力してください。');
264
+
265
+
266
+
267
+ //================================
268
+
269
+ // ログ
270
+
271
+ //================================
272
+
273
+ //画面にエラーを表示させるか
274
+
275
+ // ini_set('display_errors', 'On');
276
+
277
+ //ログを取るか
278
+
279
+ ini_set('log_errors', 'On');
280
+
281
+ //ログの出力ファイルを指示
282
+
283
+ ini_set('error_log', 'php.log');
284
+
285
+ //セッションを使う
286
+
287
+ session_start();
288
+
289
+
290
+
291
+ // //=================================
292
+
293
+ // //エラーメッセージ格納用の配列
294
+
295
+ // //=================================
296
+
297
+
298
+
299
+ $err_msg = array();
300
+
301
+
302
+
303
+ //未入力チェック
304
+
305
+ function validateNot($str,$value){
306
+
307
+ if(empty($str)) {
308
+
309
+ global $err_msg;
310
+
311
+ $err_msg[$value] = message01;
312
+
313
+ }
314
+
315
+ }
316
+
317
+
318
+
319
+ //ニックネームの最大文字数チェック
320
+
321
+ function validateNameMaxLen($str,$value){
322
+
323
+ //全角も半角も1文字として扱う
324
+
325
+ if(mb_strlen($str)>256){
326
+
327
+ global $err_msg;
328
+
329
+ $err_msg[$value] = message02;
330
+
331
+ }
332
+
333
+ }
334
+
335
+
336
+
337
+ //パスワードの最大文字数チェック
338
+
339
+ function validatePassMaxLen($str,$value){
340
+
341
+ //全角も半角も1文字として扱う
342
+
343
+ if(mb_strlen($str)>256){
344
+
345
+ global $err_msg;
346
+
347
+ $err_msg[$value] = message03;
348
+
349
+ }
350
+
351
+ }
352
+
353
+
354
+
355
+ //パスワードの最小文字数チェック
356
+
357
+ function validatePassMinLen($str,$value){
358
+
359
+ //全角も半角も1文字として扱う
360
+
361
+ if(mb_strlen($str)<8){
362
+
363
+ global $err_msg;
364
+
365
+ $err_msg[$value] = message04;
366
+
367
+ }
368
+
369
+ }
370
+
371
+
372
+
373
+ ```
374
+
375
+
376
+
377
+ ```ここに言語を入力
378
+
379
+ //common/database.php
380
+
381
+
382
+
383
+ <?php
384
+
385
+ /**
386
+
387
+ * PDOを使ってデータベースに接続する
388
+
389
+ * @return PDO
390
+
391
+ */
392
+
393
+ function getDatabaseConnection() {
394
+
395
+ try
396
+
397
+ {
398
+
399
+ $database_handler = new PDO('mysql:dbname=aaa;host = 127.0.0.1;port=8889;charset=utf8', 'root', 'root');
400
+
401
+ }
402
+
403
+ catch (PDOException $e)
404
+
405
+ {
406
+
407
+ echo "DB接続に失敗しました。<br />";
408
+
409
+ echo $e->getMessage();
60
410
 
61
411
  exit;
62
412
 
63
413
  }
64
414
 
65
- ?>
66
-
67
- <?php
68
-
69
- require('../common/function.php');
70
-
71
- require('../common/database.php');
72
-
73
- require('../common/head_info.php');
74
-
75
- ?>
76
-
77
-
78
-
79
-
80
-
81
- <?php
82
-
83
- //POST送信された場合
84
-
85
- if(!empty($_POST)) {
86
-
87
- $email=$_POST['email'];
88
-
89
- $pass = $_POST['pass'];
90
-
91
-
92
-
93
- //未入力チェック
94
-
95
- validateNot($email,'email');
96
-
97
- validateNot($pass,'pass');
98
-
99
-
100
-
101
- if(empty($err_msg)) {
102
-
103
-
104
-
105
- //メールアドレスの重複チェック
106
-
107
-
108
-
109
- //メールアドレスの形式チェック
110
-
111
-
112
-
113
- //パスワードの最大文字数チェック
114
-
115
- validatePassMaxLen($pass,'pass');
116
-
117
- //パスワードの最小文字数チェック
118
-
119
- validatePassMinLen($pass,'pass');
120
-
121
- //パスワードの半角英数字チェック
122
-
123
-
124
-
125
- if(empty($err_msg)) {
126
-
127
-
128
-
129
- $database_handler = getDatabaseConnection();
130
-
131
- // プリペアドステートメントで SQLをあらかじめ用意しておく
132
-
133
- if ($statement = $database_handler->prepare('SELECT id, name, password FROM users WHERE email = :email')) {
134
-
135
- $statement->bindParam(':email', $email);
136
-
137
- $statement->execute();
138
-
139
- $user = $statement->fetch();
140
-
141
-
142
-
143
- if (!$user) {
144
-
145
- $_SESSION['errors'] = [
146
-
147
- 'メールアドレスまたはパスワードが間違っています。'
148
-
149
- ];
150
-
151
- header('Location: ../users/login.php');
152
-
153
- exit;
154
-
155
- }
156
-
157
-
158
-
159
- $name = $user['name'];
160
-
161
- $id = $user['id'];
162
-
163
-
164
-
165
- if (password_verify($pass, $user['pass'])) {
166
-
167
- // ユーザー情報保持
168
-
169
- $_SESSION['user'] = [
170
-
171
- 'name' => $name,
172
-
173
- 'id' => $id
174
-
175
- ];
176
-
177
-
178
-
179
- // 更新日が最新のメモ情報保持
180
-
181
- if ($statement = $database_handler->prepare("SELECT id, title, content FROM memos WHERE user_id = :user_id ORDER BY updated_at DESC LIMIT 1")) {
182
-
183
- $statement->bindParam(":user_id", $id);
184
-
185
- $statement->execute();
186
-
187
- $result = $statement->fetch(PDO::FETCH_ASSOC);
188
-
189
-
190
-
191
- if ($result) {
192
-
193
- $_SESSION['select_tweets'] = [
194
-
195
- 'id' => $result['id'],
196
-
197
- 'title' => $result['title'],
198
-
199
- 'content' => $result['content']
200
-
201
- ];
202
-
203
- }
204
-
205
- }
206
-
207
-
208
-
209
- header('Location: ../tweets/index.php');
210
-
211
- exit;
212
-
213
- } else {
214
-
215
- $_SESSION['errors'] = [
216
-
217
- 'メールアドレスまたはパスワードが間違っています。'
218
-
219
- ];
220
-
221
- header('Location: ../users/login.php');
222
-
223
- exit;
224
-
225
- }
226
-
227
- }
228
-
229
- }
230
-
231
- }
232
-
233
- }
234
-
235
- ?>
236
-
237
-
238
-
239
- <?php
240
-
241
- require('../common/header.php');
242
-
243
- ?>
244
-
245
-
246
-
247
- <div class='main-top'>
248
-
249
- <div class='form-login'>
250
-
251
- <div class="form-login-list">
252
-
253
- <h2><i class="fas fa-sign-in-alt"></i>ログイン</h2>
254
-
255
- <section class='guestuser'>
256
-
257
- ゲストユーザー用
258
-
259
- <p><i class="far fa-envelope"></i>メールアドレス:guest@mail.com</p>
260
-
261
- <p><i class="fas fa-unlock-alt"></i>パスワード:guestuser</p>
262
-
263
- </section>
264
-
265
-
266
-
267
- <form action="" method='post' class='form'>
268
-
269
- <label>
270
-
271
- <input type="text" name='email' placeholder="メールアドレス">
272
-
273
- <div class="error_mes">
274
-
275
- <?php
276
-
277
- if(!empty($err_msg['email'])) echo $err_msg['email'];
278
-
279
- ?>
280
-
281
- </div>
282
-
283
- </label>
284
-
285
- <label>
286
-
287
- <input type="password" name='pass' placeholder="パスワード" value="<?php print(htmlspecialchars($_POST['pass'],ENT_QUOTES)); ?>"></br>
288
-
289
- <div class="error_mes">
290
-
291
- <?php
292
-
293
- if(!empty($err_msg['pass'])) echo $err_msg['pass'];
294
-
295
- ?>
296
-
297
- </div>
298
-
299
- <span class='form-rule'>※英数字8文字以上</span>
300
-
301
- </label>
302
-
303
- <label>
304
-
305
- <input type="checkbox" name='pass_save'>次回ログインを省略する
306
-
307
- </label>
308
-
309
- <div class='button-container'>
310
-
311
- <input type="submit" value='ログインする'>
312
-
313
- </div>
314
-
315
- </form>
316
-
317
- </div>
318
-
319
- </div>
320
-
321
- </div>
322
-
323
-
324
-
325
- <?php
326
-
327
- require('../common/footer.php');
328
-
329
- ?>
330
-
331
- ```
332
-
333
-
334
-
335
- ```ここに言語を入力
336
-
337
- //common/function.php
338
-
339
- <?php
340
-
341
-
342
-
343
- define('message01', '入力必須です');
344
-
345
- define('message02', 'ニックネームは256文字以内で入力してください。');
346
-
347
- define('message03', 'パスワードは256文字以内で入力してください。');
348
-
349
- define('message04', 'パスワードは半角英数字8文字以上で入力してください。');
350
-
351
-
352
-
353
- //================================
354
-
355
- // ログ
356
-
357
- //================================
358
-
359
- //画面にエラーを表示させるか
360
-
361
- // ini_set('display_errors', 'On');
362
-
363
- //ログを取るか
364
-
365
- ini_set('log_errors', 'On');
366
-
367
- //ログの出力ファイルを指示
368
-
369
- ini_set('error_log', 'php.log');
370
-
371
- //セッションを使う
372
-
373
- session_start();
374
-
375
-
376
-
377
- // //=================================
378
-
379
- // //エラーメッセージ格納用の配列
380
-
381
- // //=================================
382
-
383
-
384
-
385
- $err_msg = array();
386
-
387
-
388
-
389
- //未入力チェック
390
-
391
- function validateNot($str,$value){
392
-
393
- if(empty($str)) {
394
-
395
- global $err_msg;
396
-
397
- $err_msg[$value] = message01;
398
-
399
- }
400
-
401
- }
402
-
403
-
404
-
405
- //ニックネームの最大文字数チェック
406
-
407
- function validateNameMaxLen($str,$value){
408
-
409
- //全角も半角も1文字として扱う
410
-
411
- if(mb_strlen($str)>256){
412
-
413
- global $err_msg;
414
-
415
- $err_msg[$value] = message02;
416
-
417
- }
418
-
419
- }
420
-
421
-
422
-
423
- //パスワードの最大文字数チェック
424
-
425
- function validatePassMaxLen($str,$value){
426
-
427
- //全角も半角も1文字として扱う
428
-
429
- if(mb_strlen($str)>256){
430
-
431
- global $err_msg;
432
-
433
- $err_msg[$value] = message03;
434
-
435
- }
436
-
437
- }
438
-
439
-
440
-
441
- //パスワードの最小文字数チェック
442
-
443
- function validatePassMinLen($str,$value){
444
-
445
- //全角も半角も1文字として扱う
446
-
447
- if(mb_strlen($str)<8){
448
-
449
- global $err_msg;
450
-
451
- $err_msg[$value] = message04;
452
-
453
- }
454
-
455
- }
456
-
457
-
458
-
459
- ```
460
-
461
-
462
-
463
- ```ここに言語を入力
464
-
465
- //common/database.php
466
-
467
-
468
-
469
- <?php
470
-
471
- /**
472
-
473
- * PDOを使ってデータベースに接続する
474
-
475
- * @return PDO
476
-
477
- */
478
-
479
- function getDatabaseConnection() {
480
-
481
- try
482
-
483
- {
484
-
485
- $database_handler = new PDO('mysql:dbname=aaa;host = 127.0.0.1;port=8889;charset=utf8', 'root', 'root');
486
-
487
- }
488
-
489
- catch (PDOException $e)
490
-
491
- {
492
-
493
- echo "DB接続に失敗しました。<br />";
494
-
495
- echo $e->getMessage();
496
-
497
- exit;
498
-
499
- }
500
-
501
415
  return $database_handler;
502
416
 
503
417
  }

1

DB2の削除

2021/02/21 08:36

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes