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/ |