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

質問編集履歴

2

文章の内容を一部変更

2019/11/03 14:53

投稿

yk_dev
yk_dev

スコア8

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,8 @@
8
8
 
9
9
 
10
10
  ### 発生している問題・エラーメッセージ
11
- 編集ページにてPOST送信するとクエリが失敗してしまいます。
11
+ 編集ページにてPOST送信を行い、DB更新をしようとすると
12
+ クエリが失敗してしまいます。
12
13
  削除機能はまだつけていません。
13
14
  php.logを確認すると以下のように表示されています。
14
15
 
@@ -85,7 +86,7 @@
85
86
 
86
87
 
87
88
  ### 試したこと
88
- WHERE以降を消すとPOST送信自体はうまくいくので、
89
+ WHERE以降を消すとDBの更新がうまくいくので、
89
90
  p_id(記事ごとのID)、user_idの送信が問題のように見えるのですが、ログを見る限りでは
90
91
  正常に配列内に格納されており、また、編集ページにてvar_dumpで表示させてみても、記事ID、ユーザIDの取得はうまくできています。何故クエリが失敗してしまうのかがわかりません。pic1は画像データがあるかどうかですがその有無は関係ないようです。
91
92
 

1

コードのレイアウトを見やすく変更、DB接続で独自関数を消し処理の内容を記載、問題の起きていないコードは削除

2019/11/03 14:53

投稿

yk_dev
yk_dev

スコア8

title CHANGED
File without changes
body CHANGED
@@ -12,11 +12,15 @@
12
12
  削除機能はまだつけていません。
13
13
  php.logを確認すると以下のように表示されています。
14
14
 
15
+
16
+
17
+
15
- ```
18
+ ```ここに言語を入力
16
- エラーメッセージ
17
19
  [03-Nov-2019 06:11:57 UTC] デバッグ:バリデーションOK。
18
20
  [03-Nov-2019 06:11:57 UTC] デバッグ:DB更新。
21
+ [03-Nov-2019 06:11:57 UTC] デバッグ:
19
- [03-Nov-2019 06:11:57 UTC] デバッグ:SQL:UPDATE infoblog SET name = :name, comment = :comment, pic1 = :pic1, WHERE user_id = :u_id AND id = :p_id
22
+ SQL:UPDATE infoblog SET name = :name, comment = :comment, pic1 = :pic1, WHERE user_id = :u_id
23
+ AND id = :p_id
20
24
  [03-Nov-2019 06:11:57 UTC] デバッグ:格納データ:Array
21
25
  (
22
26
  [:name] => 投稿テスト
@@ -28,33 +32,46 @@
28
32
 
29
33
  [03-Nov-2019 06:11:57 UTC] デバッグ:クエリ失敗。
30
34
  [03-Nov-2019 06:11:57 UTC] デバッグ:失敗したSQL:PDOStatement Object
31
- (
32
- [queryString] => UPDATE infoblog SET name = :name, comment = :comment, pic1 = :pic1, WHERE user_id = :u_id AND id = :p_id
33
- )
34
- )
35
35
 
36
36
 
37
+ ( [queryString] => UPDATE infoblog SET name = :name, comment = :comment, pic1 = :pic1, WHERE user_id = :u_id AND id = :p_id )
38
+ ```
39
+
37
- ### 該当ソースコード(edit.php)
40
+ ### 編集画面の該当ソースコード
41
+ ```PHP
42
+ <?php
43
+
38
44
  try {
45
+ $dsn = 'mysql:dbname=blog;host=localhost;charset=utf8';
39
- $dbh = dbConnect();
46
+ $user = 'root';
47
+ $password = 'root';
48
+ $options = array(
49
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
50
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
51
+ PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
52
+ );
53
+ $dbh = new PDO($dsn, $user, $password, $options);
54
+ return $dbh;
40
- //DB更新
55
+ //DB更新
41
- if(!empty ($_GET['p_id'])){
56
+ if(!empty ($_GET['p_id'])){
42
- debug('DB更新');
57
+ debug('DB更新');
43
- $sql = 'UPDATE infoblog SET name = :name, comment = :comment, pic1 = :pic1, WHERE user_id = :u_id AND id = :p_id';
58
+ $sql = 'UPDATE infoblog SET name = :name, comment = :comment, pic1 = :pic1, WHERE user_id = :u_id AND id = :p_id';
44
- $data = array(':name' => $name , ':comment' => $comment, ':pic1' => $pic1, ':u_id' => $_SESSION['user_id'], ':p_id' => $p_id);
59
+ $data = array(':name' => $name , ':comment' => $comment, ':pic1' => $pic1, ':u_id' => $_SESSION['user_id'], ':p_id' => $p_id);
45
60
  }
46
61
 
47
- debug('SQL:'.$sql);
62
+ debug('SQL:'.$sql);
48
- debug('格納データ:'.print_r($data,true));
63
+ debug('格納データ:'.print_r($data,true));
49
64
 
50
- $stmt = queryPost($dbh, $sql, $data);
65
+ $stmt = $dbh->prepare($sql);
66
+ $stmt->execute($data);
67
+ return $stmt;
51
68
 
52
- if($stmt){
69
+ if($stmt){
53
- $_SESSION['msg_success'] = SUC04;
70
+ $_SESSION['msg_success'] = SUC04;
54
- debug('投稿ページへ戻ります。');
71
+ debug('投稿ページへ戻ります。');
55
- unset($p_id);
72
+ unset($p_id);
56
- header("Location:admin_infoblog.php");
73
+ header("Location:admin_infoblog.php");
57
- }
74
+ }
58
75
 
59
76
  }catch (Exception $e) {
60
77
  error_log('エラー発生:' . $e->getMessage());
@@ -62,122 +79,11 @@
62
79
  }
63
80
  }
