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

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

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

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1090閲覧

cookieの名前を配列にしてクッキーを複数生成したいです。

akobayashi

総合スコア15

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/12/26 07:36

編集2017/12/26 07:59

前回、cookieを配列に入れるコードを作ったのですが、
今度は選択したクッキーが削除ができなくて、削除するにはどうしたらよいかを考えたのですが、
cookieの名前を配列にして、見たページを削除する方法を探していますが、
以下のコードだと上書きされてしまいまして、どうしたらよいかお知恵を頂戴したく思います。
cakephpを使っているのですが、

修正コードでございます。 <?php if(isset($_COOKIE['user_title'])){ $values = array(); $value = $list['0']['Encode']['title']; $values[] = $value; $ligetime = 1800; foreach($values as $key => $tomato){ $key++; setcookie('user_title'.$key,$tomato,time() + $ligetime, '/' ); } }else{ $ligetime = 1800; $value = $list['0']['Encode']['title']; setcookie('user_title',$value,time() + $ligetime, '/' ); } ?>

これでelseにまで処理がいくのですが、
クッキーを見てみると
user_title
user_title1
で止まっちゃってました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

$values[] = $value;

$ligettime = 1800;
foreach($values as $key => $tomato){
$key++;
setcookie('user_title'.$namu,$tomato,time() + $ligetime, '/' );
}

全体的におかしいですね
$valueはどこからくるのでしょうか?
$values[]してforeachで回しても要素は1つしかないですよね?
'user_title'.$namuしてますが$namuが定義されていません。
結局なにをしたいのかわかりません。

elseの方で
'user_title'.$key
をキーにしてクッキーを保存しても、
'user_title'
は設定されていないなら、結局elseにしか処理がいかないのでは?

sample

参考までに

PHP

1<?php 2$val="あああ"; 3$ligetime = 1800; 4if(isset($_COOKIE['user_title'])){ 5 $vals=json_decode($_COOKIE['user_title']); 6 $vals[]=$val; 7 setcookie('user_title',json_encode($vals),time() + $ligetime); 8}else{ 9 setcookie('user_title',json_encode([$val]),time() + $ligetime); 10} 11?> 12<script> 13var user_title=JSON.parse(unescape(getCookie("user_title"))); 14console.log(user_title); 15if(user_title.length>5) delCookie('user_title'); 16function getCookie(key){ 17 var params = document.cookie.split(/; */); 18 var ret=null; 19 for(var i=0;i<params.length;i++){ 20 if(r=params[i].match(new RegExp("^"+key+"="+"(.*)"))){ 21 ret=r[1]; 22 } 23 } 24 return ret; 25} 26function delCookie(key){ 27 expiredate = new Date(); 28 expiredate.setYear(expiredate.getYear()-1); 29 tmp = key+"=;"; 30 tmp += "expires="+expiredate.toGMTString(); 31 document.cookie = tmp; 32}; 33</script>

投稿2017/12/26 07:49

編集2017/12/26 09:04
yambejp

総合スコア114585

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

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

akobayashi

2017/12/26 07:52

申し訳ありません。なんか色々間違っちゃてました。質問している内容がおかしくて申し訳ありません。すぐに修正させていただきます。
akobayashi

2017/12/26 08:00

コードの編集をさせていただきました。 elseにまで処理がいくのですが、 クッキーを見てみると user_title user_title1 で止まっちゃってました。
yambejp

2017/12/26 08:07

前回も書きましたが $values[] = $value; で設定されるのは $values[0]=$value; という要素を一つもった配列です $keyをインクリメントしてキー名を利用しているので クッキー:user_title1 は設定されますが、それ以降は回るようなロジックになっていません。 なにをどうしたときにどういう結果を期待しているか順序立てて 説明されたほうがよいとおもいます
akobayashi

2017/12/26 08:17

はい、説明がなってなくて申し訳ありません。 >$values[] = $value; >で設定されるのは >$values[0]=$value; >という要素を一つもった配列です >$keyをインクリメントしてキー名を利用しているので >クッキー:user_title1 >は設定されますが、それ以降は回るようなロジックになっていません。 こちらを クッキーを複数作りたくて user_title[0]; user_title[1]; user_title[2]; と増やしていきたくて、 現状ですとforeachが最初で止まっているということなので、 これを回したくてご質問さしあげました。 何度もご返信いただき申し訳ありません。
yambejp

2017/12/26 08:25 編集

