2010年2月26日金曜日

archives.php

<?
require('MySmarty.class.php');
require('Settings.class.php');
require('Categories.class.php');
require('Topic.class.php');
require('Comment.class.php');

$topicid = $_GET['topicid'];
if( $topicid=='' ){
    $topicid = $_POST['topicid'];
}
if( $topicid=='' ){
    header("Location: index.php" );
    exit;
}

$smarty = new MySmarty();
$settings  = new Settings();
$categories  = new Categories();
$topic  = new Topic();
$com  = new Comment();

$settings->loadSettings();

$set['maintitle'] = $settings->maintitle;
$set['subtitle'] = $settings->subtitle;
$set['maxtopics'] = $settings->maxtopics;
$set['username'] = $settings->username;
$set['passwd'] = $settings->passwd;
$set['mailaddr'] = $settings->mailaddr;
$smarty->assign( "settings", $set );

$topicv = $topic->getTopic( $topicid );
$smarty->assign( "topic", $topicv );

$template_name="archives.html";
if( $_POST['preview'] != '' ){

    $smarty->assign('comname', $_POST['comname']);
    $smarty->assign('mailaddr', $_POST['mailaddr']);
    $smarty->assign('title', $_POST['title']);
    $smarty->assign('body', $_POST['body']);
    $bodyf = $_POST['body'];
    $bodyf = ereg_replace( "\n","<br>", $bodyf );
    $bodyf = ereg_replace( "<br><br>","</p>\n<p>", $bodyf );
    $bodyf = '<p>' . $bodyf . '</p>';
    $smarty->assign('bodyf', $bodyf);
   
    $template_name="comment_prev.html";
}
if( $_POST['post'] != '' ){
//        $err_msg = check_input();
        $com->topicid = $_POST['topicid'];
        $com->comname = $_POST['comname'];
        $com->mailaddr = $_POST['mailaddr'];
        $com->title = $_POST['title'];
        $com->body = $_POST['body'];
        $com->saveComment();
        $err_msg = $com->errorm;
}

$smarty->assign( "prvtopicid", 0 );
$smarty->assign( "nxttopicid", 0 );

$comments = $com->getComments( $topicid );
$smarty->assign( "comments", $comments );

$smarty->assign( "err_msg", $err_msg );
$smarty->assign( "topicid", $topicid );


$smarty->display( $template_name );

?>

Comment.class.php

<?php

require_once "BaseDB.class.php";
// ログインをするクラス
class Comment extends BaseDB
{
    public function loadComment( $comid='' )
    {
        $qstring = "select comid,topicid,dt,ipaddr,hostname,comname,mailaddr," .
                "title,body from b_comments where comid=$comid";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
        if(!$fresult = mysql_fetch_array($qresult))
        {
            $this->errorm = "コメント情報がありません。";
            $this->errors++;
            return false;
        }
       
        $this->comid = $fresult['comid'];
        $this->topicid = $fresult['topicid'];
        $this->dt = $fresult['dt'];
        $this->ipaddr = $fresult['ipaddr'];
        $this->hostname = $fresult['hostname'];
        $this->comname = $fresult['comname'];
        $this->mailaddr = $fresult['mailaddr'];
        $this->title = $fresult['title'];
        $this->body = $fresult['body'];
       
        return true;
    }

    public function saveComment() /* 投稿ボタンをおしたら */
    {
        if( $this->comid == 0 ){ /* comidがゼロの場合、新規登録 */
            $qstring = "insert into b_comments (topicid,dt,ipaddr,hostname,comname,mailaddr,title,body)values(" .
                "$this->topicid,NOW(),'$this->ipaddr','$this->hostname','$this->comname','$this->mailaddr','$this->title','$this->body')";
        } else { /*コメントIDがある場合は、上書き登録になります。*/
            $qstring = "update b_comments set ".
                "comname = '$this->comname', ".
                "mailaddr = '$this->mailaddr', ".
                "title = '$this->title', ".
                "body = '$this->body' ".
                " where comid='$this->comid'";
        }
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
       
        return true;
    }

    public function getComments($topicid=0)
    {
        if( $topicid == 0 ){ /* $topicidのIDがゼロの場合は全てのコメントを取得します。コメント管理の時に使います */
        $qstring = "select comid,topicid,DATE_FORMAT( dt,'%Y/%m/%d %T') as postdatef," .
                "comname,mailaddr,title,body " .
                " from b_comments order by comid";
        } else { /* $topicidのIDがある場合はIDに紐づくコメントを取得します */
        $qstring = "select comid,topicid,DATE_FORMAT( dt,'%Y/%m/%d %T') as postdatef," .
                "comname,mailaddr,title,body " .
                " from b_comments where topicid=$topicid order by comid";
        }
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            echo $this->errorm ;
            return false;
        }
        $all = array();
        while( $rec = mysql_fetch_assoc($qresult) ){
            $rec['bodyf'] = ereg_replace( "\n","<br>", $rec['body'] );
            $rec['bodyf'] = ereg_replace( "<br><br>","</p>\n<p>", $rec['bodyf'] );
            $rec['bodyf'] = '<p>' . $rec['bodyf'] . '</p>';
           
            $all[] = $rec;
        }
        return $all;
    }

    public function deleteComment( $id ) /* 管理画面でコメントを削除する時に使います */
    {
        $qstring = "delete from b_comments where comid = $id";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
       
        return true;
    }

    // プロパティ参照
    function __get( $property )
    {
        return $this->$property;
    }
    // プロパティセット
    function __set( $property, $value )
    {
        $this->$property = $value;
    }
} //クラス終了





?>

archives.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<meta name="generator" content="http://www.movabletype.org/" />
<title>{$settings.maintitle}: {$topic.maintitle}</title>
<link rel="stylesheet" href="styles-site.css" type="text/css" />
</head>
<body>
<div id="container">
<div id="banner">
<h1><a href="index.php" accesskey="1">{$settings.maintitle}</a></h1>
<h2>{$settings.subtitle}</h2>
</div>
<div class="content">
<p align="right">
{if $prvtopicid!=0 }
<a href="archives.php?topicid={$prvtopicid}">&laquo; {$prvtitle}</a> |
{/if}
<a href="index.php">メイン</a>
{if $nxttopicid!=0 }
| <a href="archives.php?topicid={$nxttopicid}">{$nxttitle} &raquo;</a>
{/if}
</p>
<h2>{$topic.postdatef}</h2>
<h3>{$topic.title}</h3>
{$topic.bodyf}
<p class="posted">投稿者 {$settings.username} : {$topic.postdatef} {$topic.posttimef} :{$topic.category}</p>
<!--
<h2 id="trackbacks">トラックバック</h2>
<p class="techstuff">このエントリーのトラックバックURL:<br />
http://www.xxx.jp/cgi-bin/mt/mt-tb.cgi/75</p>
-->
<h2 id="comments">コメント</h2>
{section name=cloop loop=$comments}
<div id="c{$comments[cloop].comid}">
<h2>{$comments[cloop].title}</h2>
{$comments[cloop].bodyf}
</div>
<p class="posted">投稿者 <a href="mailto:{$comments[cloop].mailaddr}">{$comments[cloop].comname}</a>  : {$comments[cloop].postdatef}</p>
{/section}
<h2>コメントしてください</h2>
<b>{$err_msg}</b>
<form method="post" action="archives.php" name="comments_form">
<input type="hidden" name="topicid" value="{$topicid}" />
<div id="name_email">
<p><label for="author">名前:</label><br />
<input tabindex="1" id="comname" name="comname" /></p>
<p><label for="email">メールアドレス:</label><br />
<input tabindex="2" id="mailaddr" name="mailaddr" /></p>
</div>
<p><label for="text">タイトル:</label> <br/>
<input tabindex="3" id="title" name="title" /></p>
<p><label for="text">コメント:</label> <br/>
<textarea tabindex="4" id="body" name="body" rows="10" cols="50"></textarea></p>
<div align="center">
<input type="submit" name="preview" tabindex="5"
    value="&nbsp;確認&nbsp;" />
<input style="font-weight: bold;" type="submit" name="post"
    tabindex="6" value="&nbsp;投稿&nbsp;" />
</div>
</form>
</div>
</div>
</body>
</html>

comment_prev.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title>{$settings.maintitle}</title>
<link rel="stylesheet" href="styles-site.css" type="text/css" />
</head>
<body>
<div id="container">
<div id="banner">
<h1><a href="index.php" accesskey="1">{$settings.maintitle}</a></h1>
<h2>{$settings.subtitle}</h2>
</div>
<div class="content">
<h2>コメントの確認</h2>
<h3>{$title}</b>
{$bodyf}
<p class="posted">投稿者 <a href="mailto:{$mailaddr}">{$comname}</a>  : </p>
<b>{$err_msg}</b>

