<HTML>
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis">
    <TITLE>KOMOダイアリー(DB連携版)</TITLE>

    <STYLE TYPE="text/css">
    <!--
    :link     {
            Color : blue ;
            Text-Decoration : None
        }
    :active     {
            Color : blue ;
            Text-Decoration : None
        }
    :visited     {
            Color : blue ;
            Text-Decoration : None
        }
    A:hover     {
            Color : blue ;
            Text-Decoration : Underline
        }
    -->
    </STYLE>

</HEAD>
<BODY BGCOLOR="#FFFBF0">
<CENTER>
<P><IMG SRC="title.gif" WIDTH="415" HEIGHT="82" ALIGN="BOTTOM" BORDER="0"></P>
<P><FONT COLOR="#990066"><B>データベース連携の日記帳スクリプトです。記事は日付順(降順)に表示されます。</B></FONT><BR>
パスワードは「777」に設定しています。お試しあれ!(^o^)丿</P>

<?php
//====================初期設定======================
$db_user = "komonet"; //データベースのユーザー名(自分の環境に合わせて変更の事)
$db_name = "komodb"; //データベース名(自分の環境に合わせて変更の事)
$passwd = '777'; //管理者用パスワード
$data_max = 200; //データ最大記録数
$page_view = 5; //1ページの記事表示件数
$back_img = ''; //バック用画像
$this_year = date("Y"); //アクセス時の年
$this_month = date("n"); //アクセス時の月
$this_day = date("d"); //アクセス時の日
$up_dir = '/img/'; //画像保存用ディレクトリ
$w_max = 200; //画像の横幅の最大値(ピクセル)
$h_max = 200; //画像の縦幅の最大値(ピクセル)
$w_limit = 600; //画像の横幅の制限値(ピクセル)
$h_limit = 400; //画像の縦幅の制限値(ピクセル)
//==================================================

//スーパーグローバル変数対策
if(!isset($PATH_TRANSLATED)){
    
$path = dirname($_SERVER["PATH_TRANSLATED"]).$up_dir;
}else{
    
$path = dirname($PATH_TRANSLATED).$up_dir;
}
if(!isset(
$PHP_SELF)){ $PHP_SELF = $_SERVER["PHP_SELF"]; }
if(!isset(
$action)){
    if(
$_POST['action']){
        
$action = $_POST['action'];
    }else{
        
$action = $_GET['action'];
    }
}
if(!isset(
$code)){ $code = $_POST['code']; }
if(!isset(
$year)){ $year = $_POST['year']; }
if(!isset(
$month)){ $month = $_POST['month']; }
if(!isset(
$day)){ $day = $_POST['day']; }
if(!isset(
$subject)){ $subject = $_POST['subject']; }
if(!isset(
$msg)){ $msg = $_POST['msg']; }
if(!isset(
$img_name)){ $img_name = $_POST['img_name']; }
if(!isset(
$img_del)){ $img_del = $_POST['img_del']; }
if(!isset(
$button)){ $button = $_POST['button']; }
if(!isset(
$password)){
    if(
$_POST['password']){
        
$password = $_POST['password'];
    }else{
        
$password = $_GET['password'];
    }
}
if(!isset(
$e_code)){ $e_code = $_POST['e_code']; }
if(!isset(
$upfile)){ $upfile = $_FILES['upfile']['tmp_name']; }
if(!isset(
$upfile_name)){ $upfile_name = $_FILES['upfile']['name']; }
if(!isset(
$pline)){ $pline = $_POST['pline']; }
if(!isset(
$mode)){ $mode = $_POST['mode']; }
if(!isset(
$search_str)){ $search_str = $_POST['search_str']; }

//===============インライン関数===================
function inline_link($link){
    
$link = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$link);
    return
$link;
}
//================================================

//データベースに接続
$d_base = pg_connect("user=" . $db_user . " dbname=" . $db_name) or die("接続エラー");

