こんにちは。ワードプレスで会員制サイトを構築しようとしているものです。
自分でデータベースを作り、ID/PW/権限をSESSIONに保持し、各固定ページでif文で権限ごとに表示する情報を切り分けようと思っています。
サーバーはlolipopです。
php
1functions.phpに 2if (is_page() ) { 3 add_action('init', 'session_start'); 4 function session_start(){ 5 session_start(); 6 } 7} 8 9function Include_my_php($params = array()) { 10 extract(shortcode_atts(array( 11 'file' => 'default' 12 ), $params)); 13 ob_start(); 14 include(get_theme_root() . '/bridge-child' . "/$file.php"); 15 return ob_get_clean(); 16} 17 18add_shortcode('myphp', 'Include_my_php');
を追加しています。
まず、ログインページに
html
1<form action="[myphp file='getoptions']/system/top" method="post">ID: 2<input name="user_id" size="10" type="text" value="" /> 3PW: 4<input name="user_pw" size="30" type="text" value="" /> 5<input type="submit" value="登録する" /></form>
と記入し、飛び先のページである、/topに
php
1<?php 2function idcheck() { 3 4$id = htmlspecialchars($_REQUEST['user_id'],ENT_QUOTES); 5$pw = htmlspecialchars($_REQUEST['user_pw'],ENT_QUOTES); 6 global $wpdb; 7$query = "SELECT * FROM $wpdb->db名 where login_id = '$id';" ; 8$sql = $wpdb->get_results($query); 9foreach ($sql as $value) { 10if(strcmp($value->login_pw , $pw) ==0 ){ 11print('ログインしました。'); 12$_SESSION['user'] = $id; 13$_SESSION['pw'] = $pw; 14$_SESSION['authority'] = $value->authority; 15}else{ 16print('パスワードが違います。'); 17} 18} 19} 20?> 21 22<?php 23idcheck(); 24?>
と記入しました。
ログインページからポスト送信されてきたidを、select文でwhereの中に条件として記入し、1行データをひろい、データベースのpwと入力されたpwを比較して、OKならログインしましたと表示し、
セッションにidとpwと権限情報を記入するプログラムです。
$_SESSIONで、ID情報をセッションに記入しているのですが、このページではセッションが使えるのに、他のページではsessionが拾えません。
試しに、このように書いてみたのですが、
php
1<?php 2print('<p>ユーザIDは'.$_SESSION['authority']); 3var_dump($_SESSION) ; 4print(session_id()); 5?> 6 7<?php 8print($_SESSION['authority']); 9if($_SESSION['authority']==1){ 10print('<p>権限1です。</p>'); 11 12 13} else { 14print('<p>ログインし直してください。</p>'); 15} 16 17?>
$_SESSION['authority']の部分がどうしてもnullになります。
どなたか解決策のわかる方はいませんか?