<form method="post" action="archives.php" name="comments_form">
<input type="hidden" name="topicid" value="{$topicid}" />
<div id="name_email">
<p><label for="author">名前:</label><br />
<input tabindex="1" id="comname" name="comname" value="{$comname}" /></p>
<p><label for="email">メールアドレス:</label><br />
<input tabindex="2" id="mailaddr" name="mailaddr" value="{$mailaddr}" /></p>
</div>
<p><label for="text">タイトル:</label> <br/>
<input tabindex="3" id="title" name="title" value="{$title}" /></p>
<p><label for="text">コメント:</label> <br/>
<textarea tabindex="4" id="body" name="body" rows="10" cols="50">{$body}</textarea></p>
<div align="center">
<input type="submit" name="preview" tabindex="5"
    value="&nbsp;確認&nbsp;" />
<input style="font-weight: bold;" type="submit" name="post"
    tabindex="6" value="&nbsp;投稿&nbsp;" />
</div>
</form>
<h2>以前のコメント</h2>
{section name=cloop loop=$comments}
<div id="c{$comments[cloop].comid}">
<h3>{$comments[cloop].title}</b>
{$comments[cloop].bodyf}
</div>
<p class="posted">投稿者 <a href="mailto:{$comments[cloop].mailaddr}">{$comments[cloop].comname}</a>  : {$comments[cloop].postdatef}</p>
{/section}
</div>
</div>
</body>
</html>

search.php

<?
require("MySmarty.class.php");
require('Settings.class.php');
require('Topic.class.php');

$keywd = $_GET['keywd'];/*GETで受け取り*/
if( $keywd=='' ){ /*POSTで受け取り*/
    $keywd = $_POST['keywd'];
}

$smarty = new MySmarty();
$settings  = new Settings;
$topic  = new Topic;

$settings->loadSettings();

$set['maintitle'] = $settings->maintitle;
$set['subtitle'] = $settings->subtitle;
$set['maxtopics'] = $settings->maxtopics;
$set['username'] = $settings->username;
$set['passwd'] = $settings->passwd;
$set['mailaddr'] = $settings->mailaddr;

if( $keywd != '' ){ /* $keywdが空でないなら */
    $topics = $topic->getTopicsSearch( $keywd ); /* getTopicsSearch(関数で処理 */
}
/* スマーティに変数として渡す */
$smarty->assign( "settings", $set );
$smarty->assign( "topics", $topics );
$smarty->assign( "keywd", $keywd );

$smarty->display( "search.html" );

?>

search.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<meta name="generator" content="http://www.movabletype.org/" />
<title>{$settings.maintitle}: 検索結果</title>
<link rel="stylesheet" href="styles-site.css" type="text/css" />
</head>
<body>
<div id="container">
<div id="banner">
<h1><a href="index.php" accesskey="1">{$settings.maintitle}</a></h1>
<h2>{$settings.subtitle}</h2>
</div>
<div class="content">
<form method="POST" action="search.php">
<h3>このサイトの検索</h3>
<p><input type="text" size="30" name="keywd" value="{$keywd}" /> <input type="submit" value="検索" /></p>
</form>
<h2>「{$settings.maintitle}」の検索結果</h2>
{section name=tloop loop=$topics }
<h3><a href="archives.php?topicid={$topics[tloop].topicid}">{$topics[tloop].title}</a></h3>
<p>{$topics[tloop].body|truncate:80:"...":true} </p>
<p class="posted">投稿: {$settings.username} | {$topics[tloop].postdatef} {$topics[tloop].posttimef} :{$topics[tloop].category}</p>
{/section}
</div>
</div>
</body>
</html>

php を使って twitter をハンドリング

http://www.usamimi.info/~ryouchi/twitter/に詳しい事が書いてあった!!

index.phpからビュー処理のindex.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title>{$settings.maintitle}</title>
<link rel="stylesheet" href="styles-site.css" type="text/css" />
</head>
<body>
<div id="container">
<div id="banner">
<h1><a href="index.php" accesskey="1">{$settings.maintitle}</a></h1>
<h2>{$settings.subtitle}</h2>
</div>
<div id="center">
<div class="content">
{section name=tloop loop=$topics max=$settings.maxtopics} /* スマーティで一ページの表示の件数だけループする */
{if $topics[tloop].title != ''}
<h2>{$topics[tloop].postdatef}</h2>
<h3 id="{$topics[tloop].topicid}">{$topics[tloop].title}</h3>
{$topics[tloop].bodyf}
<p class="posted">投稿者 {$settings.username} : <a href="archives.php?topicid={$topics[tloop].topicid}">{$topics[tloop].posttimef}</a>
| <a href="archives.php?topicid={$topics[tloop].topicid}#comments">コメント ({$topics[tloop].commentcount})</a>   :{$topics[tloop].category}
</p>
{/if}
{/section}
</div>
</div>
<div id="right">
<div class="sidebar">

<!-- <div id="calendar">
<table summary="投稿されたエントリーへのリンク付き月間カレンダー">
<caption>{$calender.datenow}</caption>
<tr>
<th abbr="日曜日">日</th>
<th abbr="月曜日">月</th>
<th abbr="火曜日">火</th>
<th abbr="水曜日">水</th>
<th abbr="木曜日">木</th>
<th abbr="金曜日">金</th>
<th abbr="土曜日">土</th>
</tr>
{$calender.view}
</table>
</div> -->
<h2>検索</h2>
<div class="link-note">
<form method="get" action="search.php">
<input type="hidden" name="IncludeBlogs" value="1" />
<label for="search" accesskey="4">このサイトの検索</label><br />
<input id="keywd" name="keywd" size="20" /><br />
<input type="submit" value="検索" />
</form>
</div>
<div id="categories">
<h2>カテゴリー</h2>
<ul>
{section name=tloop loop=$categorys} /*カテゴリの数だけループ*/
{if $categorys[tloop].category != ''}
<li><a href="cat_archives.php?catid={$categorys[tloop].catid}" title="">{$categorys[tloop].category}</a>
</li>
{/if}
{/section}
</ul>
</div>
<h2>アーカイブ</h2>
<ul>
{section name=tloop loop=$monthly}
<li><a href="monthly_archives.php?year={$monthly[tloop].yyyy}&month={$monthly[tloop].mm}" title="">{$monthly[tloop].datef}</a>
</li>
{/section}
</ul>
<h2>最近のエントリー</h2>
<ul>
{section name=tloop loop=$topics max=$settings.maxtopics}
{if $topics[tloop].title != ''}
<li><a href="archives.php?topicid={$topics[tloop].topicid}">{$topics[tloop].title}</a></li>
{/if}
{/section}
</ul>
</div>
</div>
<div style="clear: both;">&#160;</div>
</div>
</body>
</html>

2010年2月25日木曜日

管理画面記事一覧表示 topiclist.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<META http-equiv="Content-Style-Type" content="text/css">
<META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 8.0.0.0 for Windows">
<TITLE>{$maintitle}</TITLE>
</HEAD>
<BODY>
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
  <TBODY>
    <TR>
      <TD bgcolor="#336699" height="50" colspan="2">&nbsp;<B><FONT color="#ffffff" size="5">{$maintitle} 管理ツール</FONT></B></TD>
    </TR>
    <TR>
      <TD height="10" width="150" bgcolor="#3399cc" colspan="2"><IMG src="spacer.gif" width="1" height="1" border="0" alt=""></TD>
    </TR>
    <TR>
      <TD width="75%" valign="top" align="left" bgcolor="#ffffcc">
      <CENTER>
      <TABLE border="1" width="100%">
        <CAPTION><b>トピックの編集</b></CAPTION>
        <TBODY>
          <tr><td>保存日時</td><td>カテゴリ</td><td>トピックタイトル(編集)</td><td>削除</td>
<!-- {section name=tloop loop=$topics} --> /* Smartyでのループ */
          <TR>
    <!-- {if tloop < 40 }  -->/* ループ40以下の処理 */
            <TD>{$topics[tloop].postdatef}</TD> /* GETでの受け取り */
            <TD>{$topics[tloop].category}</TD>
     /* GETメソッドで渡ってきています */
            <TD><a href="edittopic.php?topicid={$topics[tloop].topicid}">{$topics[tloop].title}</a></TD>
    <!-- {else} --> /* ループ40以上の処理 */
            <TD></TD>
            <TD></TD>
            <TD><a href="topiclist.php?topicid={$topics[tloop].topicid}">次へ</a></TD>
    <!-- {/if} -->
        /* 記事の削除ON・OFF */
            <TD>{if $topics[tloop].fdelete == 1}ON{else}OFF{/if}</td>
          </TR>
