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

質問編集履歴

2

コード部分の表示位置を変えました。

2018/12/29 02:13

投稿

art_porokyu
art_porokyu

スコア44

title CHANGED
File without changes
body CHANGED
@@ -3,21 +3,18 @@
3
3
 
4
4
  コードを書いたのですが、どうも、重複チェックができず同じアドレスでも新規登録されてしまいます。
5
5
 
6
-
7
- ### 該当のソースコード
8
-
9
- PHPここに言語名を入力
6
+ ```lang-言語名
10
- ソースコード
11
7
  if(empty($err_msg)){
12
8
  $dsn = 'mysql:dbname=feel.share;host=localhost;charaset=utf8';
13
9
  $user = 'root';
14
10
  $password = 'root';
15
11
  $options = array(
16
-
12
+ // SQL実行失敗時に例外をスルー
17
13
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
18
-
14
+ // デフォルトフェッチモードを連想配列形式に設定
19
15
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
20
-
16
+ // バッファードクエリを使う(一度に結果セットを全て取得し、サーバー負荷を軽減)
17
+ // SELECTで得た結果に対してもrowCountメソッドを使えるようにする
21
18
  PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
22
19
  );
23
20
 
@@ -30,7 +27,7 @@
30
27
  $result = $query->fetch(PDO::FETCH_ASSOC);
31
28
 
32
29
  if($result > 0){
33
- $err_msg['email'] = MSG06 //(このemailは既に使用されています);
30
+ $err_msg['email'] = MSG06;
34
31
  }
35
32
 
36
33
  $stmt = $dbh->prepare('INSERT INTO users(email,pass,login_time) VALUES (:email, :pass, :login_time)');
@@ -40,6 +37,8 @@
40
37
  header("Location:mypage.php");
41
38
  }
42
39
 
40
+ ```
41
+
43
42
  ### 考え
44
43
 
45
44
  このコードはバリデーションチェックをクリアし$err_msgに何も代入されていない状態です。
@@ -54,40 +53,4 @@
54
53
 
55
54
  ですが、重複チェックができず同じアドレスでも新規登録されてしまいます。
56
55
 
57
- このような場合どのような理解でコードを書けば良いでしょうか?
56
+ このような場合どのような理解でコードを書けば良いでしょうか?
58
-
59
- ```lang-言語名
60
- if(empty($err_msg)){
61
- $dsn = 'mysql:dbname=feel.share;host=localhost;charaset=utf8';
62
- $user = 'root';
63
- $password = 'root';
64
- $options = array(
65
- // SQL実行失敗時に例外をスルー
66
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
67
- // デフォルトフェッチモードを連想配列形式に設定
68
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
69
- // バッファードクエリを使う(一度に結果セットを全て取得し、サーバー負荷を軽減)
70
- // SELECTで得た結果に対してもrowCountメソッドを使えるようにする
71
- PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
72
- );
73
-
74
- $dbh = new PDO($dsn,$user,$password,$options);
75
-
76
- $query = $dbh->prepare('SELECT * FROM users WHERE email = :email');
77
-
78
- $query->execute(array(':email' => $email));
79
-
80
- $result = $query->fetch(PDO::FETCH_ASSOC);
81
-
82
- if($result > 0){
83
- $err_msg['email'] = MSG06;
84
- }
85
-
86
- $stmt = $dbh->prepare('INSERT INTO users(email,pass,login_time) VALUES (:email, :pass, :login_time)');
87
-
88
- $stmt->execute(array(':email' => $email,':pass' => $pass, ':login_time' => date('Y-m-d H:i:s')));
89
-
90
- header("Location:mypage.php");
91
- }
92
-
93
- ```

1

コード部分の表示方法を変えました。

2018/12/29 02:13

投稿

art_porokyu
art_porokyu

スコア44

title CHANGED
File without changes
body CHANGED
@@ -54,4 +54,40 @@
54
54
 
55
55
  ですが、重複チェックができず同じアドレスでも新規登録されてしまいます。
56
56
 
57
- このような場合どのような理解でコードを書けば良いでしょうか?
57
+ このような場合どのような理解でコードを書けば良いでしょうか?
58
+
59
+ ```lang-言語名
60
+ if(empty($err_msg)){
61
+ $dsn = 'mysql:dbname=feel.share;host=localhost;charaset=utf8';
62
+ $user = 'root';
63
+ $password = 'root';
64
+ $options = array(
65
+ // SQL実行失敗時に例外をスルー
66
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
67
+ // デフォルトフェッチモードを連想配列形式に設定
68
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
69
+ // バッファードクエリを使う(一度に結果セットを全て取得し、サーバー負荷を軽減)
70
+ // SELECTで得た結果に対してもrowCountメソッドを使えるようにする
71
+ PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
72
+ );
73
+
74
+ $dbh = new PDO($dsn,$user,$password,$options);
75
+
76
+ $query = $dbh->prepare('SELECT * FROM users WHERE email = :email');
77
+
78
+ $query->execute(array(':email' => $email));
79
+
80
+ $result = $query->fetch(PDO::FETCH_ASSOC);
81
+
82
+ if($result > 0){
83
+ $err_msg['email'] = MSG06;
84
+ }
85
+
86
+ $stmt = $dbh->prepare('INSERT INTO users(email,pass,login_time) VALUES (:email, :pass, :login_time)');
87
+
88
+ $stmt->execute(array(':email' => $email,':pass' => $pass, ':login_time' => date('Y-m-d H:i:s')));
89
+
90
+ header("Location:mypage.php");
91
+ }
92
+
93
+ ```