1. 現在位置:
  2. トップページ
  3. HP作成tips
  4. PHP-更新履歴c
更新履歴c
■ サンプル

「更新履歴」こちら 管理者パスワードは「test」です
編集と削除があります
観覧ページはNEXT、BACKがつきます

更新履歴表示 newindex.php
管理者専用更新履歴表示 new.php
管理者用入力チェック分岐用 new_a.php
管理者用編集用 new1.php
ログファイル new.dat(666)
スタイルシート test.css

■ ソース

newindex.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>更新履歴</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="test.css">
</head>
<body>
<div id="containar">
<div id="tatext">更新履歴</div>
<table class="tablea">
<tr><td class="tda" width="70">更新日</td><td class="tda" width="150">更新ページ</td><td class="tda">更新内容</td></tr>

<?php
$filename = "new.dat";
$new_list = file($filename);

// 10個で次のページ
$new_per = array_chunk($new_list, 10);
$page_all = count($new_per);
$now_page = ($_GET['page']) ? $_GET['page'] : 0;
if ($new_per[$now_page][0] == "") $now_page = 0;

foreach ($new_per[$now_page] as $lineno => $line) {

    if ($page_all > 1) {
    $strnext = ' <a href="newindex.php?page='.($now_page+1).'">[NEXT]</a>';
    $strback = '<a href="newindex.php?page='.($now_page-1).'">[BACK]</a> ';
    }

    list($new_date, $title, $url, $comment) = explode("|", $line);

    $year = intval(substr($new_date, 0, 4));
    $month = intval(substr($new_date, 4, 2));
    $day = intval(substr($new_date, 6, 2));

    if ($url == "") {
    $url = $title;
    } else {
    $url = ("<a href=\"$url\">$title</a>");
    }

    print("<tr><td class=\"tda\">\n");
    print("$year/$month/$day");
    print("</td>\n");
    print("<td class=\"tda\">$url</td>\n");
    print("<td class=\"tda\">$comment</td>\n");
    print("</tr>\n");
}
print("</table><br>\n");
if ($now_page) {
print $strback;
}
if ($now_page < $page_all-1) {
print $strnext;
}
?>
</div>
<div class="ff">
<form action="new.php" method="post">
<input type=password name="pass" size=10><input type="submit" name="submit" value="管理者専用">
</form>
</div>
</body>
</html>

■ ソース