<!-- {/section} -->
          <tr><td colspan=4>
      <FORM action="topiclist.php" method="POST">
      削除マークがあるトピックを本当に消す <INPUT type="submit" name="submit" value="削除実行"></FORM>
          </td></tr>
        </TBODY>
      </TABLE>
      </CENTER>
      </TD>
      <TD width="25%" bgcolor="#ffffcc" valign="top" align="left">
      <TABLE border="0" width="150" cellpadding="0" cellspacing="0">
        <TBODY>
          <TR>
            <TD align="center" height="20" bgcolor="#ffcc00"><B><a href="admin.php">管理HOME</a></B></TD>

          </TR>

          <TR>

            <TD align="center" width="150" height="5" bgcolor="#3399cc"><IMG src="spacer.gif" width="1" height="1" border="0" alt=""></TD>
          </TR>
          <TR>
            <TD align="center" height="20" bgcolor="#ffffff"><B><a href="viewsettings.php">設定変更</a></B></TD>
          </TR>
          <TR>
            <TD align="center" width="150" height="5" bgcolor="#3399cc"><IMG src="spacer.gif" width="1" height="1" border="0" alt=""></TD>
          </TR>
          <TR>
            <TD align="center" height="20" bgcolor="#ffffff"><B><a href="edittopic.php">新規トピック</a></B></TD>
          </TR>
          <TR>
            <TD align="center" width="150" height="5" bgcolor="#3399cc"><IMG src="spacer.gif" width="1" height="1" border="0" alt=""></TD>
          </TR>
          <TR>
            <TD align="center" height="20" bgcolor="#ffffff"><B><a href="topiclist.php">トピックスの管理</a></B></TD>
          </TR>
          <TR>
            <TD align="center" width="150" height="5" bgcolor="#3399cc"><IMG src="spacer.gif" width="1" height="1" border="0" alt=""></TD>
          </TR>
          <TR>
            <TD align="center" height="20" bgcolor="#ffffff"><B><a href="index.php">日記トップ</a></B></TD>
          </TR>
          <TR>
            <TD align="center" width="150" height="5" bgcolor="#3399cc"><IMG src="spacer.gif" width="1" height="1" border="0" alt=""></TD>
          </TR>
        </TBODY>
      </TABLE>
      </TD>
    </TR>
    <TR>
      <TD height="15" bgcolor="#336699">&nbsp;</TD>
      <TD bgcolor="#336699"></TD>
    </TR>
  </TBODY>
</TABLE>
</BODY>
</HTML>

topiclist.php 管理画面記事リスト

<?
require("MySmarty.class.php"); /*不正アクセスチェック*/
require('Settings.class.php');
require('Topic.class.php');


$smarty = new MySmarty();
$settings  = new Settings;
$topic  = new Topic;

session_start();
$id = $_SESSION['id'];
$pass = $_SESSION['pass'];
// ユーザチェック
if( ( $id == '' ) || ( !$settings->isValidUser($id,$pass) ) ){
    header("Location: login.php" );
    exit;
}

$settings->loadSettings();
//POSTメソッドであればフォームからの呼出です
$smarty->assign( "maintitle", $settings->maintitle );
/* 記事の削除処理になります */
if( $_SERVER['REQUEST_METHOD'] == 'POST' ){
    if( $_POST['submit'] != '' ){
    /*deleteTopics()関数で削除の処理を呼出実行*/
        $topic->deleteTopics();
    }
}
// 次へのリンクの場合、isset($_GETの値があるか調べて、is_numericで数値であるか?
if( isset($_GET['topicid'])&&is_numeric($_GET['topicid'])&&($_GET['topicid'] > 1 ) ){
    // 次に表示するトピックの条件
    $topicid = trim($_GET['topicid']);
    $sql = " where topicid < '$topicid' ";
}

$topiclist = $topic->getTopicsAll( $sql );
$smarty->assign( "topics", $topiclist );

$smarty->display( "topiclist.html" );

?>

edittopic.php トピック編集画面

<?
require("MySmarty.class.php");
require('Settings.class.php');
require('Categories.class.php');
require('Topic.class.php');


$smarty = new MySmarty();
$settings  = new Settings;
$categories  = new Categories;
$topic  = new Topic;

session_start();
$id = $_SESSION['id'];
$pass = $_SESSION['pass'];
// ユーザチェック
if( ( $id == '' ) || ( !$settings->isValidUser($id,$pass) ) ){
    header("Location: login.php" );
    exit;
}

$settings->loadSettings();
//
if( $_SERVER['REQUEST_METHOD'] == 'GET' ){
    if( !isset( $_GET['topicid'] ) || ( $_GET['topicid'] == 0 ) ) {
        // 新規トピックの編集
        $smarty->assign( "topicid", "0" );
        $smarty->assign( "title" , "" );
        $smarty->assign( "body" , "" );
        $smarty->assign( "fdelete", "" );
    } else {
        $err = $topic->loadTopic( $_GET['topicid'] );
        $err_msg = $topic->errorm;
        $smarty->assign( "topicid", $topic->topicid );
        $smarty->assign( "title" , $topic->title );
        $smarty->assign( "body" , $topic->body  );
        $smarty->assign( "fdelete", $topic->fdelete );
    }
} else {
    //ここは入力されたPOSTからのトピック情報の再表示処理
    $smarty->assign('topicid', $_POST['topicid']);
    $smarty->assign('title', $_POST['title']);
    $smarty->assign('body', $_POST['body']);
    $smarty->assign('fdelete', $_POST['fdelete']);
    //submitが無しでなければPOSTで受け取る
    if( $_POST['submit'] != '' ){
//        $err_msg = check_input();
        if( $err_msg == '' ){
            $topic->topicid = $_POST['topicid'];
            $topic->title = $_POST['title'];
            $topic->body = $_POST['body'];
            $topic->catid = $_POST['catid'];
            $topic->fdelete = $_POST['fdelete'];
            $topic->saveTopic();
            $err_msg = $topic->errorm;
        }
        if( $err_msg == '' ){
            $gen_msg = "日記書き込み完了しました。";
        }
    }
}
//edittopic.htmlに渡すSmartyでの表示の処理
$smarty->assign('categories_list', $categories->makeSelect($topic->catid));
$smarty->assign( "maintitle", $settings->maintitle );

$smarty->assign('error_message', $err_msg);

$smarty->assign('general_message', $gen_msg);

if( $topic->topicid == 0 ){
    $smarty->assign('mode', "追加");
} else {
    $smarty->assign('mode', "編集");
}
$smarty->display( "edittopic.html" );

?>

Topic.class.php

<?php

require_once "BaseDB.class.php";
// ログインをするクラス
class Topic extends BaseDB
{
    //  次章では、ここ以下を Settings.class.php へ以降。
    //  ここより 上は、BaseDB.class.php とし、各DBアクセスの基本クラスとする。
    //指定されたtopicのIDから記事を一件取得
    public function loadTopic( $topicid='' )
    {
        $qstring = "select topicid,dt,lastupdate,fdelete,catid," .
                "title,body from b_webdiary where topicid=$topicid";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
        if(!$fresult = mysql_fetch_array($qresult))
        {
            $this->errorm = "日記情報がありません。";
            $this->errors++;
            return false;
        }
       
        $this->topicid = $fresult['topicid'];
        $this->dt = $fresult['dt'];
        $this->lastupdate = $fresult['lastupdate'];
        $this->fdelete = $fresult['fdelete'];
        $this->catid = $fresult['catid'];
        $this->title = $fresult['title'];
        $this->body = $fresult['body'];
       
        return true;
    }