64
81
  }
82
+ ```
65
83
 
66
- ### 新規投稿画面のソースコード
67
- index.php
68
84
 
69
- <?php
70
- $siteTitle = 'お知らせを投稿';
71
- require('adminhead.php');
72
- ?>
73
85
 
74
- <body>
75
86
 
76
- <!-- メニュー -->
77
- <?php
78
- require('adminheader.php');
79
- ?>
80
-
81
- <!-- メインコンテンツ -->
82
- <div id="contents" class="site-width">
83
- <h1 class="page-title">お知らせを投稿</h1>
84
- <h3>下にスクロールすると今までの投稿を確認できます。</h3>
85
- <!-- Main -->
86
- <section id="main">
87
- <div class="form-container">
88
- <form action="" method="post" class="form" enctype="multipart/form-data" style="width:100%;box-sizing:border-box;">
89
- <div class="area-msg">
90
- <?php
91
- if(!empty($err_msg['common'])) echo $err_msg['common'];
92
- ?>
93
- </div>
94
- <label class="<?php if(!empty($err_msg['name'])) echo 'err'; ?>">
95
- タイトル<span class="label-require">必須</span>
96
- <input type="text" name="name" value="<?php echo getFormData('name'); ?>">
97
- </label>
98
- <div class="area-msg">
99
- <?php
100
- if(!empty($err_msg['name'])) echo $err_msg['name'];
101
- ?>
102
- </div>
103
- <label class="<?php if(!empty($err_msg['comment'])) echo 'err'; ?>">
104
- お知らせ内容
105
- <textarea name="comment" id="js-count" cols="30" rows="10" style="height:150px;"><?php echo getFormData('comment'); ?></textarea>
106
- </label>
107
- <p class="counter-text"><span id="js-count-view">0</span>/500文字</p>
108
- <div class="area-msg">
109
- <?php
110
- if(!empty($err_msg['comment'])) echo $err_msg['comment'];
111
- ?>
112
- </div>
113
- <div style="overflow:hidden;">
114
- <div class="imgDrop-container">
115
- 画像を投稿する
116
- <label class="area-drop <?php if(!empty($err_msg['pic1'])) echo 'err'; ?>">
117
- <input type="hidden" name="MAX_FILE_SIZE" value="3145728">
118
- <input type="file" name="pic1" class="input-file">
119
- <img src="<?php echo getFormData('pic1'); ?>" alt="" class="prev-img" style="<?php if(empty(getFormData('pic1'))) echo 'display:none;' ?>">
120
- ドラッグ&ドロップ
121
- </label>
122
- <div class="area-msg">
123
- <?php
124
- if(!empty($err_msg['pic1'])) echo $err_msg['pic1'];
125
- ?>
126
- </div>
127
- </div>
128
- </div>
129
- <div class="btn-container">
130
- <input type="submit" class="btn btn-mid" value="投稿する">
131
- </div>
132
- </form>
133
- </div>
134
-
135
-
136
- **<!--記事一覧部分-->
137
- <div class="postlist">
138
- <?php foreach($dbPostData['data'] as $key => $val):?>
139
- <a href="edit.php<?php echo (!empty(appendGetParam())) ? appendGetParam().'&p_id='.$val['id'] : '?p_id='.$val['id']; ?>" class="panel">
140
- <div class="panel-title">
141
- <table>
142
- <tr>
143
- <th>
144
- <h1 class="infotitle"><?php echo sanitize($val['name']); ?></h1>
145
- </th>
146
- <th><?php echo sanitize($val['create_date']); ?></th>
147
- </tr>
148
- <tr>
149
- <td>
150
- <p class="infobody"><?php echo sanitize($val['comment']); ?></p>
151
- </td>
152
- </tr>
153
- </table>
154
- </div>
155
- <div class="posthead">
156
- <a href="<?php echo sanitize($val['pic1']); ?>" target="_blank" rel="noopener noreferrer"><img class="infoimg" src="<?php echo sanitize($val['pic1']); ?>" width="<?php echo $img_size_width; ?>" height="<?php echo $img_size_height; ?> " onerror="this.style.display='none'"></a>
157
- </div>
158
- <hr />
159
-             <?php endforeach; ?>**
160
- </div>
161
-
162
- </section>
163
-
164
- <!-- footer -->
165
- <?php
166
- require('uploadphoto.php');
167
- ?>
168
-
169
-
170
- # 編集画面のソースコード
171
-
172
- $p_id = (!empty($_GET['p_id'])) ? $_GET['p_id'] : '';
173
- $dbFormData = (!empty($p_id)) ? getInfo($_SESSION['user_id'], $p_id) : '';
174
-
175
- ファイル頭にこれが追記されたのみで
176
- これ以外はDB接続のコードが「該当のソースコード」に書いたものになってるのみで、
177
- 投稿画面とほぼ共通のソースコードになります。
178
-
179
-
180
-
181
87
  ### 試したこと
182
88
  WHERE以降を消すとPOST送信自体はうまくいくので、
183
89
  p_id(記事ごとのID)、user_idの送信が問題のように見えるのですが、ログを見る限りでは