if(
$action == "regist"){
    
//処理の分岐
    
if($button == "修正/更新"){
        
//インラインリンクを実現(URLのみ)
        
$msg = inline_link($msg);
        if(
strlen($msg) < 500){
            
//画像を削除
            
if($img_del){
                
unlink(".".$up_dir.$img_name);
                
$img_name = "";
            }
            
//画像のアップロード処理
            
if(is_uploaded_file($upfile)){
                
//画像の属性を取得
                
$imagesize = getimagesize($upfile);
                if((
$imagesize[0] > $w_limit) || ($imagesize[1] > $h_limit)){ //大きな画像のアップを制限
                    
$err_msg = "画像のサイズが大き過ぎて登録できませんでした。";
                }else{
                    switch(
$imagesize[2]){
                        case
1:
                            
$out = $code . ".gif";
                            break;
                        case
2:
                            
$out = $code . ".jpg";
                            break;
                        case
3:
                            
$out = $code . ".png";
                            break;
                        default:
                            
unlink($upfile);
                    }
                    if(
$out){
                        
$sendpath = $path.$out;
                        if(
move_uploaded_file($upfile, $sendpath)){
                            
chmod($sendpath,0666);
                            
$img_name = $out;
                        }
                    }
                }
            }
            
//アップデート
            
$sql = "update db_diary set code = " . $code . ",year = " . $year . ",month = " . $month . ",day = " . $day . ",subject = '" . $subject . "',msg = '" . $msg . "',img_name = '" . $img_name . "' where code = " . $code;
            
pg_query($d_base, $sql) or die("データ更新エラー");
            if(!
$err_msg){
                echo
"<META HTTP-EQUIV=refresh CONTENT=0;URL=$PHP_SELF?action=edit&password=$passwd>\n";
                exit;
            }
        }else{
            
$err_msg = "コメントの文字数が多すぎます。";
        }
    }
    if(
$button == "削除"){
        if(
$code){
            
//画像の削除処理
            
$sql = "select * from db_diary where code = " . $code;
            
$result = pg_query($d_base, $sql) or die("データ抽出エラー");
            
$arr = pg_fetch_row($result, 0); //検索結果の一行分を配列に格納
            
$img_name = $arr[6];
            
unlink(".".$up_dir.$img_name);
            
//該当データを削除
            
$sql = "delete from db_diary where code = " . $code;
            
pg_query($d_base, $sql) or die("データ削除エラー");
        }
    }
    if(
$button == "送信/更新"){
        if(
$msg){
            
$code = time(); //アクセス時の秒数
            //インラインリンクを実現(URLのみ)
            
$msg = inline_link($msg);
            if(
strlen($msg) < 500){
                
//画像のアップロード処理
                
if(is_uploaded_file($upfile)){
                    
//画像の属性を取得
                    
$imagesize = getimagesize($upfile);
                    if((
$imagesize[0] > $w_limit) || ($imagesize[1] > $h_limit)){ //大きな画像のアップを制限
                        
$err_msg = "画像のサイズが大き過ぎて登録できませんでした。";
                    }else{
                        switch(
$imagesize[2]){
                            case
1:
                                
$out = $code . ".gif";
                                break;
                            case
2:
                                
$out = $code . ".jpg";
                                break;
                            case
3:
                                
$out = $code . ".png";
                                break;
                            default:
                                
unlink($upfile);
                        }
                        if(
$out){
                            
$sendpath = $path.$out;
                            if(
move_uploaded_file($upfile, $sendpath)){
                                
chmod($sendpath,0666);
                                
$img_name = $out;
                            }
                        }
                    }
                }
                
$sql = "insert into db_diary values ($code,$year,$month,$day,'$subject','$msg','$img_name')";
                
pg_query($d_base, $sql) or die("データ登録エラー");
                
//データ最大記録数を調整
                
$sql = "select * from db_diary order by code DESC";
                
$result = pg_query($d_base, $sql) or die("データ抽出エラー");
                
$row = pg_numrows($result); //検索結果の行数を取得
                
if($row > ($data_max * 1.2)){
                    
$arr = pg_fetch_row($result, $data_max);
                    
$max_arr = $arr[0];
                    
$sql = "delete from db_diary where code <= $max_arr";
                    
pg_query($d_base, $sql) or die("データ削除エラー");
                }
                if(!
$err_msg){
                    echo
"<META HTTP-EQUIV=refresh CONTENT=0;URL=$PHP_SELF>\n";
                    exit;
                }
            }else{
                
$err_msg = "コメントの文字数が多すぎます。";
            }
        }else{
            
$err_msg = "コメントが書き込まれていません。";
        }
    }
}elseif((
$action == "edit") && ($password == $passwd)){
    
$kanri_flag = 1; //管理マドの表示制御用フラグ
    
echo "<form action=$PHP_SELF method=POST ENCTYPE=multipart/form-data>\n";
    echo
"<input type=hidden name=action value=regist>\n";
    if(
$e_code){
        
$sql = "select * from db_diary where code = " . $e_code;
        
$result = pg_query($d_base, $sql) or die("データ抽出エラー");
        
$arr = pg_fetch_row($result, 0); //検索結果の一行分の各値を配列に格納
        
$e_code = $arr[0];
        
$e_year = $arr[1];
        
$e_month = $arr[2];
        
$e_day = $arr[3];
        
$e_subject = $arr[4];
        
$e_msg = $arr[5];
        
$img_name = $arr[6];

        echo
"<input type=hidden name=code value=\"$e_code\">\n";
        echo
"<input type=hidden name=img_name value=\"$img_name\">\n";
        echo
"<table border=0>\n";
        echo
"<tr><td align=right><B>日付:</B></td><td colspan=2><SELECT NAME=year>";
        for(
$i=$this_year-1; $i<$this_year+5; $i++){
            echo
"<OPTION" . (($e_year == $i) ? ' SELECTED' : '') . ">$i</OPTION>";
        }
        echo
"</SELECT>年<SELECT NAME=month>";
        for(
$i=1; $i<13; $i++){
            echo
"<OPTION" . (($e_month == $i) ? ' SELECTED' : '') . ">$i</OPTION>";
        }
        echo
"</SELECT>月<SELECT NAME=day>";
        for(
$i=1; $i<32; $i++){
            echo
"<OPTION" . (($e_day == $i) ? ' SELECTED' : '') . ">$i</OPTION>";
        }
        echo
"</SELECT>日</td></tr>\n";
        echo
"<tr><td align=right><B>題名:</B></td><td colspan=2><input type=text size=35 name=subject value=\"$e_subject\"></td></tr>\n";
        echo
"<tr><td align=right><B>コメント:</B></td><td colspan=2><textarea name=msg rows=6 cols=50>$e_msg</textarea></td></tr>\n";
        echo
"<tr><td align=right><B>添付画像:</B></td><td colspan=2>上書<INPUT TYPE=file NAME=upfile SIZE=35> 削除<INPUT TYPE=CHECKBOX NAME=img_del VALUE=1></td></tr>\n";
        echo
"<tr><td></td><td>\n";
        echo
"<input type=submit name=button value=修正/更新> <input type=submit name=button value=削除></td></form>\n";
        echo
"<td><form action=$PHP_SELF method=POST><input type=submit value=ログアウト></td></tr>\n";
        echo
"</table></form>\n";
    }else{
        echo
"<table border=0>\n";
        echo
"<tr><td align=right><B>日付:</B></td><td><SELECT NAME=year>";
        for(
$i=$this_year-1; $i<$this_year+5; $i++){
            echo
"<OPTION" . (($this_year == $i) ? ' SELECTED' : '') . ">$i</OPTION>";
        }
        echo
"</SELECT>年<SELECT NAME=month>";
        for(
$i=1; $i<13; $i++){
            echo
"<OPTION" . (($this_month == $i) ? ' SELECTED' : '') . ">$i</OPTION>";
        }
        echo
"</SELECT>月<SELECT NAME=day>";
        for(
$i=1; $i<32; $i++){
            echo
"<OPTION" . (($this_day == $i) ? ' SELECTED' : '') . ">$i</OPTION>";
        }
        echo
"</SELECT>日</td></tr>\n";
        echo
"<tr><td align=right><B>題名:</B></td><td><input type=text size=35 name=subject></td></tr>\n";
        echo
"<tr><td align=right><B>コメント:</B></td><td><textarea name=msg rows=6 cols=50></textarea></td></tr>\n";
        echo
"<tr><td align=right><B>添付画像:</B></td><td><INPUT TYPE=file NAME=upfile SIZE=35></td></tr>\n";
        echo
"</table>\n";
        echo
"<input type=submit name=button value=送信/更新> <input type=reset value=リセット></form>\n";
    }
}
//エラー処理
if($err_msg){
    echo
"<FONT COLOR='red'>" . $err_msg . "</FONT>";
    echo
"<BR><BR><A HREF=$PHP_SELF onMouseOver=this.style.color='red' onMouseOut=this.style.color='blue'><やり直す></A>\n";
    exit;
}
echo
"<form action=$PHP_SELF method=POST>\n";
echo
"<input type=hidden name=mode value=sort>\n";
echo
"<input type=hidden name=action value=\"$action\">\n";
echo
"<input type=hidden name=password value=\"$password\">\n";
echo
"<B>文字列検索:</B><FONT SIZE=2>題名又はコメントに文字列</FONT><input type=text size=20 name=search_str><FONT SIZE=2>を含む</FONT> <input type=submit name=submit value=送信> <input type=reset value=リセット></FORM>\n";
if(
$mode == 'sort'){
    if(
$search_str){
        
$sql = "select * from db_diary where subject like '%" . $search_str . "%' or msg like '%" . $search_str . "%' order by year DESC, month DESC, day DESC";
    }else{
        
$sql = "select * from db_diary order by year DESC, month DESC, day DESC";
    }
}else{
    
$sql = "select * from db_diary order by year DESC, month DESC, day DESC";
}
$result = pg_query($d_base, $sql) or die("データ抽出エラー");
$row = pg_numrows($result); //検索結果の行数を取得
if($row > 0){
    if(
$pline == ""){
        
$p_line = 0;
    }else{
        
$p_line = $pline;
    }
    
$end_data = $row - 1;
    
$page_end = $p_line + ($page_view - 1);
    if(
$page_end >= $end_data)
        
$page_end = $end_data;
    for(
$i=$p_line; $i<=$page_end; $i++){
        
$arr = pg_fetch_row($result, $i); //検索結果の一行分を配列に格納
        //曜日を生成
        
$date_str = $arr[1] . "/" . $arr[2] . "/" . $arr[3];
        
$date_timestamp = strtotime($date_str);
        
$week_day = strftime("%a", $date_timestamp);
        if(
$week_day == 'Sun'){
            
$font1 = "<FONT COLOR='red'>";
            
$font2 = "</FONT>";
        }elseif(
$week_day == 'Sat'){
            
$font1 = "<FONT COLOR='blue'>";
            
$font2 = "</FONT>";
        }else{
            
$font1 = "";
            
$font2 = "";
        }
        echo
"<form action=$PHP_SELF method=POST>\n";
        echo
"<input type=hidden name=action value=edit>\n";
        echo
"<input type=hidden name=e_code value=\"$arr[0]\">\n";
        echo
"<input type=hidden name=pline value=$pline>\n";
        echo
"<table border=1 width=90% bordercolor=#555555>\n";
        echo
"<tr><td>■<b>" . $arr[1] . "/" . $arr[2] . "/" . $arr[3] . "(" . $font1 . $week_day . $font2 . ")</B>\n";
        echo
" <font color='green' size=4><b>" . $arr[4] . "</b></font>\n";
        if ((
$action == "edit") && ($password == $passwd)) {
            echo
"<input type=hidden name=password value=$passwd> <input type=submit value=訂正>\n";
        }
        echo
"</td></tr><tr><td><blockquote>\n";
        if(
$arr[6]){
            
$img_name = $arr[6];
            if(
file_exists("$path$img_name")){
                
$size = getimagesize("$path$img_name");
                
$img_w=$size[0];
                
$img_h=$size[1];
                if(
$img_w > $w_max || $img_h > $h_max){
                    
$w_ritu = $w_max / $img_w;
                    
$h_ritu = $h_max / $img_h;
                    (
$w_ritu < $h_ritu) ? $key = $w_ritu : $key = $h_ritu;
                    
$width = (int) $img_w * $key;
                    
$height = (int) $img_h * $key;
                    echo
"<A HREF=.$up_dir$img_name TARGET=_blank><img src=.$up_dir$img_name WIDTH=" . $width . " HEIGHT=" . $height . " ALIGN=LEFT></A>";
                }else{
                    echo
"<img src=.$up_dir$img_name ALIGN=LEFT>";
                }
            }
        }
        
$msg = nl2br($arr[5]);
        if(
$search_str){
            
$msg = str_replace("$search_str", "<B><SPAN STYLE=\"Background-Color : #FFCCFF\">$search_str</SPAN></B>", $msg);
        }
        echo
$msg . "</blockquote></td></tr></table></form>\n";
    }
}else{
    echo
"<FONT COLOR='red'>登録されている記事がありません。</FONT>";
}
?>

