PHP Scrapbook
webcreators 2004年4月号
PHPスクラップブック:記事中スクリプト
◆ P132‐リスト1 前号のcreatetbl.phpの変更個所
  $sqlstr = "create table mybbs(" .
"mailaddr TEXT," .
"name TEXT," .
"password TEXT," .
"key TEXT," .
"mark BOOLEAN," .
"remotehost INET," .
"timestamp TIMESTAMP," .
"subject TEXT," .
"body TEXT );";
◆ P132‐リスト2 config.php
<?php
$db_host = "localhost";
$db_name = "webcreators";
$db_username = "yourname";
$db_password = "yourpassword";


function jdialog( $message ) {
header( "Content-Type: text/html;charset=EUC-JP" );
echo "<script type=\"text/javascript\">\n";
echo "<!--\n";
echo "alert(\"". $message . "\");\n";
echo "history.back();\n";
echo "// -->\n</script>";
}
?>
◆ P133‐リスト3 bbswrite.php
<?php
include("config.php");

$dbh = pg_connect( "host = ". $db_host . " dbname = " . $db_name . " user=" . $db_username . " password=" . $db_password);
if($dbh == FALSE) {
jdialog("データベースに接続できません" );
exit();
}
$mailaddr = htmlentities( $_POST["mailaddr"] , ENT_COMPAT, "EUC-JP");
$name = htmlentities( $_POST["name"], ENT_COMPAT, "EUC-JP");
$pass = htmlentities( $_POST["pass"], ENT_COMPAT, "EUC-JP");
$subject = htmlentities( $_POST["subject"], ENT_COMPAT, "EUC-JP");
$body = nl2br( htmlentities( $_POST["body"], ENT_COMPAT, "EUC-JP") );
$key = uniqid( rand() );

if( strlen($name) && strlen($pass) && strlen($subject) && strlen($body) ) {
$sqlstr = "insert into mybbs values (" .
"'". $mailaddr . "'," .
"'". $name . "'," .
"'". $pass . "'," .
"'". $key . "'," .
"'false'," .
"'". $_SERVER["REMOTE_ADDR"]."'," .
"'NOW'," .
"'".$subject."'," .
"'".$body."')";
$res = pg_query( $dbh, $sqlstr );
if( !res )
jdialog( "データベース登録失敗" );
else
jdialog( "データベースの書き込みに成功" );
}
else
jdialog( "項目が不足しています");
exit();
?>
◆ P133‐リスト4 表示スクリプト(mybbs.php)
<?php
include("tmpl2.class.php");
include("config.php");

$disp = 20;

$tmpl = new Tmpl2;
$tmpl->set_fname("mybbs.html");

$dbh = pg_connect( "host = ". $db_host . " dbname = " . $db_name . " user=" . $db_username . " password=" . $db_password);
if($dbh == FALSE) {
exit("データベースに接続できません" );
}

$sqlstr = "select * from mybbs where mark='false'";
$res = pg_query( $dbh, $sqlstr );
$num = pg_numrows($res);

$tmpl->loopset( "bbsbody" ) ;
if( $num == 0 ) {
$tmpl->assign( "subject" , "まだ" );
$tmpl->assign( "body" , "何も書き込まれていません" );
$tmpl->assign( "name" , "bbs master" );
$tmpl->assign( "date" , "00-00-00" );
$tmpl->assign( "num" , "-1" );
$tmpl->loopnext("bbsbody");
}
else {
for( $i = 1; $i < ($disp+1) ; $i++ ) {
if( $num - $i < 0 ) break;
$row = pg_fetch_array( $res, $num - $i, PGSQL_ASSOC );
$tmpl->assign( "subject" , $row["subject"] );
$tmpl->assign( "body" , $row["body"] );
$tmpl->assign( "name" , $row["name"] );
$tmpl->assign( "date" , $row["timestamp"] );
$tmpl->assign( "num" , $num - $i );
$tmpl->assign( "mailaddr", $row["mailaddr"] );
$tmpl->assign( "key" , $row["key"] );
$tmpl->loopnext("bbsbody");
}
}
$tmpl->loopend("bbsbody") ;
$tmpl->flush();
?>
◆ P133‐リスト5 削除スクリプト(delete.php)
<?php
include("config.php");

$key = $_POST["keystr"];
$pass = $_POST["pass"];

$dbh = pg_connect( " host = " . $db_host .
" dbname = " . $db_name .
" user=" . $db_username .
" password=" . $db_password );
if($dbh == FALSE) {
jdialog("データベースに接続できません" );
exit();
}

$sqlstr = "select * from mybbs where key='". $key . "'";
$res = pg_query( $dbh, $sqlstr );
$num = pg_numrows( $res );
if( $num == 0 ) {
jdialog( "削除に該当するレコードがありません" );
exit();
}
$row = pg_fetch_array( $res, 0, PGSQL_ASSOC );
if( $pass != $row["password"] ) {
jdialog( "パスワードが違います" );
exit();
}

$sqlstr = "update mybbs set mark='true' where key='" . $key . "'";
$res = pg_query( $dbh, $sqlstr );
if( !$res )
jdialog("データベースにアクセスできません" );
else
jdialog( "削除しました ");
exit();

