質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1931閲覧

cookieの理解について

YousukeTanaka

総合スコア79

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

3クリップ

投稿2016/04/10 17:14

PHP初心者の者です。
現在、cookieについて書籍で学習しておりますが、以下のcookieの理解に苦しんでいます。
お力をお貸しいただければと思います。

①以下のコードで、最初に、$count = 1 を設定した理由がわかりません。
②$count++; で1だけ加算した理由がわかりません。

<?php $count = 1; if (isset($_COOKIE["count"])) { $count = $_COOKIE["count"]; $count++; } setcookie("count", $count, time() + 10 ); ?> <HTML> <HEAD> <TITLE>クッキーのテスト</TITLE> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> </HEAD> <BODY> クッキーのテスト<BR> <BR> <?php if ($count == 1) { ?> はじめての訪問です。<BR> <BR> クッキー情報はありません。<BR> このページをリロードしてください。<BR> <?php } else { ?> あなたの訪問は<?=$count?>回目です。<BR> <BR> 10秒以内にリロードするとカウントアップします。 <?php } ?> </BODY> </HTML>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

既におおかた回答があるので説明は割愛しますが,ちょっとこの書き方イマイチですね.本筋から逸れますが,HTMLの書き方も10年前ぐらいの超古臭い感じです.私ならこう書くかも.

HTML

1<?php 2 3// $_COOKIE['count'] が存在していればそれを整数に変換した値,無ければ0を$countに代入 4// ($_COOKIEの値はすべて文字列か配列になるため,整数に明示的に変換をかけるほうが望ましい) 5$count = isset($_COOKIE['count']) ? (int)$_COOKIE['count'] : 0; 6 7// $countをインクリメント 8++$count; 9 10// Cookieの有効期限を10秒後に 11setcookie('count', $count, time() + 10); 12 13?> 14<!DOCTYPE html> 15<meta charset="UTF-8"> 16<title>Cookieのテスト</title> 17<h1>Cookieのテスト</h1> 18<p> 19<?php if ($count === 1): ?> 20 はじめての訪問です.<br> 21<?php else: ?> 22 あなたの訪問は<?=$count?>回目です.<br> 23<?php endif; ?> 24 10秒以内にページをリロードするとカウントアップされます.<br> 25</p>

ちなみに最初の$countに代入している部分は,filter_inputという関数を使えばもう少し綺麗に書けます.

php

1$count = (int)filter_input(INPUT_COOKIE, 'count');

読んでおくといいページ

投稿2016/04/10 22:23

編集2016/04/10 22:25
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YousukeTanaka

2016/04/15 05:14

詳細な説明と補足のリンクありがとうございます。大変勉強になりました。
guest

0

ベストアンサー

まずはこのコードの塊が何を行いたいのかを把握する必要がありますね。
前後の関係性はこのコードだけでは分かりませんが、恐らくはサイトへの訪問回数をカウントをしているものと思われます。

①に関してはサイトへの1番最初の訪問回数の表示の初期値を決めたい為に、セットされているものですね。
最初の訪問者には訪問時にCookieを埋め込むことは可能ですが、最初であるが為にCookieはセットされていませんから。

下記コードはブラウザにCookieがセットされているかを確認し、存在すればif文の中身が実行されます。

if (isset($_COOKIE["count"]))

つまり、最初の訪問者はこのif文の中を通らないので、最初にセットした

$count = 1;

の1が訪問回数として表示されるという仕組みです。

②に関しですが、もうお分かりかもしれませんが訪問回数をカウントしているものと考えると、次回訪れた時には今までの回数に1を加えた回数を表示させてあげる必要がある為、$count++;とつまり$count = $count + 1;としてあげている訳です。

※補足ですが、次回訪問時には再び$count = 1;を通るので、カウントが初期化されて正常にカウント出来ないかもと考えてしまうかもしれませんが、if文を通る際にCookieのチェックをして、Cookieがあればその値をチェックして再び$count = $_COOKIE["count"];の様に$countに代入して上書きをしてあげているので問題はありません。

投稿2016/04/10 18:21

y_natsui

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YousukeTanaka

2016/04/11 05:09

意味が十分に理解できました。ありがとうございました。
guest

0

①cookieのない初回訪問時を1回目の訪問(メッセージとしてははじめての訪問)としているため。
②($_COOKIE["count"])には前回までの訪問回数が入っているため、+1することで今回の訪問回数としている。

投稿2016/04/10 17:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YousukeTanaka

2016/04/15 05:15

ご回答ありがとうございました。理解が進みました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問