<P>
<TABLE BORDER="0" WIDTH="600">
    <TR>
        <TD WIDTH="50%">

<?php
if($page_end >= $page_view){
    
$page_count = floor($page_end / $page_view);
    
$prev_line = ($page_count - 1) * $page_view;
    echo
"<form method=Post action=$PHP_SELF>\n";
    if ((
$action == 'edit') && ($password == $passwd)){
        echo
"<input type=hidden name=action value=edit>\n";
        echo
"<input type=hidden name=password value=$passwd>\n";
    }
    echo
"<input type=hidden name=pline value=$prev_line>\n";
    echo
"<input type=hidden name=sort_flag value=$sort_flag>\n";
    echo
"<input type=submit value=前のページ>\n";
    echo
"</form>\n";
}else{
    echo
"&nbsp;\n";
}
?>

        </TD>
        <TD WIDTH="50%"><P ALIGN="RIGHT">

<?php
$next_line
= $page_end + 1;
if(
$page_end != $end_data){
    echo
"<form method=Post action=$PHP_SELF>\n";
    if ((
$action == 'edit') && ($password == $passwd)){
        echo
"<input type=hidden name=action value=edit>\n";
        echo
"<input type=hidden name=password value=$passwd>\n";
    }
    echo
"<input type=hidden name=pline value=$next_line>\n";
    echo
"<input type=submit value=次のページ>\n";
    echo
"</form>\n";
}else{
    echo
"&nbsp;\n";
}
?>

        </TD>
    </TR>
</TABLE>

<?php
if($kanri_flag < 1){
    echo
"<div align=left>\n";
    echo
"<form action=$PHP_SELF method=POST>\n";
    echo
"<input type=hidden name=action value=edit>\n";
    echo
"<input type=password size=10 name=password>\n";
    echo
"<input type=hidden name=pline value=$pline>\n";
    echo
" <input type=submit value=管理><br>\n";
    echo
"</form></div>\n";
}
?>

<div align="right"><font size="-1">Powered by <a href="http://www.komonet.ne.jp/" onMouseOver="this.style.color='red'" onMouseOut="this.style.color='blue'">KOMONET</a></font></div>
</BODY>
</HTML>