?>
◆ P134‐リスト6 上のテーブルのHTMLソース
●一覧表部分
<!-- tmpl:loop %bbsloop% -->
<TR>
<TD>%num%</TD>
<TD>%mailaddr%</TD>
<TD>%name%</TD>
<TD>%password%</TD>
<TD>%mark%</TD>
<TD>%remotehost%</TD>
<TD>%timestamp%</TD>
<TD>%subject%</TD>
<TD>%body%</TD>
<TD>
<FORM action="adm_delete.php" method="POST"><INPUT type="submit" name="submit" value="削除"><INPUT type="hidden" name="keystr" value="%key%"></FORM>
</TD>
</TR>
<!-- tmpl:endloop %bbsloop% -->●ふたつのボタン
<FORM action="adm_deletemark.php" method="POST"><INPUT type="submit" name="deletemark" value="マークされた項目を削除"></FORM>
<FORM action="adm_backup.php" method="POST"><INPUT type="submit" name="backup" value="バックアップ"></FORM>●リストア部分
<FORM action="adm_restore.php" method="POST"><TEXTAREA rows="10" cols="80" name="restore_text"></TEXTAREA><INPUT type="submit" name="restore" value="リストア"></FORM>
◆ P134‐リスト7 管理用メインスクリプト(admin.php)
<?php
include("../tmpl2.class.php");
include("../config.php");

$tmpl = new Tmpl2;
$tmpl->set_fname("mybbadmin.html");

$dbh = pg_connect( "host = ". $db_host . " dbname = " . $db_name . " user=" . $db_username . " password=" . $db_password);
if($dbh == FALSE) {
jdialog("データベースに接続できません" );
exit();
}

$sqlstr = "select * from mybbs";
$res = pg_query( $dbh, $sqlstr );
$num = pg_numrows($res);

$tmpl->loopset( "bbsloop" ) ;
$i = 0;
while( true ) {
if( $num <= $i ) break;
$row = pg_fetch_array( $res, $i++, PGSQL_ASSOC );
$tmpl->assign( "num" , $i );
$tmpl->assign( "mailaddr" , $row["mailaddr"] );
$tmpl->assign( "name" , $row["name"] );
$tmpl->assign( "password" , $row["password"] );
$tmpl->assign( "mark" , $row["mark"] );
$tmpl->assign( "remotehost" , $row["remotehost"] );
$tmpl->assign( "timestamp" , $row["timestamp"] );
$tmpl->assign( "subject" , $row["subject"] );
$tmpl->assign( "body" , $row["body"] );
$tmpl->assign( "key" , $row["key"] );
$tmpl->loopnext("bbsloop");
}
$tmpl->loopend("bbsloop") ;
$tmpl->flush();
?>
◆ P135‐リスト8 バックアップスクリプト(adm_backup.php)
<?php
include("../config.php");

$dbh = pg_connect( "host = ". $db_host . " dbname = " . $db_name . " user=" . $db_username . " password=" . $db_password);
if($dbh == FALSE) {
jdialog("データベースに接続できません" );
exit();
}

$sqlstr = "select * from mybbs";
$res = pg_query( $dbh, $sqlstr );
$num = pg_numrows($res);

header( "Content-Type: text/plane;charset=EUC-JP" );
header( "Content-Disposition: inline; filename=\"bbsbackup.txt\"" );
print("delete from mybbs;\r\n");
for($i=0 ; $i < $num ; $i++ ){
$row = pg_fetch_array( $res, $i, PGSQL_ASSOC );
print("insert into mybbs values(" .
"'" . $row["mailaddr"] . "'," .
"'" . $row["name"] . "'," .
"'" . $row["password"] . "'," .
"'" . $row["key"] . "'," .
"'" . $row["mark"] . "'," .
"'" . $row["remotehost"] . "'," .
"'" . $row["timestamp"] . "'," .
"'" . $row["subject"] . "'," .
"'" . $row["body"] . "');" );
}
exit();
?>
◆ P135‐リスト9 管理者削除用スクリプト(adm_delete.php)
<?php
include("../config.php");

$key = $_POST["keystr"];

$dbh = pg_connect( " host = " . $db_host .
" dbname = " . $db_name .
" user=" . $db_username .
" password=" . $db_password );
if($dbh == FALSE) {
jdialog("データベースに接続できません" );
exit();
}

$sqlstr = "delete from mybbs where key='" . $key . "'";
$res = pg_query( $dbh, $sqlstr );
if( !$res )
jdialog("データベースにアクセスできません" );
else
jdialog( "削除しました ");
exit();
?>
P135‐リスト10 マークされたデータを削除するスクリプト(adm_deletemark.php)
<?php
include("../config.php");

$key = $_POST["keystr"];

$dbh = pg_connect( " host = " . $db_host .
" dbname = " . $db_name .
" user=" . $db_username .
" password=" . $db_password );
if($dbh == FALSE) {
jdialog("データベースに接続できません" );
exit();
}

$sqlstr = "delete from mybbs where mark='true'";
$res = pg_query( $dbh, $sqlstr );
if( !$res )
jdialog("データベースにアクセスできません" );
else
jdialog( "削除しました ");
exit();
?>
P135‐リスト11 リストア用スクリプト(adm_restore.php)
<?php
include("../config.php");

$sqlstr = stripslashes($_POST["restore_text"]);

$dbh = pg_connect( " host = " . $db_host .
" dbname = " . $db_name .
" user=" . $db_username .
" password=" . $db_password );
if($dbh == FALSE) {
jdialog("データベースに接続できません" );
exit();
}

$res = pg_query( $dbh, $sqlstr );
if( !$res )
jdialog("データベースにアクセスできません" );
else
jdialog( "リストアしました");
exit();
?>
◆ PHP役立ちリンク「PHP.NET」
www.php.net/
◆ PHP役立ちリンク「日本PHPユーザ会」
www.php.gr.jp/

←BACK

Copyright (c) 2004 MdN Corporation  All rights reserved.