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

質問編集履歴

2

ログイン情報の変更

2021/02/21 08:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,168 +1,125 @@
1
1
  整理のため再度投稿します。
2
- PHPでログイン機能を実装しています。
2
+ PHPで投稿機能を実装しています。
3
3
 
4
+
4
5
  参考にしているサイトは、以下のサイトです。
5
6
  https://www.techpit.jp/courses/132/curriculums/135/sections/976/parts/3946
6
7
 
7
- こちらを見てログイン機能を作成しているのですが、不明点としてログイン後、セッション情報を保持したまま、トップページ遷移しません
8
+ こちらを見て投稿機能を作成しているのですが、不明点として投稿する度user_idが0とて扱われ
9
+
8
10
  試したこととしては、requireで読み込んでいる部分(/common/auth.phpやfunction.php、database.phpなどをコメントアウトしてみる)をやってみました。この処理がまとまっていないために起きている不具合だと考えましたが、こちら原因わかる方いますか?
9
11
 
10
12
  ログ出力してみると以下のような結果が出ました。
11
13
 
12
14
  ```ここに言語を入力
13
- [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
14
- [21-Feb-2021 06:53:31 UTC] PHP Notice: Undefined index: pass in /Applications/MAMP/htdocs/working_space/users/login.php on line 120
15
- [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
16
- [21-Feb-2021 06:53:34 UTC] PHP Notice: Undefined index: pass in /Applications/MAMP/htdocs/aaaa/users/login.php on line 120
17
- [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
18
- [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
19
- [21-Feb-2021 06:53:42 UTC] PHP Notice: Undefined index: pass in /Applications/MAMP/htdocs/aaaa/users/login.php on line 120
15
+ [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
20
16
  ```
21
17
 