    public function saveTopic( $id='' )
    {
        if( $this->fdelete == '' ){ $delf = 0; } else { $delf = 1; }
        if( $this->topicid == 0 ){
            $qstring = "insert into b_webdiary (lastupdate,dt,fdelete,catid,title,body)values(" .
                "NOW(),NOW(),$delf,$this->catid,'$this->title','$this->body')";
        } else {
            $qstring = "update b_webdiary set ".
                "lastupdate = NOW(), ".
                "fdelete = $delf, ".
                "catid = $this->catid, ".
                "title = '$this->title', ".
                "body = '$this->body' ".
                " where topicid=$this->topicid";
        }
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
       
        return true;
    }
    public function getTopicsAll( $sql )
    {
        $qstring = "select d.topicid,DATE_FORMAT( d.dt,'%Y/%m/%d %T') as postdatef,d.lastupdate,d.fdelete," .
                "d.catid,b.category,d.title,d.body " .
                " from b_webdiary d left join b_categories b " .
                " on d.catid = b.catid  ".
                $sql.
                "order by d.topicid DESC limit 41";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
        $arr = $this->mysql_fetch_all( $qresult );
        return $arr;
    }
    public function deleteTopics()
    {
        $qstring = "delete from b_webdiary where fdelete = 1";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
       
        return true;
    }
    public function getTopicsCategory( $catid )
    {
        $qstring = "select d.topicid,DATE_FORMAT( d.dt,'%Y/%m/%d') as postdatef,DATE_FORMAT( d.dt,'%H:%i') as posttimef,d.lastupdate,d.fdelete," .
                "d.catid,b.category,d.title,d.body " .
                " from b_webdiary d left join b_categories b " .
                " on d.catid = b.catid where d.catid=$catid order by d.dt desc";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            echo( $this->errorm );
            return false;
        }
        $all = array();
        while( $rec = mysql_fetch_assoc($qresult) ){
            $rec['bodyf'] = ereg_replace( "\n","<br>", $rec['body'] );
            $rec['bodyf'] = ereg_replace( "<br><br>","</p>\n<p>", $rec['bodyf'] );
            $rec['bodyf'] = '<p>' . $rec['bodyf'] . '</p>';
            $rec['commentcount'] = $this->getCommentCnt( $rec['topicid'] );
           
            $all[] = $rec;
        }
        return $all;
    }

    public function getTopics( $linecount )
    {
        $qstring = "select d.topicid,DATE_FORMAT( d.dt,'%Y/%m/%d') as postdatef,DATE_FORMAT( d.dt,'%H:%i') as posttimef,d.lastupdate,d.fdelete," .
                "d.catid,b.category,d.title,d.body " .
                " from b_webdiary d left join b_categories b " .
                " on d.catid = b.catid order by d.topicid desc";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
        $all = array();
        for ($i=0; $i<$linecount; $i++ ) {
           
            if( $rec = mysql_fetch_assoc($qresult) ){
                $rec['bodyf'] = ereg_replace( "\n","<br>", $rec['body'] );
                $rec['bodyf'] = ereg_replace( "<br><br>","</p>\n<p>", $rec['bodyf'] );
                $rec['bodyf'] = '<p>' . $rec['bodyf'] . '</p>';
                $rec['commentcount'] = $this->getCommentCnt( $rec['topicid'] );
               
                $all[] = $rec;
            }
        }
        return $all;
    }
    public function getTopicsSearch( $keywd )
    {
        $qstring = "select d.topicid,DATE_FORMAT( d.dt,'%Y/%m/%d') as postdatef,DATE_FORMAT( d.dt,'%H:%i') as posttimef,d.lastupdate,d.fdelete," .
                "d.catid,b.category,d.title,d.body " .
                " from b_webdiary d left join b_categories b " .
                " on d.catid = b.catid where d.title regexp '$keywd' or d.body regexp '$keywd' order by d.dt desc";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            echo( $this->errorm );
            return false;
        }
        $all = array();
        while( $rec = mysql_fetch_assoc($qresult) ){
            $rec['bodyf'] = ereg_replace( "\n","<br>", $rec['body'] );
            $rec['bodyf'] = ereg_replace( "<br><br>","</p>\n<p>", $rec['bodyf'] );
            $rec['bodyf'] = '<p>' . $rec['bodyf'] . '</p>';
            $rec['commentcount'] = $this->getCommentCnt( $rec['topicid'] );
           
            $all[] = $rec;
        }
        return $all;
    }
   

    public function getCommentCnt( $topicid )
    {
        $qstring = "select count(*) as cnt from b_comments where topicid=$topicid";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult){
            $this->errorm = "DB Error:[$qstring]";
            $this->errors++;
            return false;
        }
        $rec = mysql_fetch_assoc($qresult);
        return $rec['cnt'];
    }
    // プロパティ参照
    function __get( $property )
    {
        return $this->$property;
    }
    // プロパティセット
    function __set( $property, $value )
    {
        $this->$property = $value;
    }
} //クラス終了





?>

2010年2月24日水曜日

BLOGテーブル設定

設定テーブル、b_
カテゴリーテーブル、
日記テーブル、
コメントテーブル、
[initdb.php]

