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

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

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

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

Q&A

解決済

1回答

901閲覧

クッキー履歴の削除ボタンが作成できない。

ananans

総合スコア2

PHP

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

0グッド

1クリップ

投稿2021/07/21 06:07

編集2021/07/21 06:53

前提・実現したいこと

PHPでクッキーを使って「現在日時」「前回アクセスした日時」「これまでアクセスした回数」を表示するプログラムを作成しております。

発生している問題・エラーメッセージ

クッキー履歴の削除ボタンを作成しているのですが、未定義エラーを吐かれます。
イメージ説明

エラーメッセージ Notice: Undefined index: visit_history in /home/ec2-user/environment/htdocs/php24/challenge_cookie.php on line 20

該当のソースコード

ソースコード <html lang="ja"> <head> <meta charset="utf-8"> <title>Cookie</title> </head> <body> <?php $now_date = date('Y-m-d H:i:s'); if (! isset($_COOKIE['visit_count'])) { setcookie('visit_count', 1); setcookie('visit_history', $now_date); print("初めてのアクセスです<br>"); print($now_date ."(現在日時)<br>"); } else { $count = $_COOKIE['visit_count'] + 1; $visit_history = $_COOKIE['visit_history']; setcookie('visit_count', $count); setcookie('visit_history', $now_date); print("合計" . $count . "回目のアクセスです<br>"); print($now_date."(現在日時)<br>"); print($visit_history."(前回のアクセス日時)<br>"); } if (isset($_POST["delete"]) === true) { setcookie('visit_history', "", time() - 30); } ?> <form method="post"> <input type="submit" name="delete" value="履歴削除"> </form> </body> </html>

試したこと

setcookieの変数部分を変更したり、visit_historyの定義部分を持っていきましたが、相変わらず未定義エラーが吐かれます。

補足情報(FW/ツールのバージョンなど)

Cloud9

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

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

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

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

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

m.ts10806

2021/07/21 06:42

phpMyAdminは関係ないのでは
ananans

2021/07/21 06:52

すみません。消しておきます
guest

回答1

0

ベストアンサー

削除の処理でvisit_historyしか削除されていなようなのでvisit_countも削除するようにすれば良いと思います。

php

1if (isset($_POST["delete"]) === true) { 2 setcookie('visit_history', "", time() - 30); 3 setcookie('visit_count', "", time() - 30); 4}

現状$_COOKIE['visit_count']は存在して$_COOKIE['visit_history']は未定義のチグハグな状態になっています。

投稿2021/07/21 09:11

webgoto

総合スコア1293

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

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

ananans

2021/07/22 01:56

回答ありがとうございます。 追加したら消えるようになりましたが、初回だけ押下すると消えないのですがどうすればよろしいでしょうか。
webgoto

2021/07/22 02:05

アクセス回数の判定のあとに削除処理をしているからだと思います。 削除の処理を一番上にしてみてはどうでしょう。
ananans

2021/07/22 02:25

そうしたらボタンが機能しなくなりました。
webgoto

2021/07/22 03:06

削除のみの表示にするならelseifとして if (isset($_POST["delete"]) === true) { setcookie('visit_count', "", time() - 30); setcookie('visit_history', "", time() - 30); print("履歴を削除しました"); } elseif (! isset($_COOKIE['visit_count'])) { ... 即座に初回アクセスとするならクッキーを削除する必要はなく下記の処理で良いと思います。 if (isset($_POST["delete"]) === true) { $_COOKIE['visit_count'] = null; }
ananans

2021/07/23 01:37

上のコードで行ったらうまくいきました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問