22
18
  ```ここに言語を入力
23
- //users.login.php
19
+ //tweets/create.php
24
20
 
25
21
  <?php
26
-
27
- require '../common/auth.php';
22
+ require('../common/auth.php');
28
-
29
- if(isLogin()) {
30
- header('Location: ../tweets/index.php');
31
- exit;
32
- }
33
- ?>
34
- <?php
35
23
  require('../common/function.php');
36
24
  require('../common/database.php');
37
25
  require('../common/head_info.php');
26
+ if (!isLogin()) {
27
+ header('Location: ../login/');
38
- ?>
28
+ exit;
29
+ }
39
30
 
31
+ $user_id = getLoginUserId();
32
+ $database_handler = getDatabaseConnection();
40
33
 
41
- <?php
42
- //POST送信された場合
34
+ //post送信されていた場合
43
35
  if(!empty($_POST)) {
36
+ //バリデーションチェック
37
+ $title = (isset($_POST['title'])) ? $_POST['title'] : '';
38
+ $content = (isset($_POST['content'])) ? $_POST['content'] : '';
39
+ // //最大文字数チェック
40
+ // validMaxLen($comment, 'comment');
44
- $email=$_POST['email'];
41
+ // //未入力チェック
45
- $pass = $_POST['pass'];
42
+ // validNotEntered($comment, 'comment');
46
43
 
47
- //未入力チェック
48
- validateNot($email,'email');
49
- validateNot($pass,'pass');
50
-
51
44
  if(empty($err_msg)) {
45
+ //例外処理
46
+ try {
47
+ $user_id = getLoginUserId();
48
+ print_r('debug',$user_id);
49
+ //DB接続
50
+ $database_handler = getDatabaseConnection();
51
+ // プリペアドステートメントで SQLをあらかじめ用意しておく
52
+ $statement = $database_handler->prepare('INSERT INTO tweets (user_id, title, content) VALUES (:user_id, :title, :content)');
53
+ //指定された変数名にパラメータをバインド(紐付け)
54
+ $statement->bindParam(':title', $title);
55
+ $statement->bindParam(':user_id', $user_id);
56
+ $statement->execute();
52
57
 
58
+ $_SESSION['select_tweet'] = [
59
+ 'id' => $database_handler->lastInsertId(),
53
- //メールアドレスの重複チェック
60
+ 'title' => $title,
61
+ 'content' => $content,
62
+ ];
54
63
 
55
- //メールアドレスの形式チェック
56
64
 
57
- //パスワードの最大文字数チェッ
65
+ //クエリ成功の場合
66
+ if($statement) {
58
- validatePassMaxLen($pass,'pass');
67
+ $_POST = array(); //postをクリア
59
- //パスワードの最小文字数チェック
60
- validatePassMinLen($pass,'pass');
68
+ header('Location:../tweets/community01.php'); //自分自身に遷移する
61
- //パスワードの半角英数字チェック
69
+ exit();
70
+ }
62
71
 
63
- if(empty($err_msg)) {
72
+ } catch(Exception $e) {
64
-
65
- $database_handler = getDatabaseConnection();
66
- // プリペアドステートメントで SQLをあらかじめ用意しておく
67
- if ($statement = $database_handler->prepare('SELECT id, name, password FROM users WHERE email = :email')) {
68
- $statement->bindParam(':email', $email);
69
- $statement->execute();
70
- $user = $statement->fetch();
71
-
72
- if (!$user) {
73
- $_SESSION['errors'] = [
74
- 'メールアドレスまたはパスワードが間違っています。'
75
- ];
76
- header('Location: ../users/login.php');
77
- exit;
78
- }
79
-
80
- $name = $user['name'];
81
- $id = $user['id'];
82
-
83
- if (password_verify($pass, $user['pass'])) {
84
- // ユーザー情報保持
85
- $_SESSION['user'] = [
86
- 'name' => $name,
87
- 'id' => $id
88
- ];
89
-
90
- // 更新日が最新のメモ情報保持
91
- if ($statement = $database_handler->prepare("SELECT id, title, content FROM memos WHERE user_id = :user_id ORDER BY updated_at DESC LIMIT 1")) {
92
- $statement->bindParam(":user_id", $id);
93
- $statement->execute();
94
- $result = $statement->fetch(PDO::FETCH_ASSOC);
95
-
96
- if ($result) {
97
- $_SESSION['select_tweets'] = [
98
- 'id' => $result['id'],
99
- 'title' => $result['title'],
100
- 'content' => $result['content']
101
- ];
102
- }
103
- }
104
-
105
- header('Location: ../tweets/index.php');
73
+ error_log('エラー発生:'. $e->getMessage());
106
- exit;
107
- } else {
108
- $_SESSION['errors'] = [
109
- 'メールアドレスまたはパスワードが間違っています。'
110
- ];
111
- header('Location: ../users/login.php');
112
- exit;
113
- }
114
74
  }
115
- }
116
75
  }
117
76
  }
118
- ?>
77
+ ?>
119
78
 
120
79
  <?php
121
80
  require('../common/header.php');
122
81
  ?>
123
82
 
83
+ <?php
84
+ if(!empty($_SESSION['user']['id'])) {
85
+ ?>
124
- <div class='main-top'>
86
+ <div class="main-top">
125
- <div class='form-login'>
126
- <div class="form-login-list">
127
- <h2><i class="fas fa-sign-in-alt"></i>ログイン</h2>
128
- <section class='guestuser'>
129
- ゲストユーザー用
130
- <p><i class="far fa-envelope"></i>メールアドレス:guest@mail.com</p>
131
- <p><i class="fas fa-unlock-alt"></i>パスワード:guestuser</p>
132
- </section>
133
-
134
- <form action="" method='post' class='form'>
87
+ <form action="" method='post' class='form review-form'>
88
+ <div class='button-containers'>
89
+ <div class="tweet-header">zzz</div>
90
+ <div class="tweet-body">
91
+ <div class="tweet-tops">
135
- <label>
92
+ <label>
136
- <input type="text" name='email' placeholder="メーアドレス">
93
+ <input type="text" name='title' placeholder="タイトル">
137
- <div class="error_mes">
94
+ <div class="error_mes">
138
- <?php
95
+ <?php
139
- if(!empty($err_msg['email'])) echo $err_msg['email'];
96
+ if(!empty($err_msg['pass'])) echo $err_msg['pass'];
140
- ?>
97
+ ?>
98
+ </div>
99
+ </label>
100
+ <label>
101
+ <textarea name="content" cols="82" rows="10" class='review-textarea'></textarea>
102
+ <div class="error_mes">
103
+ <?php
104
+ if(!empty($err_msg['pass'])) echo $err_msg['pass'];
105
+ ?>
106
+ </div>
107
+ </label>
108
+ <div class='button-container'>
109
+ <input type="submit" value='投稿する'>
141
110
  </div>
142
- </label>
143
- <label>
144
- <input type="password" name='pass' placeholder="パスワード" value="<?php print(htmlspecialchars($_POST['pass'],ENT_QUOTES)); ?>"></br>
145
- <div class="error_mes">
146
- <?php
147
- if(!empty($err_msg['pass'])) echo $err_msg['pass'];
148
- ?>
149
- </div>
111
+ </div>
150
- <span class='form-rule'>※英数字8文字以上</span>
151
- </label>
152
- <label>
153
- <input type="checkbox" name='pass_save'>次回ログインを省略する
154
- </label>
155
- <div class='button-container'>
156
- <input type="submit" value='ログインする'>
157
112
  </div>
113
+ </div>
158
- </form>
114
+ </form>
159
- </div>
115
+ </div>
160
- </div>
116
+
161
- </div>
162
-
163
117
  <?php
164
118
  require('../common/footer.php');
165
- ?>
119
+ ?>
120
+ <?php
121
+ }
122
+ ?>
166
123
  ```
167
124
 
168
125
  ```ここに言語を入力

1

DB2の削除

2021/02/21 08:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes