回答編集履歴

2

追記

2016/11/01 14:25

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -199,3 +199,235 @@
199
199
  </html>
200
200
 
201
201
  ```
202
+
203
+
204
+
205
+ ###追記
206
+
207
+ 実際に業務でサイトのアクセスカウンタを作るとなると、後々の変更に耐えうるようなDBの設計とかもあり、現在の質問者様の知識量ではすこし難解になりそうなので、
208
+
209
+ かなり簡略化します。(スキルアップとともにやり方を進化していってください)
210
+
211
+ そしてsessionを使うのは次の機会にして、まずは下記使用でいきましょう
212
+
213
+
214
+
215
+ ・アクセス毎にカウントアップ(F5を押されてもカウンタはカウントアップする)
216
+
217
+ ・ページ毎にカウント
218
+
219
+
220
+
221
+
222
+
223
+ まずアクセスカウンタのデータ保存ようのテーブルをこのように定期するとします。
224
+
225
+
226
+
227
+ ```sql
228
+
229
+ CREATE TABLE IF NOT EXISTS `accescount` (
230
+
231
+ `pageid` varchar(128),
232
+
233
+ `cnt` integer,
234
+
235
+ PRIMARY KEY (`pageid`)
236
+
237
+ );
238
+
239
+ ```
240
+
241
+
242
+
243
+ そしてページがa.php,b.phpがあるとします。
244
+
245
+
246
+
247
+ ###a.php
248
+
249
+ ```php
250
+
251
+ <?php
252
+
253
+ $db_host='xxxxxx';
254
+
255
+ $db_name='xxxxxx';
256
+
257
+ $db_user='xxxxxx';
258
+
259
+ $db_pass='xxxxxx';
260
+
261
+ $db_table='xxxxxx';
262
+
263
+
264
+
265
+ $pdo = new PDO("mysql:dbname=$db_name;charset=utf8;", $db_user,$db_pass);
266
+
267
+ $pdo->query("use $db_table");
268
+
269
+
270
+
271
+ $count = 0;
272
+
273
+
274
+
275
+ $plans = $pdo->query("SELECT cnt FROM accescount where pageid='a.php'")->fetchAll(PDO::FETCH_COLUMN, 0);
276
+
277
+ if(!count($plans))
278
+
279
+ {
280
+
281
+ $count = 1;
282
+
283
+ $pdo->query("insert into accescount (pageid,cnt) values ('a.php',1)");
284
+
285
+ }
286
+
287
+ else
288
+
289
+ {
290
+
291
+ $count = $plans[0];
292
+
293
+ $count++;
294
+
295
+ $pdo->query(sprintf("update accescount set cnt=%d where pageid='a.php'",$count));
296
+
297
+ }
298
+
299
+
300
+
301
+
302
+
303
+ ?>
304
+
305
+ <!DOCTYPE html>
306
+
307
+ <html>
308
+
309
+ <head>
310
+
311
+ <meta charset="utf-8">
312
+
313
+ <title></title>
314
+
315
+ </head>
316
+
317
+ <body>
318
+
319
+
320
+
321
+ <?php echo($count); ?>Views
322
+
323
+ <a href="b.php">bへ</a>
324
+
325
+ </body>
326
+
327
+ </html>
328
+
329
+ ```
330
+
331
+
332
+
333
+ ###b.php
334
+
335
+ ```php
336
+
337
+ <?php
338
+
339
+ $db_host='xxxxxx';
340
+
341
+ $db_name='xxxxxx';
342
+
343
+ $db_user='xxxxxx';
344
+
345
+ $db_pass='xxxxxx';
346
+
347
+ $db_table='xxxxxx';
348
+
349
+
350
+
351
+ $pdo = new PDO("mysql:dbname=$db_name;charset=utf8;", $db_user,$db_pass);
352
+
353
+ $pdo->query("use $db_table");
354
+
355
+
356
+
357
+ $count = 0;
358
+
359
+
360
+
361
+ $plans = $pdo->query("SELECT cnt FROM accescount where pageid='b.php'")->fetchAll(PDO::FETCH_COLUMN, 0);
362
+
363
+ if(!count($plans))
364
+
365
+ {
366
+
367
+ $count = 1;
368
+
369
+ $pdo->query("insert into accescount (pageid,cnt) values ('b.php',1)");
370
+
371
+ }
372
+
373
+ else
374
+
375
+ {
376
+
377
+ $count = $plans[0];
378
+
379
+ $count++;
380
+
381
+ $pdo->query(sprintf("update accescount set cnt=%d where pageid='b.php'",$count));
382
+
383
+ }
384
+
385
+
386
+
387
+
388
+
389
+ ?>
390
+
391
+ <!DOCTYPE html>
392
+
393
+ <html>
394
+
395
+ <head>
396
+
397
+ <meta charset="utf-8">
398
+
399
+ <title></title>
400
+
401
+ </head>
402
+
403
+ <body>
404
+
405
+
406
+
407
+ <?php echo($count); ?>Views
408
+
409
+ <a href="a.php">aへ</a>
410
+
411
+ </body>
412
+
413
+ </html>
414
+
415
+ ```
416
+
417
+ こんな感じでa、bそれぞれ別個にカウントアップされると思います。
418
+
419
+
420
+
421
+ あくまで最初の勉強用という事で、これが理解できたら、次にF5対策などsessionも使ったアクセスカウンタ、そしてもっと大規模になった時に今回のような勉強用のテーブルではなくもっと実用的なテーブル設計、等徐々に進んでいかれたら良いと思います。
422
+
423
+
424
+
425
+ テーブル設計もプログラムのロジックも自分で思いついて「これイケてるのでは?」とか思ったり、他者のソース(オープンソース等)を読んで、「これいいやん!」っていう経験の積み重ねで洗練されていきますので。。。。
426
+
427
+
428
+
429
+ では!
430
+
431
+
432
+
433
+

1

追記

2016/11/01 14:25

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -125,3 +125,77 @@
125
125
 
126
126
 
127
127
  DBに保存し、カウンタをカウントアップしていきますが、同じユーザーがF5を連打するとどんどんカウンタが上がっていくというのはおかしいので、その時セッションを使います。同一セッションの場合はカウントアップしない等すると同じユーザーがF5をおしたり、ページ間を移動してもカウントアップされず正確なアクセスカウンタを作る事ができます。
128
+
129
+
130
+
131
+ > 追記
132
+
133
+
134
+
135
+ とてもとても簡易に書くとこんな感じで一応できると思います。DBの取得更新はDBスキーマによるので割愛
136
+
137
+ 上部のphpを書けばどのページでも使いまわせます
138
+
139
+
140
+
141
+ ```php
142
+
143
+ <?php
144
+
145
+ session_start(); //セッションを使います宣言
146
+
147
+
148
+
149
+ if(empty($_SESSION['count'])){
150
+
151
+ // ここでDBを操作するコードを書く
152
+
153
+ $count = (DBからカウンター値を取得する処理);
154
+
155
+ $count++;
156
+
157
+ // DBにインクリメントしたカウント値をupdateする処理
158
+
159
+ (DBにカウンター値をupdateする処理)
160
+
161
+
162
+
163
+ // セッション
164
+
165
+ $_SESSION['count'] = true;
166
+
167
+ }
168
+
169
+ ?>
170
+
171
+
172
+
173
+ <!DOCTYPE html>
174
+
175
+ <html>
176
+
177
+ <head>
178
+
179
+ <meta charset="utf-8">
180
+
181
+ <title></title>
182
+
183
+ </head>
184
+
185
+ <body>
186
+
187
+
188
+
189
+ <p>
190
+
191
+ <?php echo $count; ?>views
192
+
193
+ </p>
194
+
195
+
196
+
197
+ </body>
198
+
199
+ </html>
200
+
201
+ ```