$valueに投入している$list['0']['Encode']['title']; はどこからきてるのでしょうか? ちなみにクッキーには文字列しか入らないので 特定のキーをベースに配列にすることはできません。 配列を代替するためにjsonなどのデータに変換して保持するとよいと思います
akobayashi

2017/12/26 08:32

$list['0']['Encode']['title'] はcakephp の メソッドで$listという配列受け取ったデータでございます。 見ているページのデータになります。 全てのデータを書くと膨大で見にくくなるのと少し秘密がありますので、省略させていただいております。 $_SERVER['REQUEST_URI']と同じだと思っていただけますと幸いでございます。 >jsonなどのデータに変換して保持するとよいと思います こちらありがとうございます!試させていただきます!
yambejp

2017/12/26 09:05

更新するたびにuser_listが増えていくsample追記しておきました クッキーは文字数制限もあるのでとりあえず6個以上になったら 削除することにしてあります
akobayashi

2017/12/26 09:17

ありがとうございます! 提示していただきましたコードこそ、 やりたいこと完璧でした!javascript 解らない私ですが、 yambejp様のコードを何度も見させていただきます。 これ$val="あああ";をサイトタイトル(今まで見たページのタイトル$list['0']['Encode']['title']の部分です)に<a>タグを入れてクリックしたらキャッシュを削除する方法を探してみます。 多分それを実践するのにjavscriptが必要でしょうか?
yambejp

2017/12/26 09:29

今回のsampleはサーバー側で追加したものをブラウザで参照する方法ですので クッキーの編集自体はサーバー側で一通りできると思います ページ遷移しても保持していくというのが目的であれば 制限の多いクッキーよりはセッションの方がサーバー側で管理しやすいと思います。 もしくはlocalstorageなども選択肢にあがるかもしれません。
akobayashi

2017/12/26 09:41

丁寧にお答えしていただき誠にありがとうございます。 >クッキーの編集自体はサーバー側で一通りできると思います ありがとうございますサーバー側でやってみます。クッキーと配列を全部削除することができたんですが、1つ指定したクッキーの削除を模索していましたので、 なんとかできるようになりたいです。 >ページ遷移しても保持していくというのが目的であれば >制限の多いクッキーよりはセッションの方がサーバー側で管理しやすいと思います。 ああ、ちょっと考えてたんです。セッションの方がやりやすいんじゃないかって。 で知人やググって調べてみるとcookieの方が閲覧履歴を作りやすいとお聞きしたので、 cookieでやることになりまして、そうこうしているうちに時間が過ぎて言ってしまいました。 >もしくはlocalstorageなども選択肢にあがるかもしれません。 こちら調べさせていただきます。
akobayashi

2017/12/27 10:04

お世話になっております。 yambejp様 今回の「cookieの名前を配列にしてクッキーを複数生成したいです。」 の回答だけではなく、他の質問にもいつも丁寧にご説明していただきまして、ありがとうございます。 今回私がやろうとしている閲覧履歴、並びに指定した記事の削除。 こちらyambejp様が以前書いていただきました、session掲示板のコードを変更して、 使いました所、私の思い描く行動そのままできました。 今回のcookieのyambejp様のコードを示していただいたのですが、 ちょっとjavascriptが全く解らないので勉強し直して、再度コードを研究したいと思います。 いつもありがとうございます。早くyambejp様ぐらいのプログラマーになりたいと思います。 あ、一つだけご質問ですが、php(もしくはjavascript)の上達には人のコードを見て成長すると誰かから聞きましたが、本当でしょうか?
yambejp

2017/12/27 10:17

うーん、私はプログラマーではないので(汗) それに私のプログラム技術は「下の上」くらいです。 先日も別の掲示板で「おまえの書き込みは一度も参考になったことはない」と いわれて、ちょっとだけ凹みました。 まぁがんばってください > php(もしくはjavascript)の上達には人のコードを見て成長する なんの言語も基本はパクリですね 個人的な感想ですが、言語を覚えるのは3つあります。 (1)人に聞く (2)ネットで調べる (3)他人のコードをパクる(マネをする) 長文を丸パクリすると著作権(?)的に問題あるので ロジックだけでも借りるようにすれば一気に書けるソースの幅が広がりますね あとは細かい機能を組み合わせて使えばそれなりに実用レベルにはなると思います
akobayashi

2017/12/27 10:21

なるほど!プログラムに著作権あったんですか?知らなかった! 参考になりました、これからも人のコードパクりまくります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問