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

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

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

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

3876閲覧

Ajaxを用いた、SESSIONの値保持について。

mNQdQSJfh4wwZYb

総合スコア5

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/12/25 08:30

前提・実現したいこと

PHP、javascript初心者です。至らない点もあると思いますが、ご教授いただけると幸いです。
現在、個人的にWebサービスを作成しております。
ページネーションをphpで作成しておりまして、次ページに値を保持したいと考えております。

具体的には、form要素の中の、checkbox,selectbox,searchの値を引き継ぎたいです。
そこで、sessionを用いて値を次ページにも保持できるように、Ajaxを用いて実装しました。

ところがAjaxで遷移したphpファイル内で設定したsession情報が、うまく取得できません。
打開策を教えていただけないでしょうか?

該当のソースコード

フロント index.php

<?php require('function.php'); debug('「「「「「「「「「「「'); debug('トップページ'); debug('「「「「「「「「「「「'); debugLogStart(); //================================ // 画面処理 //================================ // 画面表示用データ取得 //================================ $siteTitle = 'HOME'; require('head.php'); if(isset($_POST['action']) && !empty($_POST['action'])) { if ($_POST['action'] === 'sessionreset') { sessionreset(); } } // カレントページ $currentPageNum = (!empty($_GET['p'])) ? (int)strstr($_GET['p'],"&",true) : 1; //デフォルトは1ページめ //ここでAjaxを利用したSession取得を考えています。 $category = isset($_SESSION['category']) ? $_SESSION['category'] : ''; $character = isset($_SESSION['character']) ? $_SESSION['character'] : ''; $kerword = isset($_SESSION['kerword']) ? $_SESSION['kerword'] : ''; $sort = isset($_SESSION['sort']) ? $_SESSION['sort'] : ''; // パラメータに不正な値が入っているかチェック if(!is_int($currentPageNum)){ error_log('エラー発生:指定ページに不正な値が入りました'); header("Location:index.php"); //トップページへ } $c_idlist = ''; //カテゴリーが空でなければidを設定 if (!empty($category)){ foreach ($category as $value) { $c_idlist.='&c_id%5B%5D='.$value; } } $ch_idlist = ''; //登場人物が空でなければidを設定 if (!empty($character)){ foreach ($character as $value) { $ch_idlist.='&ch_id%5B%5D='.$value; } } // DBからカテゴリデータを取得 $dbCategoryData = getCategory(); // DBから登場人物データを取得 $dbCharacterData = getCharacter(); // 表示件数 $listSpan = 10; // 現在の表示レコード先頭を算出 $currentMinNum = (($currentPageNum-1)*$listSpan);//1ページ目なら(1-1)*20 = 0 、 2ページ目なら(2-1)*20 = 20 // DBから思い出データを取得 $memoryData = getMemoriesList($currentMinNum,$category,$character,$kerword,$sort,$listSpan); ?> <body class="page-home page-2colum"> <?php require('header.php'); ?> <div id="contents" class="site-width"> <section id="sidebar"> <form method="get"> <h1 class="title">絞り込み</h1><br> <div class="sidebar_category"> <h3>カテゴリー</h3> <?php foreach ($dbCategoryData as $key => $value){ ?> <label> <input class="save-state-category" type="checkbox" name="ca_id[]" value="<?php echo $value['id']; ?>" <?php if(in_array($value['id'],(array)$category)) echo "checked"; ?> > <?php echo sanitize($value['name']); } ?> </label> </div> <div class="sidebar_character"> <h3>登場人物</h3> <?php foreach ($dbCharacterData as $key => $value){ ?> <label> <input class="save-state-character" type="checkbox" name="ch_id[]" value="<?php echo $value['id']; ?>" <?php if(in_array($value['id'],(array)$character)) echo "checked"; ?> > <?php echo sanitize($value['name']); } ?> </label> </div> <h3>表示順</h3> <div class="selectbox"> <select name="sort"> <option value="0" <?php if(getFormData('sort',true) == 0 ){ echo 'selected'; } ?>>選択してください</option> <option value="1" <?php if(getFormData('sort',true) == 1 ){ echo 'selected'; } ?> >撮影日が古い順</option> <option value="2" <?php if(getFormData('sort',true) == 2 ){ echo 'selected'; } ?> >撮影日が新しい順</option> </select> </div> <div class="search"> <h3>キーワード</h3> <input type="search" class="kerword" name="kerword" value="<?php echo getFormData('kerword',true); ?>" placeholder="卒業式" > </div> <input type="submit" name="search" value="検索"> <input type="button" class="clear-button" value="検索条件クリア" > </form> </section>

