WebプログラミングU PHP

 目次へ 前へ 次へ

2010/8/24 久米

 

4 掲示板作成 オプション2

4.6 名前自動入力

4.7 新着マーク

4.8 ページ分け表示

1例としてページリンク文字列を生成する関数を下記に示す。
$n=pageLink("p", $dp, $PAGE_COUNT, $cnt);
などと使用し、$nをpirntすればよい。

////////ページのリンク生成関数/////////
//$displayPageName:現在のページをGETで飛ばすときのパラメタ名
//$displayPage:現在のページ $pageCount:1ページの件数 $totalCount:全件数
//返り値:ページリンクの文字列
function pageLink($displayPageName, $displayPage, $pageCount, $totalCount){
    $totalPage=ceil($totalCount/$pageCount);//全ページ数 小数点切り上げ
    if($totalPage<=1)return "";
    
    $url=basename($_SERVER['PHP_SELF']);
    $pl="";
    for($i=1; $i<=$totalPage; $i++){
	if($i==$displayPage){
	    $pl.="<b>{$i}</b> ";
	}else{
	    $pl.="<a href=\"{$url}?{$displayPageName}={$i}\">{$i}</a> ";
	}
    }
    return $pl;
}

 

 


 

その他 セキュリティ対策

 

参考 投稿のみ会員専用

共通パスワードのみで制御する方法

login.php

<?php
//error_reporting(0);
session_start();
if(isset($_SESSION['login'])){
    if($_SESSION['login']=='OK'){
        header("Location: submit.php");
    }
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>login</title>
</head>
<body>
<h1>掲示板 投稿ログイン</h1>
<form method="post" name="f" action="login2.php">
パスワード:<input type="password" name="password">
<input type="submit" name="sub" value="ログイン">
</form>
</body>
</html>

login2.php

<?php
//error_reporting(0);
session_start();
if(!isset($_POST['password'])) exit("アクセスエラーです。");
if($_POST['password']=='777'){
    $_SESSION['login']='OK';
    header("Location: submit.php");
    exit();
}else{
    $_SESSION['login']='NG';
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>login2</title>
</head>
<body>
<h1>掲示板 投稿ログイン</h1>
<p>パスワードが違います。</p>
<p><a href="login.php">戻る</a> </p>
</body>
</html>

submit.phpの先頭に次のスクリプトを追加

<?php
//error_reporting(0);
session_start();
if(!isset($_SESSION['login'])){
    header("Location: login.php");
    exit();
}

if($_SESSION['login']!='OK'){
    header("Location: login.php");
    exit();
}
?>

  

会員データベースを作成して制御する方法

会員用
テーブル作成

CREATE TABLE users (
id int(11) NOT NULL auto_increment,
name varchar(32) NOT NULL,
password blob NOT NULL,
mail_address varchar(128) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE (name)
)

パスワードを
暗号化して
挿入
INSERT INTO users
(name, password)
VALUES
('kume', ENCODE('777','seed'))
パスワードを
取得
SELECT name, DECODE(password, 'seed') pass
FROM users
名前とパスワードが
一致しているか
SELECT count(*) cnt
FROM users
WHERE name='kume'
AND password=ENCODE('777', 'seed')

参)php 暗号化関数

MD5:md5($pass)
SHA256:hash('sha256', $pass)

$pass:test
MD5:098f6bcd4621d373cade4e832627b4f6
SHA256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08