new.php
<?php
$pass = $HTTP_POST_VARS['pass'];
if ($pass!= "test"){
    print("こちらは管理者専用です。ブラウザの戻るボタンで戻ってください。\n");
    exit;
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>更新履歴</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="test.css">
</head>
<body>
<div id="containar">
<div id="tatext">更新履歴</div>
<table class="tablea">
<tr><td class="tda" width="70">更新日</td><td class="tda" width="150">更新ページ</td><td class="tda">更新内容</td></tr>

<?php
$filename = "new.dat";
$new_list = file($filename);

    foreach ($new_list as $lineno => $line) {

        list($new_date, $title, $url, $comment) = explode("|", $line);

    $year = intval(substr($new_date, 0, 4));
    $month = intval(substr($new_date, 4, 2));
    $day = intval(substr($new_date, 6, 2));

    if ($url == "") {
    $url = $title;
    } else {
    $url = ("<a href=\"$url\">$title</a>");
    }

    print("<tr>\n");
    print("<td class=\"tdb\"><a href=\"new1.php?year=" .$year . "&month=". $month . "&day=$day\">$year/$month/$day</a></td>\n");
    print("<td class=\"tdb\">$url</td>\n");
    print("<td class=\"tdb\">$comment</td>\n");
    print("</tr>\n");
    }
?>
</table>
</div>
<div class="ff">
<form action="new_a.php" method="post">
<input type="submit" name="submit" value="新規入力">
</form>
</div>
</body>
</html>

■ ソース

new_a.php
<?php
$filename = "new.dat";

if (isset($_POST["regist"])) {
    $error_message = array();

    if (isset($_POST["year"]) && is_numeric($_POST["year"]) && $_POST["year"] > 2000) {
    $year = $_POST["year"];
    } else {
    $error_message[] = "年を正しく入力してください。";
    }

    if (isset($_POST["month"]) && is_numeric($_POST["month"]) && $_POST["month"] > 0 && $_POST["month"] < 13) {
    $month = $_POST["month"];
    } else {
    $error_message[] = "月を正しく入力してください。";
    }

    if (isset($_POST["day"]) && is_numeric($_POST["day"]) && $_POST["day"] > 0 && $_POST["day"] < 32) {
    $day = $_POST["day"];
    } else {
    $error_message[] = "日を正しく入力してください。";
    }

    if (isset($_POST["title"]) && $_POST["title"]) {
        if (strstr($_POST["title"], "|")) {
        $error_message[] = "申し訳ありませんが、タイトルに|文字は使えません。";
        } else {
        $title = $_POST["title"];
        }
    } else {
    $error_message[] = "タイトルを入力してください。";
    }

    if (isset($_POST["url"]) && $_POST["url"]) {
        if (strstr($_POST["url"], "|")) {
        $error_message[] = "申し訳ありませんが、リンクアドレスに|文字は使えません。";
        } else {
        $url = $_POST["url"];
        }
    } elseif (!isset($_POST["url"])){
        $url = "";
    }

    if (isset($_POST["comment"]) && $_POST["comment"]) {
        if (strstr($_POST["comment"], "|")) {
        $error_message[] = "申し訳ありませんが、内容に|文字は使えません。";
        } else {
        $comment = $_POST["comment"];
        }
    } else {
    $error_message[] = "更新内容を入力してください。";
    }

    if (!count($error_message)) {
        $comment = str_replace(array("\r\n", "\r", "\n"), "<br>", $comment);
        $new_date = sprintf("%04d%02d%02d", $year, $month, $day);
        $new_line = $new_date."|".$title."|".$url."|".$comment."\n";

        if (isset($_POST["lineno"])) {
            $new_list = file($filename);
            $fp = fopen($filename, "w");

            foreach ($new_list as $lineno => $original_line) {

                if ($lineno == $_POST["lineno"]) {
                    fwrite($fp, $new_line);
                } else {
                    fwrite($fp, $original_line);
                }
            }
            fclose($fp);
        } else {
            $fp = fopen($filename, "r");
                if(filesize($filename) != "0") {
                    $contents = fread($fp, filesize($filename));
                fclose($fp);
                }
            $fp = fopen($filename, "w");
            fwrite($fp, $new_line);
            fwrite($fp, $contents);
            fclose($fp);
        }
    header("Location: newindex.php");
    exit;
    }
} elseif (isset($_GET["mode"]) && $_GET["mode"] == "delete") {
    $new_list = file($filename);
    $fp = fopen($filename, "w");
    foreach ($new_list as $lineno => $original_line) {
        if ($lineno == $_GET["lineno"]) {
        } else {
            fwrite($fp, $original_line);
        }
    }
    fclose($fp);
    header("Location: newindex.php");
    exit;
} else {
    if (isset($_GET["lineno"])) {
    $lineno = intval($_GET["lineno"]);
    $new_list = file($filename);
    $line = $new_list[$lineno];

    if (!$line) {
    print("指定されたスケジュールは見つかりません");
    exit;
    }

    list($new_date, $title, $url, $comment) = explode("|", $line);

    $year = intval(substr($new_date, 0, 4));
    $month = intval(substr($new_date, 4, 2));
    $day = intval(substr($new_date, 6, 2));
    }
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>更新履歴</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="test.css">
</head>
<body>
<div id="containar">

<?php
if (count($error_message)) {
    print("<font size=2 font color=\"#ff0000\">");
    foreach ($error_message as $message) {
    print($message);
    print("<br>");
    }
    print("</font><br>");
}
?>

<div id="tatext">更新履歴入力画面</div>
<form action="new_a.php" method="post">
<table class="tablea">
<tr><td class="tda" width="70">更新日</td>
<td class="tda">
<input type="text" name="year" value="<?php print(htmlspecialchars($year, ENT_QUOTES)); ?>" STYLE="ime-mode:disabled">

<input type="text" name="month" value="<?php print(htmlspecialchars($month, ENT_QUOTES)); ?>" STYLE="ime-mode:disabled">

<input type="text" name="day" value="<?php print(htmlspecialchars($day, ENT_QUOTES)); ?>" STYLE="ime-mode:disabled">

</td></tr>
<tr><td class="tda">更新ページ名</td>
<td class="tda">
<input type="text" size="30" name="title" value="<?php print(htmlspecialchars($title, ENT_QUOTES)); ?>" />
</td></tr>
<tr><td class="tda">更新ページアドレス</td>
<td class="tda">
<input type="text" size="70" name="url" value="<?php print $url; ?>" STYLE="ime-mode:disabled">
</td></tr>
<tr><td class="tda">更新内容</td>
<td class="tda">
<textarea rows="10" cols="60" name="comment"><?php print(htmlspecialchars($comment, ENT_QUOTES)); ?></textarea>
</td></tr>
</table>
</div>
<div class="gg">
<?php
if (isset($_GET["lineno"])) {
?>
<input type="hidden" name="lineno" value="<?php print(htmlspecialchars($lineno, ENT_QUOTES)); ?>">
<input type="submit" name="regist" id="regist" value="更新する" />
<?php
    } else {
?>
<input type="submit" name="regist" value="登録する" />
<?php
}
?>
</form>
</div>
</body>
</html>

■ ソース

new1.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>更新履歴一覧</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="test.css">
</head>
<body>
<div id="containar">
<div id="tatext">更新履歴</div>
<table class="tablea">
<tr><td class="tda" width="70">日付</td><td class="tda" width="150">更新ページ名</td><td class="tda">更新ページアドレス</td><td class="tda">内容</td><td class="tda">編集</td><td class="tda">削除</td></tr>

<?php

$filename = "new.dat";
$new_list = file($filename);

foreach ($new_list as $lineno => $line) {

    list($new_date, $title, $url, $comment) = explode("|", $line);

    if ($new_date == date("Ymd", mktime(0, 0, 0, $_GET["month"], $_GET["day"], $_GET["year"]))) {

        $year = intval(substr($new_date, 0, 4));
        $month = intval(substr($new_date, 4, 2));
        $day = intval(substr($new_date, 6, 2));

        print("<tr><td class=\"tda\">\n");
        print("$year/$month/$day");
        print("</td>\n");
        print("<td class=\"tda\">$title</td>\n");
        print("<td class=\"tda\">$url</td>\n");
        print("<td class=\"tda\">$comment</td>\n");
        print("<td class=\"tda\"><a href=\"new_a.php?lineno=$lineno&mode=edit\">編集する</a></td>\n");
        print("<td class=\"tda\"><a href=\"new_a.php?lineno=$lineno&mode=delete\">削除する</a></td>\n");
        print("</tr>\n");
    }
}
?>
</table>
</div>
</body>
</html>

■ ソース

test.css
@charset "shift_jis";

html{
    scrollbar-track-color: #dddddd;
    scrollbar-face-color: #eeeeee;
    scrollbar-shadow-color: #aaaaaa;
    scrollbar-darkshadow-color: #aaaaaa;
    scrollbar-highlight-color: #eeeeee;
    scrollbar-3dlight-color: #aaaaaa;
    scrollbar-arrow-color: #aaaaaa;
}
a:link { color: #0000ff;text-decoration: none; }
a:visited { color: #0000ff;text-decoration: none; }
a:hover { color: #0000ff;text-decoration: none; }
a:active { color: #0000ff;text-decoration: none; }

body{
    text-align: center;
    background-color: #ffffff;
    margin: 0px;
    padding: 0px;
    font-size: 12px;
}

#containar {
    width: 700px;
    margin-top: 0px;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}

#tatext {
    font-size: 20px;
    margin-top: 20px;
    margin-bottom: 20px;
}

.tablea {
    width: 650px;
    margin-left: auto;
    margin-right: auto;
    margin-bottom: 20px;
    padding: 0px;
    border: 2px #f5e0e0 solid;
    border-collapse: collapse;
    background-color: #ffffff;
}

.tda {
    border: 2px #f5e0e0 solid;
    padding: 10px 10px 10px 10px;
    margin: 0px;
    background-color: #ffffff;
    font-size:12px;
}
.tdb {
    border: 2px #f5e0e0 solid;
    padding: 3px 10px 3px 10px;
    margin: 0px;
    background-color: #ffffff;
    font-size:12px;
}

.ff {
    width: 670px;
    margin-top: 0px;
    margin-left: auto;
    margin-right: auto;
    text-align: right;
    background-color: #ffffff;
}
.gg {
    width: 670px;
    margin-top: 0px;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
    background-color: #ffffff;
}