<?
    $result = mysql_connect("localhost","●●●●","●●●●");
    if($dbh != FALSE){
        if(!mysql_select_db("●●●●",$dbh)){
            echo("データベースが存在しません。");
            exit;
        }
    //MySQL4.1への対応
    mysql_query("SET NAMES UJIS");
    //設定テーブルの作成
    $result = @mysql_query('drop table b_settings;');
    $sqlstr = "create table b_settings(id INTEGER primary key,".        //管理用ID
                "maintitle TEXT,".                    //ブログタイトル
                "subtitle TEXT,".                    //サブタイトル
                "maxtopics INTEGER,".                //最大表示トピック数
                "username TEXT,".                    //ユーザー名
                "passwd TEXT,".                        //パスワード
                "mailaddr TEXT)";                    //メールアドレス
               
    $result = mysql_query($sqlstr);
    if($result == FALSE)exit("設定テーブルが作成できません<br>");
    $sqlstr = "insert into b_settings values(1,'unknown','unknown','20','unknown','unknown','unknown')";
    $result = @mysql_query($sqlstr);
    if($result == FALSE)exit("設定テーブルに書き込めません<br>");
   
    //カテゴリテーブルの作成
    $result = @mysql_query('drop table b_categories;');
    $sqlstr = "create table b_categories(catid INTEGER primary key AUTO_INCREMENT,category TEXT)";
    $result = @mysql_query($sqlsttr);
    if($result == FALSE)exit("カテゴリテーブルが作成できません<br>");
    $sqlstr = "insert into b_categories values(1,'General')";
    $result = @mysql_query($sqlstr);
    if($result == FALSE)exit("カテゴリテーブルにアクセスできません<br>");
   
    //日記テーブルの作成
    $result = @mysql_query('drop table b_webdiary');
    $sqlstr = "create table b_webdiary(topicid int PRIMARY KEY auto_increment,".   //トピックID
                "lastupdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,". //最終更新日時
                "dt TIMESTAMP,".    //ポストされた日時
                "fdelete int,".        //削除マーク
                "catid int,".        //トピックカテゴリID
                "title TEXT,".        //トピックのタイトル
                "body TEXT)";        //トピックの本文
            $result = @mysql_query($sqlstr);
            if($result == FALSE)exit("日記テーブルが作成できません<br>");
   
    $result = @mysql_query('drop table b_comments;');
    $sqlstr = "create table b_comments(comid INTEGER primary key AUTO_INCREMENT,".
                //コメントID
                "topicid INTEGER,".    //コメントの親トピックID
                "dt TIMESTAMP,".    //ポストされた日時
                "ipaddr TEXT,".        //コメントを投稿したリモートIPアドレス
                "hostname TEXT,".    //同ホスト名
                "comname TEXT,".    //ポストした人の名前
                "mailaddr TEXT,".    //同メールアドレス
                "title TEXT,".        //コメントのタイトル
                "body TEXT)";        //コメントの本文
    $result = mysql_query($sqlstr);
    if($result == FALSE)exit("コメントテーブルが作成できません<br>");
        echo("テーブルの新規作成に成功しました");
        mysql_close($dbh);
       
        //管理画面初期表示
/*        session_start();
        $_SESSION['id'] = "unknown";
        $_SESSION['pass'] = "unknown";
        header("Location: admin.php");
       
    }else(){
        echo("データベースファイルの作成に失敗しました。");
        exit();
    }
?>

2010年2月22日月曜日

mysql php でDB接続

    public static function getProducts($store){
        $aryProduct=array();
/* オリジナル_2_START */
        /* サーバに接続 */
        $my_Con = mysql_connect("localhost","dbpal","password","dbpal");
        if ($my_Con == false){
            die("Mysqlの接続に失敗しました");
        }
        /* DBに接続 */
        if(!mysql_select_db("db0btckawasaki",$my_Con)){
            die("BDの接続に失敗しました");
        }
        /* テーブルからの詠みこみ */
        $my_Row_2 = mysql_query("SELECT * FROM ec_product WHERE stor=".$store,$my_Con);
        $row_2 = mysql_fetch_array($my_Row_2);
        var_dump($row_2."row_2");
        print_r ($row_2);

2010年2月18日木曜日

//「storeCart.php」はカートいれるボタンを押すと実行されます。
//「store.php」の下記<input type="hidden" name="cnt" value="{$smarty.foreach.loop.total}" />の情報があるだけ受け取り、ループします。
//
<?php
require_once("CheckUtil.class.php");
require_once("Product.class.php");
$aryPro=array();
for($i=1;$i<=$_POST['cnt'];$i++){
    $objPro=new Product();
    $objPro->setCode($_POST['code'.$i]);
    $objPro->setNumber($_POST['num'.$i]);
    $aryPro[]=$objPro;
}
//入力値のチェックをし
$objChk=new CheckUtil();
foreach($aryPro as $obj){
    $objChk->rangeCheck($obj->getNumber(),999,0,"個数");
}
//入力値のチェックをし 
$objChk->showResult();
session_start();
foreach($aryPro as $obj){
    if(is_null($obj->getNumber())===FALSE){
//ここでは、$_SESSIONにgetCode()とgetNumber();で関係を応用しています、カートにいれた
//個数を保持しています。

        $_SESSION[$obj->getCode()]=$obj->getNumber();
    }
}
//account.php作成後に直す
//header("Location: account.php");
header("Location: none.html");

?>

//「store.php」では「session_start ()」でセッションの情報も取得している
//「Puroduct.class.php」で製品ナンバのキーに個数が入っています
$objPro->setNumber($_SESSION[$row['code']]);

store.php?stor=1の処理

「store.php」
<?php
//共通クラスの呼び出し
require_once("Product.class.php");
//Smartyの呼び出し
require_once("MySmarty.class.php");
//セッションのスタート
session_start();
// MySmartyの「$o_smarty」に「getProducts」クラスを呼び出して取得した、
//($_GET['stor'])を「store.tpl」に渡しています
$o_smarty=new MySmarty();
$o_smarty->assign("products",Product::getProducts($_GET['stor']));
$o_smarty->display("store.tpl");
?>



「store.tpl」では、上記の($_GET['stor'])の値を獲得し、

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>商品選択</title>
<!-- {literal} -->
<script language="JavaScript" src="./CheckUtil.js"></script>
<script language="JavaScript">
<!-- 各商品の購入個数の範囲をチェック -->
<!--
function chk(part){
strErr="";
    strErr+=rangeCheck(part.value,999,0,"個数");
    if(strErr==""){
        return true;
    }else{
        window.alert(strErr);
        return false;
    }
}
//-->
</script>
<!-- {/literal} -->
</head>
<body>
<form method="POST" action="storeCart.php" name="fm" onsubmit="return chk()">
<!-- <form method="POST" action="storeCart.php"> -->
<input type="submit" value="カートに入れる" />
<input type="reset" value="戻す" />
<table border="0" align="left" width="800" cellspacing="15">
<tr>
//Smatyの構文でproductの情報があるだけループさせます。
<!-- {foreach name=loop from=$products item=product} -->
    <td valign="top">
    <table border="1" height="180" bordercolordark="#FFffFF">
    <tr>
    <td valign="top">
<!--         {if $product->getPicture() eq ""}  -->
            <img src=".img/welcome.gif" alt="{$product->getName()}(画像なし)"
                width="100" height="100" />
<!--        {else} -->
            <img src="./img/{$product->getPicture()}"
                alt="{$product->getName()}"
                height="100" width="100" />
<!--        {/if} -->
    </td>
    <td valign="top" bgcolor="#ffffee">
        <div style="font-weight:bold;">{$product->getName()|escape}</div>
        <div align="right">
        ({$product->getPrice()}円)</div>
        <hr />
        {$product->getInfo()|escape}
        <br />
        <div align="right">
            <input type="text" name="num{$smarty.foreach.loop.iteration}"
                value="{$product->getNumber()|default:"0"}"
                size="4" maxlength="3" style="text-align:right;ime-mode:disabled;"
                onchange="return chk(this)" />個</div>
            <input type="hidden" name="code{$smarty.foreach.loop.iteration}"
                value="{$product->getCode()}" />
    </td>
    </tr>
    </table>
    </td>
        </tr><tr>
<!-- {/foreach} -->
</table>
<input type="hidden" name="cnt" value="{$smarty.foreach.loop.total}" />
</form>
</body>
</html>




//「Product.class.php」はProductを呼び出す「store.php」に商品テーブルの情報を渡す値を処理//しています。

<?php
class Product {
    public function __construct(){ /* コンストラクタ */ }
    /* 商品情報を格納するプライベート変数を宣言 */
    private $_code;
    private $_name;
    private $_price;
    private $_picture;
    private $_info;
    private $_number;
    /* プライベート変数にアクセスするためのアクセサメソッドを宣言 */
    public function getCode()   {return $this->_code;}
    public function getName()   {return $this->_name;}
    public function getPrice()  {return $this->_price;}
    public function getPicture(){return $this->_picture;}
    public function getInfo()   {return $this->_info;}
    public function getNumber() {return $this->_number;}
    public function setCode($code)      {$this->_code=$code;}
    public function setName($name)      {$this->_name=$name;}
    public function setPrice($price)    {$this->_price=$price;}
    public function setPicture($picture){$this->_picture=$picture;}
    public function setInfo($info)      {$this->_info=$info;}
    public function setNumber($number)  {$this->_number=$number;}
    /* getProductsメソッドは、指定された店舗IDをキーに商品情報を検索 *
     * その結果をProductオブジェクトの配列として返す                 */

    public static function getProducts($store){
//商品情報を入れる配列を準備し、
        $aryProduct=array();
        $db=new mysqli("localhost","dbpal","password","dbpal");
        //MySQL4.1への対応
        $db->query("SET NAMES UJIS");
//sql文は店舗番号に当てはまる商品情報を取り出す。
        $rs=$db->query("SELECT * FROM ec_product WHERE stor=".$store);
//取り出した商品情報を一つ一つループします。
        while($row=$rs->fetch_array(MYSQLI_ASSOC)){
//「$objPro」の中に格納し 「$aryProduct[]」渡し、
            $objPro=new Product();
            $objPro->setCode($row['code']);
            $objPro->setName($row['nam']);
            $objPro->setPrice($row['pric']);
            $objPro->setPicture($row['pic']);
            $objPro->setInfo($row['info']);
            $objPro->setNumber($_SESSION[$row['code']]);
            $aryProduct[]=$objPro;
        }
        $db->close();
//最後に呼び出し元である「store.php」に情報を渡します。
        return $aryProduct;
    }
    public static function getProductsInCart(){
        $aryProduct=array();
        $db=new mysqli("localhost","dbpal","password","dbpal");
        //MySQL4.1への対応
        $db->query("SET NAMES UJIS");

        $rs=$db->query("SELECT * FROM ec_product ORDER BY code ASC");
        while($row=$rs->fetch_array(MYSQLI_ASSOC)){
            $code=$row['code'];
            if($_SESSION[$code]!="" && $_SESSION[$code]!=0){
                $objPro=new Product();
                $objPro->setCode($row['code']);
                $objPro->setName($row['nam']);
                $objPro->setPrice($row['pric']);
                $objPro->setNumber($_SESSION[$row['code']]);
                $aryProduct[]=$objPro;
            }
        }
        $db->close();
        return $aryProduct;
    }
}
?>

商品テーブル SQL文

-- 『ec_product』テーブルの作成
CREATE TABLE ec_product (
  code varchar(10) PRIMARY KEY,
  nam varchar(255),
  pric int(11),
  stor int(11),
  pic varchar(100),
  info text
);
上から
「code」は商品コード
「nam」は名前
「pric」は値段
「stor」は店舗コードです
「pic」は画像
「info」は商品紹介文
 下記が商品情報テーブルに流すSQL文になります。


INSERT INTO ec_product VALUES ('AD001',
'通常版パッケージ Adobe Acrobat 7.0J com PRO Win',
54800,1,'./adobe/acro7_pro_left_boxshot.gif',
'1ページの簡単なレポートから、見ばえの良いレイアウトが施された提案書まで。Adobeィ PageMaker(R) 7.0は提案書、レポート、企画書など説得力を必要とするビジネスドキュメントを効率よく作成することができるページレイアウトツールです。直感的な操作感と他のアドビ製品との連携により手早く高品質なレイアウトを行うことができます。'
);
INSERT INTO ec_product VALUES ('AD002',
'通常版パッケージ Adobe PageMaker 7.0 com Win',
46200,1,'./adobe/pagemaker7.0.jpe',
'Acrobat 7.0スタンダード版に加え、強力な機能をプラス!Acrobatのスタンダードバージョンの機能に加え、専門性の高い文書のやり取り、文章チェックや注釈、出力まで、ビジネス・エンジニア・クリエイティブ・プロフェッショナルが必要とする、より高度な機能を提供するソフトウェアです。'
);
INSERT INTO ec_product VALUES ('AD003',
'通常版パッケージ Adobe Creative Suites 2 Premium Win  ',
188000,1,'./adobe/cs2_prem_left_boxshot.jpe',
'Photoshop、Illustrator、InDesign、GoLive、Acrobat。
プロフェッショナルのためのグラフィックデザインソフトをオールインワン! Adobe(R) Creative Suite2は、アドビの最新のクリエイティブツールを統合し、さらに革新的なファイル管理機能や豊富なデザインリソースを組み合わせた、先進のトータルデザイン環境です。印刷およびWeb用コンテンツの制作・配信がいっそう効率化され、またAdobe PDF(Portable Document Format)によるスムーズで安定した校正・出力ワークフローを実現できます。内容:Adobe Photoshop(R) CS2/Adobe Illustrator(R) CS2/Adobe InDesign(R) CS2/Adobe GoLive(R) CS2/Adobe Acrobat(R) 7.0 Professionalとなっております。'
);
INSERT INTO ec_product VALUES ('AD004',
'通常版パッケージ Adobe Photoshop CS 2 Edu Win  ',
88000,1,'./adobe/phsp_cs2_left_boxshot.jpe',
'写真加工・映像の画像処理・自由な描画ツールを利用した絵画・・・プロフェッショナルが利用する、画像編集ソフトウェアのスタンダード。 デザインに携わるなら必ずと言っていいほどの基本ソフト。  Adobe(R) Photoshop(R) CS2は、メディアを超えたデジタル画像編集のプロフェッショナルスタンダードとして、さらなる進化を遂げました。業界をリードする革新的な新機能を搭載し、Adobe ImageReady(R) CS2との連携もさらに強化。グラフィックデザイナーやフォトグラファー、Web プロフェッショナル、ビデオやフィルム制作者が求める最高品質の画像を、かつてないほど効率的に制作、管理することができます。 '
);
INSERT INTO ec_product VALUES ('AD005',
'通常版パッケージ Adobe Illustrator CS 2 Edu Win  ',
79500,1,'./adobe/ai_cs2_left_boxshot.jpe',
'印刷業界のみならず、イラスト制作、素材制作などでも活躍する、
スタンダード・ベクター描画ソフトウェア。 Adobe(R) Illustrator(R) CS2は、印刷、Web、その他あらゆるメディアに向けた最高品質のグラフィックを作成するための業界標準ツールです。新しい3D 効果、刷新された文字機能、Adobe PDF とのシースムレスな統合、強化された印刷オプションなど、多くの革新的な機能を搭載。さらに、全般にわたるパフォーマンスの向上により、アイデアをこれまで以上にすばやく、思いのままにビジュアルに表現することができます。そして他のアドビ製品との強力な連携により、完成したアートワークを、どんなメディアにも効率的に配信することができます。 '
);
INSERT INTO ec_product VALUES ('AD006',
'通常版パッケージ Adobe InDesign CS 2 Edu Win  ',
88000,1,'./adobe/ind_cs2_left_boxshot.jpe',
'プロフェッショナルのDTPレイアウトソフト。Adobe社製品との連携でさらに使いやすく!  Adobe(R) InDesign(R) CS2は、クロスメディアに向けたプロフェッショナルなページレイアウトとデザインのための新しいスタンダードです。多くの革新的な機能とインタフェイスの改良により、今まで以上に斬新なアイデアをもって、すばやくページを作成し、どんな印刷環境においても確実に出力することができます。また、Adobe Photoshop(R)、Adobe Illustrator(R)、Adobe Acrobat(R)と密接に連携しながら、一貫した高品質で効率的なパブリッシングワークフローを実現します。  '
);
INSERT INTO ec_product VALUES ('AD007',
'通常版パッケージ Adobe GoLive CS 2 Edu Win  ',
24800,1,'./adobe/gol_cs2_left_boxshot.jpe',
'Adobe社が提供する、Web制作ソフトウェア。直感的に制作できるところがポイント。 Adobe (R)GoLive (R)CS2は、Webサイトの設計からページデザイン、管理に必要なすべての機能を提供するプロフェッショナル向けのツールです。 Adobe Photoshop(R)、Adobe Illustrator(R)のネイティブファイル、Adobe PDFファイルを、アプリケーションを切り替えることなくGoLive内で直接編集できるなど、作業効率が大幅アップ。Adobe InDesign(R)の印刷用データを共有し、複数のデバイスにわたる真のクロスメディアパブリッシングを実現できます。 '
);
INSERT INTO ec_product VALUES ('AD008',
'通常版パッケージ Adobe After Effects 6.5J Edu スタンダード Win  ',
148000,1,'./adobe/after6sta.jpe',
'PCレベルでの映像制作ソフトウェアでは最高峰のソフトウェア。 After Effectsは、映画やテレビ、ゲーム、Webなどで配信されるモーショングラフィックスやビジュアルエフェクトの制作ツールとして、世界中で高い評価を得ているツールです。Standard Version は、Adobe After Effectsの基本的な機能と2D、3Dコンポジション環境、エフェクトツールを搭載しています。'
);
INSERT INTO ec_product VALUES ('AD009',
'アップグレード版 Adobe After Effects 6.5J Edu PRO Win  ',
68000,1,'./adobe/after6.jpe',
'PCレベルでの映像制作ソフトウェアでは最高峰のソフトウェア。 プロバージョンでは、 強力かつ重要なエフェクトツールを搭載!  After Effectsは、映画やテレビ、ゲーム、Webなどで配信されるモーショングラフィックスやビジュアルエフェクトの制作ツールとして、世界中で高い評価を得ているツールです。 Professional Version は、スタンダードバージョンの機能に加え、各種強力なエフェクトツールを搭載し、プロフェッショナルのニーズに応えます!'
);
INSERT INTO ec_product VALUES ('AD010',
'通常版パッケージ Adobe Premiere Pro1.5 For Win Edu  ',
88000,1,'./adobe/prem_pro.jpe',
'PCレベルでの映像制作ソフトウェアでは最高峰のソフトウェア。プロフェッショナルのために用意された各種機能。 Adobe Premiere Pro 1.5は、よりプロフェッショナル向けの操作感とインタフェイス、多くの革新的な機能を搭載し、全く新しいノンリニアビデオ編集ツールとして生まれ変わりました。プロジェクトの長さに関係なく、フレーム単位での精緻なコントロールによる正確な結果の取得が可能で、様々なビデオフォーマットの入出力にも対応。Adobe Photoshop、After Effectsなどのアドビ製品と連携。Adobe Encore DVDによってAVIやMPEG出力にも対応しています。Windows XP専用。  '
);


/******************************
* Macromediaショップのデータ  *
******************************/
INSERT INTO ec_product VALUES ('MM001',
'Macromedia STUDIO WITH FLASH PRO 2004 J Com Hybrid   ',
126000,2,'./macromedia/mx2004.jpe',
'プロのWeb制作に必携のソフトウェアが揃ったパッケージ!
 の Dreamweaver、Flash、Fireworks、FreeHand がひとつになった Macromedia Studio MX 2004 は、Web 開発のすべてを網羅する Web プロフェッショナル用オールインワンパッケージです。'
);
INSERT INTO ec_product VALUES ('MM002',
'Macromedia STUDIO MX 2004 J Com Hybrid  ',
102900,2,'./macromedia/mx2004.jpe',
'プロのWeb制作に必携のソフトウェアが揃ったパッケージ!
さらにFlashは、上位のFlash MX Professional 2004にパワーアップ!
 の Dreamweaver、Flash、Fireworks、FreeHand がひとつになった Macromedia Studio MX 2004 は、Web 開発のすべてを網羅する Web プロフェッショナル用オールインワンパッケージです。Studio MX 2004 は、Flash MX Professional 2004 とのセットでお求めいただくとこもできます。 '
);
INSERT INTO ec_product VALUES ('MM003',
'Macromedia Dreamweaver MX 2004 J Com Hybrid   ',
50400,2,'./macromedia/mx2004dw.jpe',
'業界標準とも言える、ホームページレイアウトソフト  
Dreamweaver MX 2004 は、ビジュアルレイアウトツール、各種アプリケーション開発機能、コーディング作業環境をすべて搭載したプロフェッショナル Web サイトおよび Web アプリケーション開発ツールです。 の MX 2004 では、CSS を採用したデザイン開発作業のための各種機能を搭載し、あらゆる Web サイトを容易に作成 / 管理することができます。 
'
);
INSERT INTO ec_product VALUES ('MM004',
'Macromedia Fireworks MX 2004 J Com Hybrid   ',
41790,2,'./macromedia/mx2004fw.jpe',
'Web制作に最適のグラフィック制作ソフト
   Fireworks MX 2004 には、簡単なボタン作成から最先端ロールオーバーの構築にいたるまで、Webプロフェッショナルの制作作業に必要なツールがすべて揃っています。また、ベクター、ビットマップを問わないあらゆるグラフィックフォーマットの読み込みや編集と、Flash、Dreamweaver、さらにはサードパーティー製アプリケーションへの簡単な書き出しが可能です。'
);
INSERT INTO ec_product VALUES ('MM005',
'Macromedia FLASH MX 2004 J Com Hybrid ',
60900,2,'./macromedia/mx2004flpro.jpe',
'これからのWeb業界で強力な武器!
さらに、アニメーションやインターフェイス、Webに限らず用途は多彩!
    Macromedia Flash を使用すれば、グラフィック、オーディオ、テキスト、ビデオなど、あらゆるメディアが統合された、インパクトのある魅力的なコンテンツとユーザー体験を構築できます。しかも、作成したコンテンツは世界中でインターネット接続された PC の 97% に加え、広く普及している各種の非 PC デバイスでも再生できます。  '
);
INSERT INTO ec_product VALUES ('MM006',
'Macromedia FLASH MX Professional 2004 J Com ',
88200,2,'./macromedia/mx2004fl.jpe',
'通常のFlash MX 2004の機能に加えて、高度な機能を装備!
    高度な Flash コンテンツ、アプリケーションおよびデジタルビデオ開発ツール Flash MX Professional 2004 には、Flash MX 2004 の全機能に加えて次の高度機能を装備しています。 パワフルな開発環境 Flash MX Professional のカスタマイズ可能な開発環境を使用して、効果的なデータ連動型アプリケーションを素速く構築できます。 プロフェッショナル仕様のビデオ機能 インタラクティビティやカスタム作成したインターフェイスの付いた高品質デジタルビデオを全世界に配信できます。 モバイルデバイスを含む広範なコンテンツ配信 作成したアプリケーションは、Web や Windows、Macintosh、Unix、PDA、さらに携帯電話に向けて配信できます。しかも、コンテンツ制作時には、配信先のプラットフォーム特有のスキルを必要としません。'
);

/**************************
* Officeショップのデータ  *
***************************/
INSERT INTO ec_product VALUES ('OF001',
'Microsoft Office 2003 Personal    ',
38800,3,'./office/office2003_01.jpe',
'今やビジネスシーンに欠かせない、WordやExcelなどのソフトウェアパッケージ!  
Microsoft Office2003 Personalは、
Word、Excel、Outlook、HomeStyle+、IME、PictureManager、Document、Imaging/Scanning
などを統合したパッケージです。
'
);
INSERT INTO ec_product VALUES ('OF002',
'Microsoft Office 2003 Personal Upgrade    ',
32300 ,3,'./office/office2003_02.jpe',
'今やビジネスシーンに欠かせない、WordやExcelなどのソフトウェアパッケージ! アップグレード版。
   Microsoft Office2003 Personalは、
Word、Excel、Outlook、HomeStyle+、IME、PictureManager、Document、Imaging/Scanning   などを統合したパッケージです。(こちらの商品は、アップグレード版になります。) '
);
INSERT INTO ec_product VALUES ('OF003',
'Microsoft Word 2003  ',
24759,3,'./office/word2003.jpe',
'文書作成に限らず、多くの場面で利用される
日本語ワードプロセッサソフト。
 Microsoft Word 2003は、文書の作成はもちろんのこと、企業でのプロジェクトなどにおける利用を踏まえチームでの効果的なドキュメントの制作を実現しています。ドキュメント作成機能や、閲覧機能が大幅に強化され、XMLのサポートにより、XMLを使ったビジネスソリューションのクライアントとして活用することが可能です。また、文書保護機能により、文書の書式や編集の種類に制限をかけることができるなど、共同作業におけるドキュメントのセキュリティにも配慮されています。  '
);
INSERT INTO ec_product VALUES ('OF004',
'Microsoft Excel 2003  ',
25600,3,'./office/excel2003.jpe',
'ビジネスシーンでかかされることのない、
統合型表計算ソフトウェア。
  Microsoft Excel 2003は、強化された計算分析機能やインターフェイスによって、スムーズなデータ活用が可能となっています。リスト機能や統計解析機能の強化も施され、よりビジネスシーンでかかせないソフトウェアとなっています。 '
);
INSERT INTO ec_product VALUES ('OF005',
'Microsoft Access 2003  ',
27090,3,'./office/access2003.jpe',
'多様なデータの種類・ソースをサポートする
強力なデータベース管理ソフトウェア。
 Microsoft Access 2003は、強力なデータベース情報管理ソフトです。多様なデータの種類・ソースをサポートする強力なデータベース環境を構築し、管理することができます。 '
);
INSERT INTO ec_product VALUES ('OF006',
'Microsoft PowerPoint 2003  ',
21840,3,'./office/powerpoint2003.jpe',
'表現力豊かなプレゼンテーション作成に。
ビジネスには必須のプレゼンテーションソフトウェア。
  Microsoft PowerPoint 2003は、マルチメディアやアニメーションを活用した、表現力豊かなプレゼンテーション資料を作成できるプレゼンテーションソフトウェアです。資料作成機能の強化や操作性の向上などが図られ、活用の幅とプレゼンテーションに与えるインパクトが広がりました。'
);
INSERT INTO ec_product VALUES ('OF007',
'Microsoft FileMaker Pro 6 Win',
39800,3,'./office/file_win.jpe',
'プロフェッショナルのパッケージ内容に、FrontPage2002を追加した、
システム開発などに必要なパッケージ!
  ファイルメーカーPro 6は、定評の使いやすさでニーズに合ったソリューションを迅速に作成・共有できる代表的なデータベースソフトウェアです。Microsoft Officeともスムーズに連携。すぐに役立つ20種類以上の新しいテンプレートを搭載。検索/置換、対象レコードの絞り込み/拡大、書式のコピー/貼り付け、簡単なクリック操作によるデジタルイメージの一括インポートなど、新機能も充実。情報の収集、管理、共有や生産性の向上に理想的なソフトウェアです。 '
);

/**********************************
* ユーティリティショップのデータ  *
**********************************/
INSERT INTO ec_product VALUES ('UT001',
'TREND Micro ウイルスバスター2005 インターネット セキュリティ ',
6250 ,4,'./util/virusbuster.jpe',
'ネットに潜む危険から、あなたを守るインターネットセキュリティソフト。
ウイルス・ハッカー/不正侵入対策はもちろん、クレジットカード番号やパスワードなどのあなたの大切な個人情報の流出を防ぎます。 また、迷惑メール、複数台パソコンの管理機能やURLフィルタリング機能も搭載し、インターネットの安全と安心を提供する総合セキュリティソフトです。'
);
INSERT INTO ec_product VALUES ('UT002',
'SYMANTEC Norton Internet Security ',
7580,4,'./util/norton_in_sec.jpe',
'ウイルス、ハッカーからの攻撃、
個人情報の流出もこれ一つでブロック  
Norton Internet Security? 2005 (ノートン・インターネットセキュリティ 2005) はウイルス対策、ハッカーの攻撃からの防御、プライバシー保護にも不可欠なブロードバンド時代の必携セキュリティ・ソフトです。Norton AntiVirus (ノートン・アンチウイルス) は、世界で最も信頼性の高いウイルス対策ソフトです。* Norton Personal Firewall (ノートン・パーソナルファイアウォール) は、個人情報などのプライバシーを保護しながら、悪質なハッカーの侵入をシャットアウトすることができます。プライバシー制御、Norton AntiSpam (ノートン・アンチスパム)、保護者機能は、その他の一般的なオンラインのリスクからユーザーとユーザーの家族を守ります。'
);
INSERT INTO ec_product VALUES ('UT003',
'roxio Easy CD & DVD Creator 6 ',
12800,4,'./util/easycc6.jpe',
'Easy CD&DVD CreatorTM 6には、音楽、データ、写真、ビデオをパソコン上で最大限に活用し、CD/DVDメディアへのレコーディングまでを強力にサポートするツールが詰め込まれています。これ1本があればデータのバックアップや音楽CDの作成はもちろん、デジカメ写真やビデオもパソコンに取り込んで自在に活用可能なことで、デジタルライフをさらに広げてくれます。'
);

php 正規表現

CSVとTSV区切りのとき、
SQLliteはCSV区切りでは受け取れない、
?は0回または1回の繰り返しで表示されていたらです。
”,”を検索するには、「”?、”?」で検索できます。

ereg("^[0-9]{4,4}/[0-9]{2}/[0-9]{2}",$strVal)
ereg で文字列の検索や置き換えを行う
*解説「^」ハットマークは文字列の先頭にマッチする、
[0-9]{4,4}は0~9にマッチする4回の繰り返し、 

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm 
に詳しくあります。

2010年2月17日水曜日

//チェックしてます。
require_once("CheckUtil.class.php");
require_once("MySmarty.class.php");
require_once("Customer.class.php");
$aryPro=array();
$objCst=new Customer();
$objCst->setName($_POST['nam']);
$objCst->setZip($_POST['zip']);
$objCst->setAddress($_POST['address']);
$objCst->setTel($_POST['tel']);
$objChk=new CheckUtil();
$objChk->requiredCheck($objCst->getName(),"名前");
$objChk->lengthCheck($objCst->getName(),15,"名前");
$objChk->requiredCheck($objCst->getZip(),"郵便番号");
$objChk->regExCheck($objCst->getZip(),"^[0-9]{3}-[0-9]{4}$","郵便番号");
$objChk->requiredCheck($objCst->getAddress(),"住所");
$objChk->lengthCheck($objCst->getAddress(),50,"住所");
$objChk->requiredCheck($objCst->getTel(),"TEL");
$objChk->HanCheck($objCst->getTel(),"TEL");
$objChk->lengthCheck($objCst->getTel(),15,"TEL");
//showResult();で問題がなければメッセージが表示されない
$objChk->showResult();
$MySQLi = mysqli_init( );
$MySQLi->options( MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT=0" );
$db=new mysqli("localhost","dbpal","password","dbpal");
$db->query("BEGIN");
$intRst=$objCst->writeCustomer($db);
if($intRst===FALSE){
    $db->query("ROLLBACK");
} else {
    //MySQL4.1への対応
    $db->query("SET NAMES UJIS");
    $stt=$db->prepare("INSERT INTO ec_master(code,num,person) VALUES(?,?,?)");
    $stt->bind_param("sss",$code,$num,$person);
    for($i=0;$i<$_POST['cnt'];$i++){
        $code=$_POST['code'.$i];
        $num=$_POST['num'.$i];
        $person=$intRst;
        $flag=$stt->execute();
        if($flag===FALSE){
            $db->query("ROLLBACK");
            break;
        }
    }
    $db->query("COMMIT");
}
session_start();
session_destroy();
$o_smarty=new MySmarty();
$o_smarty->display("thanks.tpl");
?>

phpで入力値の判定

require_once("MySmarty.class.php");
class CheckUtil {
    //エラーのプライベート変数
private $error;
    //からの配列で初期化
    function __construct(){
        $this->error=array();
    }
    //エラー情報を読み取る
    public function getError(){
        return $this->error;
    }
    //エラー情報を書き込む
    public function setError($strErr){
        $this->error[]=$strErr;
    }
//showResult()関数でエラー画面に表示する
   public function showResult(){
        if(count($this->error)>0){
            $o_smarty=new MySmarty();
//            $o_smarty->template_dir="../templates";
            $o_smarty->assign("errors",$this->error);
            $o_smarty->display("error.tpl");
            exit();
        }
    }
//trimは先頭および末尾の空白文字を取り除く
//===は型の比較を行っています。
    public function requiredCheck($strVal,$strErr) {
        if(is_null($strVal) || trim($strVal)==''){
            $this->error[]=$strErr."は必須入力です";
        }
    }
    public function lengthCheck($strVal,$intMax,$strErr){
        if(is_null($strVal)===FALSE && trim($strVal)!=''){
            if(mb_strlen($strVal)>$intMax){
                $this->error[]=$strErr."は".$intMax."桁以下で入力してください";
            }
        }
    }
    public function ZenCheck($strVal,$strErr){
        if(is_null($strVal)===FALSE && trim($strVal)!=''){
            if(mb_strlen($strVal)*2!=strlen($strVal)){
                $this->error[]=$strErr."は全角(2バイト文字)で入力してください";
            }
        }
    }
    public function HanCheck($strVal,$strErr){
        if(is_null($strVal)===FALSE && trim($strVal)!=''){
            if(mb_strlen($strVal)!=strlen($strVal)){
                $this->error[]=$strErr."は半角(1バイト文字)で入力してください";
            }
        }
    }
    public function numberTypeCheck($strVal,$strErr){
        if(is_null($strVal)===FALSE && trim($strVal)!=''){
            if(is_numeric($strVal)===FALSE){
                $this->error[]=$strErr."は数値で入力してください";
            }
        }
    }
    public function dateTypeCheck($strVal,$strErr){
        if(is_null($strVal)===FALSE && trim($strVal)!=''){
            if(!ereg("^[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}$",$strVal)){
                $this->error[]=$strErr."は日付形式で入力してください";
            } else{
                $aryStr=split("/",$strVal);
                if($strVal!=
                    date("Y/m/d",mktime(0,0,0,$aryStr[1],$aryStr[2],$aryStr[0]))){
                    $this->error[]=$strErr."は正しい日付で入力してください";
                }
            }
        }
    }
    public function dateNumberTypeCheck($strYear,$strMonth,$strDay,$strErr){
        if(is_numeric($strYear)===FALSE ||
            is_numeric($strMonth)===FALSE || is_numeric($strDay)===FALSE){
            $this->error[]=$strErr."は数値で入力してください";
        }
        $intTmp=mktime(0,0,0,$strMonth,$strDay,$strYear);
        if(date("Y",$intTmp)!=$strYear ||
            date("m",$intTmp)!=$strMonth || date("d",$intTmp)!=$strDay){
            $this->error[]=$strErr."は正しい日付形式で入力してください";
        }
    }
    public function rangeCheck($strVal,$intMax,$intMin,$strErr){
        if(is_null($strVal)===FALSE && trim($strVal)!=''){
            if(is_numeric($strVal)===FALSE){
                $this->error[]=$strErr."は数値で入力してください";
            }
            if($strVal<$intMin || $strVal>$intMax){
                $this->error[]=$strErr."は".$intMin."以上、かつ"
                    .$intMax."以下で入力してください";
            }
        }
    }
    public function regExCheck($strVal,$strPtn,$strErr){
        if(is_null($strVal)===FALSE && trim($strVal)!=''){
            if(!ereg($strPtn,$strVal)){
                $this->error[]=$strErr."を正しい形式で入力してください";
            }
        }
    }
//二つの数字に大小の比較compareCheck()
   public function compareCheck($strVal1,$strVal2,$strErr1,$strErr2){
        if(is_null($strVal1)===FALSE && trim($strVal1)!=''
            && is_null($strVal2)===FALSE && trim($strVal2)!=''){
            if($strVal1>=$strVal2){
                $this->error[]=$strErr1."は".$strErr2."より小さい値を指定してください";
            }
        }
    }
//duplicateCheck()はsqlとphpを連係して、データベースでのある値の存在チェック
    public function duplicateCheck($sql,$strErr) {
        $db=new mysqli("localhost","php","php","sample");
        $rs=$db->query($sql);
        if(!is_null($rs->fetch_array(MYSQLI_ASSOC))){
            $this->error[]=$strErr."が重複しています";
        }
    }
}
?>

phpでのjavascript

リテラルタグで囲んでください

<form>タグでjavascriptを呼び出すには、onsubmit="****"でよびだします

プリペアドクエリとバインド変数

引数のみ異なる同一のクエリを複数回行う、
構文解析が1回で済み、実行効率の向上が期待できる。

①.perpare()メソッド  クエリの解析が1回で済む、
//もし変数が①の中にあれば.
②bind_param()でバインドする変数を定義する、変数のみをバインドする、

③execute()メソッドでクエリを実行 、バインドした変数を当てはめクエリを実行する

④bind_result()メソッド 結果を代入する変数を定義する

mysql拡張サポート

mysql拡張サポートはPHP5の新機能です。

mysql_関数を同等+新機能が利用可能、
mysqliを使う、

アクセサメソッドの利用

class Store {
    public function getId()   {return $this->_id;}
    public function setId($id)   {$this->_id=$id;}
}

get***のメソッドは読み取り専用
set***のメソッドは書き込み専用
で両方もつ場合は読み書き両方できます。

★利点
①読み書きに可否を明確にできる
②設定時に指定されたデータの妥当性を確認できる
③参照時にデータに変換が出来る、get***メソッドで値の取得時に変更する等

login.class.php 部品部品に分かれて書かれている

// ログインをするクラス
class Login
{
    // メンバ変数
    public $errorm;      // エラーメッセージ
   
    private $db;      // mysql_connect関数の結果
   
    // コンストラクタ
    function __construct(){
        // MySQLを開く
        if(!$this->db = @mysql_connect("localhost","id","password"))
        {
            $this->errorm = "MySQLに接続できません。";
            return null;
        }
       
        // DBを選択
        if(!mysql_select_db("dbpal",$this->db))
        {
            $this->errorm = "データベースが存在しません。";
            return null;
        }
       
        //MySQL4.1への対応
        mysql_query("SET NAMES UJIS");
       
        return $this->db;
    }

    // デスクトラクタ
    function __desctruct(){
        mysql_close( $this->db );
    }

    // ユーザ認証
    public function isValidUser( $id, $pass )
    {
       
        // MySQLにデータがあるか調べる
        $qstring = "select passwd from b_settings where username='$id'";
        //クエリを実行
        $qresult = mysql_query($qstring);
        if(!$qresult)
        {
            $this->errorm = "テーブルが存在しません。";
            return false;
        }
        //mysql_fetch_array関数はテーブルはあるがユーザ名の$idがない場合のエラーです
        if(!$fresult = mysql_fetch_array($qresult))
        {
            $this->errorm = "認証出来ませんでした。";
            return false;
        }
       // 'passwd'と$passが一致するか?
        if( $pass == $fresult['passwd'] )
        {
            return true;
        }
        else
        {
            $this->errorm = "認証出来ませんでした。";
            return false;
        }
    }//関数終了

} //クラス終了
?>