Ajax利用ファイル memorydiary.js

$(function(){ $('form').on('change',function(e){ var target = $( e.target ); var fd=new FormData(); switch (target.attr('name')) { case 'ca_id[]': fd.append("category",target.attr("value")); fd.append("docategory",target.prop('checked')?"add":"del"); break; case 'ch_id[]': fd.append("character",target.attr("value")); fd.append("docharacter",target.prop('checked')?"add":"del"); break; case 'kerword': fd.append("kerword",target.val()); fd.append("dokerword",target.val()?"add":"del"); break; case 'sort': fd.append("sort",target.val()); fd.append("dosort",target.prop("selectedIndex")===0?"del":"add"); break; default: } $.ajax({ "url":"ajaxregist.php", "type":"post", "dataType":"json", "data":fd, "processData": false, "contentType": false, }).done(function( $result ){ alert($result); }).fail(function( msg ){ }); }); });

ajax遷移先ファイル ajaxregist.php

<?PHP session_start(); $post_category = filter_input(INPUT_POST,"category",FILTER_NULL_ON_FAILURE); $post_character = filter_input(INPUT_POST,"character",FILTER_NULL_ON_FAILURE); $post_kerword = filter_input(INPUT_POST,"kerword",FILTER_NULL_ON_FAILURE); $post_sort = filter_input(INPUT_POST,"sort",FILTER_NULL_ON_FAILURE); $docategory=filter_input(INPUT_POST,"docategory",FILTER_NULL_ON_FAILURE); $docharacter=filter_input(INPUT_POST,"docharacter",FILTER_NULL_ON_FAILURE); $dokerword=filter_input(INPUT_POST,"dokerword",FILTER_NULL_ON_FAILURE); $dosort=filter_input(INPUT_POST,"dosort",FILTER_NULL_ON_FAILURE); $category=[]; $character=[]; if(isset($_SESSION["category"])){ if(is_array($_SESSION["category"])){ $category=$_SESSION["category"]; }else{ unset($_SESSION["category"]); } } if(isset($_SESSION["character"])){ if(is_array($_SESSION["character"])){ $category=$_SESSION["character"]; }else{ unset($_SESSION["character"]); } } if ($post_category) { array_session_push($post_category,'category',$docategory,$category); } if ($post_character) { array_session_push($post_character,'character',$docharacter,$character); } if ($post_kerword) { array_session_push($post_kerword,'kerword',$dokerword); } if ($post_sort) { array_session_push($post_sort,'sort',$dosort); } function array_session_push($post_item,$session_name,$do_item,$array_item = ''){ if (is_array($array_item)) { if($do_item=="del" and in_array($post_item,$array_item)){ $array_item=array_filter($array_item,function($x) use($post_item){return $x!==$post_item;}); $array_item=array_values($array_item); } if($do_item=="add" and !in_array($post_item,$array_item)){ array_push($array_item,$post_item); } $_SESSION[$session_name]=$array_item; }else{ if($do_item=="del"){ unset($_SESSION[$session_name]); }if($do_item=="add"){ $_SESSION[$session_name] = $post_item; } } } ?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

$.ajaxの要素に

xhrFields: {withCredentials: true}

を追加してみてください

投稿2019/12/25 08:36

yambejp

総合スコア114779

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

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

mNQdQSJfh4wwZYb

2019/12/27 14:53

ありがとうございます! おかげさまで実現できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問