Link PEARのAuthを使う

[PHP]

Authは認証を行なうためのPEARのライブラリです.
非常に簡単にユーザ認証を実装できます.
ここではMySQLを使ってAuthで認証を行なう方法を紹介します.

まずデータベースを作りましょう.
データベース名:login
テーブル名:auth

CREATE DATABASE login;

CREATE TABLE auth (
  username VARCHAR(50) default '' NOT NULL,
  password VARCHAR(32) default '' NOT NULL,
  PRIMARY KEY (username),
  KEY (password)
);

あとは auth.php という名前で以下のソースを動かします.

<html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8"> </head>

<?php

require_once("Auth.php");

// ログインフォーム
function loginFunction()
{
  echo "<div id=\"loginform\">";
  echo "<form method=\"post\" action=\"auth.php\">";
  echo "<h2>ログインフォーム</h2>";
  echo "<input type=\"text\" name=\"username\"></br>";
  echo "<input type=\"password\" name=\"password\">";
  echo "<input type=\"submit\">";
  echo "</form>";
  echo "</div>";
}

// ユーザ追加のためのフォーム
function adduserForm()
{
  echo "<div id=\"adduser\">";
  echo "<form method=\"post\" action=\"auth.php?add=1\">";
  echo "<h2>ユーザ追加</h2>";
  echo "<input type=\"text\" name=\"username\"></br>";
  echo "<input type=\"password\" name=\"password\">";
  echo "<input type=\"submit\">";
  echo "</form>";
  echo "</div>";
}

// パラメータの設定
// localhostのデータベース名 login,テーブル名 auth の場合
$params = array(
  "dsn" => "mysql://root:@localhost/login",
  "usernamecol" => "username",
  "passwordcol" => "password",
  "table" => "auth",
  "cryptType" => "md5"
);

$myauth = new Auth("DB", $params, "loginFunction");
// 認証開始
$myauth->start();

// ユーザ追加のためのフォーム表示
adduserForm();

if (isset($_GET['add'])) {
// ユーザを追加のときは以下のように実行
  $myauth->addUser($_POST['username'],$_POST['password']);
}

if (isset($_GET['logout'])) {
// ログアウト処理
  $myauth->logout();
  echo "ログアウトしました</br>";
}

if ($myauth->getAuth()) {
// ここに認証後のコードを書く
  echo "現在ログイン状態です</br>";
  echo "<a href=\"auth.php?logout=1\">ログアウト</a>";
}

?>
</html>

実際に動かして動作を確認しましょう.
auth.php にアクセスし,ユーザを追加して,ログインしてみてください.
現在ログイン状態ですと表示されます.

2006,10,21 : 18:40 | 修正

Link pearコマンドでPHPWebアプリケーションフレームワークSmartyをインストール

[PHP]

Smartyはpear.php.netでは配布されていませんが,
別のサイト(Pearified.com)でパッケージが配布されていて,
Channel機能を使うことでpearコマンドによりインストール可能です.

パッケージ配布先の追加
# pear channel-discover pearified.com

チャネル一覧の確認
# pear list-channels
Smartyをインストール
# pear install pearified/Smarty

ついでにJavascriptライブラリをインストール
# pear install -f pearified/Javascript_Prototype
# pear install -f pearified/Javascript_Scriptaculous


動作確認

index.php

<?php

require_once('Pearified/Smarty/Smarty.class.php');

// オブジェクトの作成
$smarty = new Smarty;

// テンプレートファイル
$smarty->template_dir = './templates/';

$smarty->assign('name', 'smarty');
$smarty->display('index.tpl');

?>

index.phpと同じ場所に templates と templates_c フォルダを作成
# mkdir templates
# mkdir templates_c
# chmod 777 templates_c

templates/index.tpl を以下の内容で作成

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTP-8">
<title>smarty test</title>
</head>
<body>
ようこそ {$name}!
</body>
</html>

index.php にアクセスし 「ようこそ smarty!」 が表示される.

2006,10,07 : 17:41 | 修正

Link PHP投票システムを構築

[PHP]

投票システムのプロトタイプを公開します。
機能を追加してレンタルサービスとして公開するのが目標。
まあ卒論が忙しすぎてなかなか暇ないけど…

↓具体的にこんなことができます
「2006年のセ・リーグ優勝は?」
http://www.freebbs.biz/vote/vote.php?qid=1
「2006年のパ・リーグ優勝は?」
http://www.freebbs.biz/vote/vote.php?qid=2
「あなたの睡眠時間は?」
http://www.freebbs.biz/vote/vote.php?qid=7

新規登録はここから
http://www.freebbs.biz/vote/regist.php

システムのログインはここから
http://www.freebbs.biz/vote/login.php

新規登録してログイン画面からログインしてください。
そしたら自分の好きな質問いっぱい作れますよ~
使えそうなら使ってやってください。

2005,12,17 : 23:30 | 修正 | トラックバック (0)

Link PHP日記機能付きカレンダースクリプト公開

[PHP]

久々に気合いを入れたPHPスクリプトを作ってみました。
カレンダースクリプトに日記機能を埋め込んだものです。
祝日表示対応などなかなかスグレモノです。
ただ、まだ記事編集機能がまったくありません。
これからどんどん機能を追加していきたいと思います。

http://www.freebbs.biz/php/cal.php
↑からサンプル&ダウンロード

2005,06,11 : 23:15 | 修正 | トラックバック (0)

Link PHPでアクセス解析 ~Part1~

[PHP]

久々のPHPシリーズ。
今回はアクセス解析でも作ってみますか。

まずは基礎から。
PHPでリファラ(どこのページから飛んできたか)を調べるのはとても簡単!
getenv('HTTP_REFERER')
で取得できます。

IP(例:192.168.1.1など)を調べたいときは
$_SERVER['REMOTE_ADDR']
というスーバーグローバル変数を使います。

ホスト名(例:freebbs.biz)を調べたいときは
gethostbyaddr($_SERVER['REMOTE_ADDR'])
で取得できます。

OSの情報、ブラウザの情報を取りたいときは
$_SERVER['HTTP_USER_AGENT']
というスーバーグローバル変数を調べます。
戻り値は
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Lunascape 2.0.5)
のような感じになります。
OSはWinXP、ブラウザはLunascapeを使用している。
Windows NT 5.1がWindowsXPを表している。

2005,06,03 : 23:28 | 修正 | トラックバック (0)

Link PHPでクラスを使う

[PHP]

今日は久々に研究室へ。
オープンキャンパスまでに鉄道模型の制御プログラムを作るらしい。
今日はモーターの制御回路作成を命じられる。
半田ごてなんて久々に使うな・・・

今日はPHPでのクラスの使い方を紹介します。
オブジェクト指向というのはどうも慣れませんがね・・・
再利用性が高いのでしっかり使いこなせるようになりましょう!
クラスの宣言は

class クラス名 {
 var フィールド名;
 function クラス名 ( ) { } // コンストラクタ
 function 関数名 ( ) { } //メソッド
}

とまあこんな感じになります。

データベースを操作するクラスDBを例に挙げます。

class DB{
 var $id;
 var $result; // フィールド

// コンストラクタ(データベースに接続し、スキーマ選択)
 function DB($host,$user,$pass,$dbname){
  $this->id = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
  @mysql_select_db($dbname) or die("Could not use selected database");
  return $this->id;
 }
// メソッドClose(データベースからの接続をクローズ)
 function Close(){
  @mysql_close($this->id) or die("Could not close database");
 }
// メソッドQuery(データベースにSQLクエリーを送る)
 function Query(&$sql){
  $this->result = @mysql_query($sql) or die("Could not query of [ $sql ]");
  return $this->result;
 }
// メソッドAffected_rows(変更された行数を返す)
 function Affected_rows(){
  $this->result = @mysql_affected_rows() or die("Could not query of [ mysql_affected_rows ]");
  return $this->result;
 }
}

使い方は非常に簡単
$db = new DB("localhost","user","pass","dbname");
でオブジェクトを生成し、データベースに接続します。

クエリーを送るときは
$sql = "SELECT * FROM `table`;";
$result = $db->Query($sql);
while ($row = mysql_fetch_array($result)) { // SQLで読み出されたすべての行を参照する
 $row['データベースのフィールド名'] で参照できます
}

データベースをクローズしたいときは
$db->Close();
とすればOK

こうしておけばデータベースがMySQLからPostgreSQLに変わったときに
変更箇所が非常に少なくて済みます。

2005,05,06 : 23:17 | 修正 | トラックバック (0)

Link PHPでカレンダー表示 ~祝日対応~

[PHP]

PHPで任意の月のカレンダーを表示するスクリプトを作ってみました。
祝日にも対応しています。

月のカレンダーを表示 

スクリプトのダウンロードはこちら

2005,04,30 : 11:38 | 修正 | コメント (3) | トラックバック (0)

Link PHP簡易投票システムを設置

[PHP]

久々にPHPやりましょう。
MySQLデータベースサーバーと連携させて投票システムを作ります。
速攻で作りました。

お題は「堀江社長を支持しますか?」です

解答はこちらからお願いします

まず、データベースを準備しましょう。
CREATE DATABASE `vote`;
でデータベーススキーマを作成します。
そのスキーマ内に
CREATE TABLE `vote` (
`answer` INT NOT NULL ,
`ip` TEXT NOT NULL
)

を実行させて表を作ります。

vote.html (質問を書いたHTML)を準備します
当ページの例では以下のようになります
----------------------------------------
<html><body>
あなたはライブドアの堀江社長を支持しますか?<br>
<form action="vote.php" method="post">
<p>
<input name="answer" type="radio" value="1" checked>
1.支持します<br>
<input name="answer" type="radio" value="2">
2.支持しません<br>
<input name="answer" type="radio" value="3">
3.どちらでもないです<br>
<input name="answer" type="radio" value="4">
4.逝ってヨシ!</p>
<p><input type="submit" name="Submit" value="送信"></p>
</form>
</body></html>

----------------------------------------

あとはvote.phpを準備します。
----------------------------------------
<?php
$host = "localhost"; // ホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "vote"; // データベース名
$dbtable = "vote"; // データベーステーブル名

$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "SELECT * FROM `${dbtable}` WHERE ip='${_SERVER['REMOTE_ADDR']}';";
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// SQLクエリーを送信
$row = @mysql_fetch_array($result); // 結果をfetch

if(!$row){ // IPで投票済みか判定
$sql = "INSERT INTO `${dbtable}` SET answer='${_POST['answer']}',ip='${_SERVER['REMOTE_ADDR']}';";
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
} else {
echo "エラー:あなたはすでに投票されています<br>\n";
}

echo "<h2>結果表示</h2>\n";
$sql = "SELECT COUNT(*),answer FROM `${dbtable}` GROUP BY answer;";
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
while ($row = @mysql_fetch_array($result)) { // 結果をfetch
echo "${row['answer']}を選んだ人 ${row[0]}人<br>\n";
}
?>
----------------------------------------

2005,04,06 : 20:00 | 修正 | トラックバック (0)

Link RSSをPHPから扱うには?

[PHP]

昨日紹介したRSSですが、これをPHPで読み込み
表示させるスクリプトを紹介しましょう。

http://pear.php.net/package/PEAR/download
からPEAR.phpを、
http://pear.php.net/package/XML_RSS/download
からRSS.phpを、
http://pear.php.net/package/XML_Parser/download
からParser.phpをダウンロードします。

それぞれ解凍したフォルダの中に入ってます。

次にRSSを読み込んでくるスクリプト
view.phpを作りましょう。

--<view.php>-------------------------------
<?php
require "RSS.php";

// RSSファイルのURLを指定します
$rdf = "http://www3.asahi.com/rss/index.rdf";

// クラスを作成
$r =& new XML_RSS($rdf);
$r->parse();

// アイテムをfetchします
$val = $r->getItems();
// 一番最新の記事のタイトルを取得します
$title = mb_convert_encoding($val[0]['title'], "SJIS", "UTF-8,EUC-JP,SJIS");
// 一番最新の記事のリンクを取得します
$link = $val[0]['link'];

echo "<a href=\"$link\" target=\"_blank\">$title</a>";

?>
-----------------------------------------------

サンプルはこちらになります

上の部分の$val[0]を$val[1]にすると2番目に
新しい記事が取得できます。
for文などを使って最新5記事とかの表示もできますね。

2005,03,23 : 16:12 | 修正 | トラックバック (0)

Link PHPでのフォームデータの受け渡し

[PHP]

明日から新潟の苗場まで2泊3日で行ってきます!
携帯から現地リポートしますね~

PHPではフォームデータの受け渡しが非常に簡単にできます。
この点で私はPerlよりもPHPを気に入っています。

フォームのデータ受け渡しには、$_GET$POST
というスーパーグローバル変数を使います。
スーパーグローバル変数とは、プログラム中の
どの範囲(スコープ)でも定義せずに使用可能な変数です。
POSTメソッドで送られたデータなら、$_POSTと書くだけで
簡単に受け取れるようになっています。

以下に例を示しましょう。
test.htmlのフォームからtest.phpにデータを送ってみます。

<test.html>
----------------------------------------------
<html>
<body>
<form action="test.php" method="post">
<input type="text" name="data">
<input type="submit" value="送信">
</form>
</body></html>

----------------------------------------------

<test.php>
----------------------------------------------
<?php
print $_POST['data'];
?>
----------------------------------------------

上のスクリプトのサンプルはこちら
たったこれだけでデータの受け渡しができるとは楽ですね。
Perlのときより簡単ですな~

2005,03,15 : 16:19 | 修正 | コメント (2) | トラックバック (0)

Link PHPで携帯絵文字を扱う

[PHP]

今日はちょっと高度なテクを紹介。
PHPで携帯の絵文字は扱えるのかという話です。
携帯の文字コードはすべてShift-JISコードですから、
PHPのスクリプトを書くときも必ずShift-JISコードで書きましょう。
絵文字のコードは、他の文字が登録されている
場所以外のところにあって、そのまま表示すると
「・」と表示されてしまいます。

まず、Webminかなにかで /etc/php.ini の設定をしましょう。
その中の下の方の部分にmbstring.internal_encoding
mbstring.http_outputの設定があるので
以下のように変更してください。

mbstring.internal_encoding = SJIS
mbstring.http_output = pass

以下はi-modeのみの絵文字を変換するスクリプトです。
$valueを絵文字を含む文字列とすると、以下のように変換できます。

$value = preg_replace('/\G((?:[\x80-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF])*)([\xF8\xF9][\x40-\xFC])/e',"'$1'.'<img src=\"./img/'.array_shift(unpack('H4chars','$2')).'.gif\">'",$value);

上のスクリプトはF840~F8FC、F940~F9FCのS-JIS文字コードを
imgタグに置き換えるということをやっております。

スクリプトと同じ位置にimgというディレクトリを作ります。
そして、そのディレクトリの中に絵文字データを入れてください。
KENTさんのページにあります。

このようにPHPでも携帯の絵文字が扱えることがわかりました。
私のページでもこれを利用し携帯対応掲示板を作っています。
http://www.freebbs.biz/phpbbs/bbs.php?id=sample

ちょっと今日のスクリプトは難しかったですね。
こんなこともできるんだ~くらいに思っといてください。

2005,03,14 : 10:55 | 修正 | トラックバック (0)

Link データベースカウンタ

[PHP]

昨晩は川端康成の「雪国」を読んでいて、寝るのが遅くなってしまった。
起きたのは昼。新パソコンが届いてたー
とりあえず、部屋の掃除して、WindowsXPをインストール中。

今日はMySQLを使ってカウンタを作ってみましょう。
まずはデータベース表を作成します。
以下のコマンドをSQLで実行。
phpMyadminのSQLの実行から実行させましょう。
----------------------------------------------
CREATE DATABASE `count`;
CREATE TABLE `count` (
`count` INT NOT NULL ,
`ip` TEXT NOT NULL
)
INSERT INTO `count` (`count`, `ip`) VALUES (0, '127.0.0.1');

----------------------------------------------

次にPHPスクリプトcount.phpを作りましょう。
内容は以下のようにします。

----------------------------------------------
<?php
$host = "localhost"; // ホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "count"; // データベース名
$dbtable = "count"; // データベーステーブル名

$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "SELECT * FROM `${dbtable}`;";
// SQL文の生成
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// クエリーを送信
$row = @mysql_fetch_array($result); // 結果をfetch

if($row['ip'] != $_SERVER['REMOTE_ADDR']){
 $row['count']++; // ipが異なればカウントアップ
 $sql = "UPDATE `${dbtable}` SET ip = '${_SERVER['REMOTE_ADDR']}', count = '${row['count']}';";
 // SQL文の生成
 $result = @mysql_query($sql) or die("Could not query of [ $sql ]");
 // クエリーを送信
}

echo "Total:${row['count']}"; // 表示部

?>
----------------------------------------------

あとはカウンタを表示させたいところに
<?include("./count.php");?>
と記述すればOKですね。
サンプルはこちら

2005,03,13 : 15:02 | 修正 | トラックバック (0)

Link 携帯キャリア別にカウンタの記録をとる

[PHP]

i-mode,Vodafone,EzWeb の3つのキャリアを判定し、
キャリアごとのカウンタを表示するプログラムです。

PC: 10 i-mode: 5 EzWeb: 3 Vodafone: 1
↑このように表示されます。

preg_match関数を使ってみましょう。

<?php
$filename = "./count.dat"; // データファイル名
$keta = 5; //カウンタ表示桁数

$file = fopen($filename,"r+");
$buffer = fread($file,filesize ($filename));
list($pc,$imode,$ez,$vodafone,$ip) = explode("<>",$buffer);
$myip = getenv("REMOTE_ADDR");

if($myip != $ip){ //同一IPでなければカウントアップ
 if(preg_match("/DoCoMo/i",$_SERVER['HTTP_USER_AGENT'])){ // ドコモにマッチ
  $imode++;
 } else if(preg_match("/J-PHONE/i",$_SERVER['HTTP_USER_AGENT'])){ // Vodafoneにマッチ
  $vodafone++;
 } else if(preg_match("/UP\.Browser/i",$_SERVER['HTTP_USER_AGENT'])){ // auにマッチ
  $ez++;
 } else{
  $pc++;
 }
}

$pc = sprintf("%0".$keta."d",$pc);
$imode = sprintf("%0".$keta."d",$imode);
$ez = sprintf("%0".$keta."d",$ez);
$vodafone = sprintf("%0".$keta."d",$vodafone);

//表示部(適当に編集してください)
echo "PC: $pc i-mode: $imode EzWeb: $ez Vodafone: $vodafone";

ftruncate($file,0);
rewind($file);

//ファイルロック処理
flock($file,LOCK_EX);
fwrite($file, $pc."<>".$imode."<>".$ez."<>".$vodafone."<>".$myip);
flock($file,LOCK_UN);
fclose($file);
?>

2005,03,07 : 12:27 | 修正 | トラックバック (0)

Link 正規表現~Perl編~

[PHP]

PHPではPerlの正規表現をサポートしており、
preg_matchやpreg_replace関数などで利用できます。
正規表現とは文字列のパターンを表す記号などの羅列です。
これにより、あるパターンに合致する文字列を検索・置換することが可能です。
非常に便利なものなので必ず覚えましょう!

メタキャラクター一覧

\  直後のメタキャラクターを文字として扱います
^  行の先頭にマッチします
.  任意のキャラクター(改行を除く)にマッチします
$  行の終端(もしくは行末の改行の直前)にマッチします
|  選択
()  グループ化をします
[]  文字の集合を表します

以下は直前の文字や集合に対して適用されます

*  ゼロ回以上の繰り返しにマッチします
+  一回以上の繰り返しにマッチします
?  ゼロ回もしくは一回の繰り返しにマッチします
{n}  n回の繰り返しにマッチします
{n,}  少なくともn回ある繰り返しにマッチします
{n,m}  n回からm回の間の繰り返しにマッチします

以下のような文字を表す表現が使えます

\w  キャラクタ(アルファベット、数字、“_”)にマッチします
\W  キャラクタでないものにマッチします
\s  空白(whitespace)キャラクタにマッチします
\S  非空白キャラクタにマッチします
\d  数字にマッチします
\D  非数字にマッチします

上記を参考に以下に例を示しましょう。
例:自動リンクスクリプト
$buffer中にURLがマッチしたらリンクをはります。
$buffer = preg_replace("!(https?|ftp)(://[\w\+\$\;\?\.%,\!#~*/:@&=_-]+)!","<a href="\\1\\2" target="_blank\" >\\1\\2</a>",$buffer);

2005,03,04 : 16:07 | 修正 | トラックバック (0)

Link 英単語ゲーム

[PHP]

朝から久々にサークルに顔出してきました。
体中が痛い・・・

これまでに紹介してきた単語辞書のプログラムを発展させ、
英単語のゲームを作ってみましたので紹介します。
まず、英文が出てきますのでそれを読んでください。
その英文の意味に合致する単語を当てるゲームです。
http://www.freebbs.biz/quiz/view.php
こんな感じです。

皆さんも面白いプログラムを組んでみてくださいね!

2005,03,03 : 17:56 | 修正 | トラックバック (0)

Link PHP+MySQLで単語帳を作ってみよう ~表示編~

[PHP]

この前登録編をやりましたんで、
今日はデータベースに登録した単語を表示させるプログラムを紹介します。
サンプルはこちらになります。
登録画面サンプルはこちらです。
mysql_fetch_array関数の使い方を見てみましょう!

単語表示スクリプト<view.php>
-- view.php --------------------------------
<?php
$host = "localhost"; // ホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "english"; // データベース名
$dbtable = "tango"; // データベーステーブル名

$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "SELECT * FROM `${dbtable}` ORDER BY 'tango';";
// SQL文の生成
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// クエリーを送信
echo "<table>\n";
while ($row = @mysql_fetch_array($result)) { // 結果をfetch
echo "<tr><td>${row['tango']}</td><td>${row['imi']}</td></tr>\n";
}
echo "</table>\n";
// 表を作成
?>
--------------------------------------------

2005,03,02 : 14:54 | 修正 | トラックバック (0)

Link PHP+MySQLで単語帳を作ってみよう ~登録編~

[PHP]

PHPで簡単な単語帳を作ってみましょう。
これを応用すると色々なプログラムが書けるはずです!
今日は、 データベースに接続→単語を登録
という作業をやってみます。

まず、MySQLで以下のSQL文を実行します。
-------------------------------------------
CREATE DATABASE `english`;
CREATE TABLE `tango` (
`id` INT NOT NULL AUTO_INCREMENT ,
`tango` VARCHAR(40) NOT NULL ,
`imi` TEXT NOT NULL ,
PRIMARY KEY (`id`)
);

-------------------------------------------
これでenglishというデータベースの中に
tangoという表が作成されます。

次に単語投稿フォームを作ります。
エディタでtouroku.htmlを作ってください。
-- touroku.html ---------------------------
<html>
<body>
<form action="touroku.php" method="post">
単語:<input type="text" name="tango"><br>
意味:<input type="text" name="imi"><br>
<input type="submit" value="送信">
</form>
</body></html>

-------------------------------------------

あとはPHPスクリプト<touroku.php>をエディタで作成してください。
-- touroku.php ----------------------------
<?php
$host = "localhost"; // データベースホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "english"; // データベース名
$dbtable = "tango"; // データベーステーブル名

if(!$_POST['tango'] || !$_POST['imi']){exit("入力されていない項目があります");}
$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "INSERT INTO `${dbtable}` SET tango = '${_POST['tango']}', imi = '${_POST['imi']}';";
// SQL文を生成
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// クエリーを送信
echo "単語 ${_POST['tango']} を登録しました";
?>
--------------------------------------------

あとは投稿フォームから単語を登録するだけです。
必要最低限の機能しかありませんので、簡単でしたね?
次回はデータベースから単語を取り出して表示させてみましょう。

2005,02,26 : 10:02 | 修正 | トラックバック (0)

Link PHPでアクセス制限

[PHP]

ページにアクセス制限をつけてみましょう。
上部に以下のようなプログラムを挿入します。

<?php
$denylist = array("proxy.com","xyz.com","kkk.net")
// アクセスを拒否するホストのリスト
$host = @gethostbyaddr($_SERVER['REMOTE_ADDR']);
foreach($denylist as $value){
if(ereg($value,$host)) // パターンにマッチすれば
exit("アクセスが拒否されました");
}
?>

正規表現関数ereg()を使いました。
ereg(pattern,string) のように使います。
eregi()を使うと大文字と小文字を区別しません。

ただし、パターンマッチングにはPerl互換のpreg_match()の方が早く動作するようです。
なるべくならそちらを使う方がよいでしょう。

2005,02,25 : 10:00 | 修正 | トラックバック (0)

Link 掲示板でトリップ機能 ~実践編~

[PHP]

掲示板でのトリップ機能については先日書きましたが、
今日は実際にトリップを実現するためのプログラムを紹介します。
フォームから投稿されたデータ$_POST['name']を
トリップ機能を使いエンコードしてましょう。
Perlの正規表現を利用すると以下のようなプログラムになりますね。

$_POST['name'] = str_replace("◆","◇",$_POST['name']);
// まず◆を使って偽装されないよう◆は◇に変えておきます
if(preg_match("/#(.)+/",$_POST['name'],$regs)){
// もし#任意の文字列にマッチしたら以下を実行
 list($name,$trip) = explode("#",$_POST['name']);
 $trip_enc = substr(md5($trip),0,8);
// md5で暗号化し最初の8文字をトリップにしましょうか
 $_POST['name'] = $name."◆".$trip_enc;
}

2005,02,24 : 14:19 | 修正 | トラックバック (0)

Link PHPでメール送信

[PHP]

TOEICの結果が返ってきました~
SECTIONⅠ 335
SECTIONⅡ 300

で635でした。前回より85点UP!次なる目標は700ですな。

今日はPHPからのメール送信方法を紹介します。
マルチバイト関数がインストールされていれば、
以下のように簡単にメールを送信できます。

$mailto = "aite\@address.com"; // 送信先アドレス
$mailfrom = "your\@address.com"; // あなたのアドレス
$contents = "
メールの内容
";
$subject = "メールの件名";
$result = mb_send_mail($mailto,$subject,$contents,"From: ".$mailfrom."\r\n".
"Reply-To: ".$mailfrom."\r\n");
if(!$result)
exit("メールの送信に失敗");

2005,02,21 : 23:39 | 修正 | トラックバック (0)

Link PHPからPOPサーバーに接続

[PHP]

TOEIC、ソフトウェア開発技術者試験申し込みました。
そろそろ本格的に勉強しないとね。
今日はPHPからPOPサーバーに接続する方法を紹介しましょう。

筆者は以下のようにやってみました。

<?php
$host = "localhost" // 接続ホスト
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$sock = fsockopen($host,110,$err,$errno,10) or exit("can't connect pop server");
$buffer = fgets($sock,512);
if(substr($buffer,0,3) != '+OK') exit($buffer);
$buffer = sendmsg("USER $user");
$buffer = sendmsg("PASS $pass");
$data = sendmsg("STAT");
print $data;
sscanf($data,'+OK %d %d',$num,$size);
if($num == "0"){
    $buffer = sendmsg("QUIT");
    fclose($sock);
    exit;
}

for($i=1;$i<=$num;$i++){
    $line = sendmsg("RETR $i");
    while(!ereg("^\.\r\n",$line)){
        $line = fgets($sock,512);
        $msg[$i] .= $line;
    }
}

$buffer = sendmsg("QUIT");
fclose($sock);

// $msg に配列として格納されます

function sendmsg($command){ // コマンド送信関数
  global $sock;
  fputs($sock,$command."\r\n");
  $buffer = fgets($sock,512);
  if(substr($buffer,0,3) == '+OK'){
      return $buffer;
  } else {
      exit($buffer);
  }
  return false;
}

?>

2005,02,16 : 20:11 | 修正 | トラックバック (0)

Link PHPリンクシステム

[PHP]

サイトの相互リンクのところをPHPで登録できるようにしてみた。
http://www.freebbs.biz/
MySQLにデータを登録し、それを表示するという具合だ。
PHPのページも更新しなければ・・・

塾バイトで3万入ったのでちょっとハッピ~(^_^)

なぜかミスチルのCDを借りに行った。
深海、Atomic Heart、Q、DISCOVERYの4枚

2005,02,12 : 23:54 | 修正 | トラックバック (0)

Link PHPでカウンター

[PHP]

ページを大幅にリニューアルした。
CSS、Javascript、PHPを駆使して流行のデザインにしてみました。
http://www.freebbs.biz/
久々にPHPをいじってみたのでカウンタのプログラムを公開することに。

<?php
$filename = "./count/count.dat"; // データファイル名
$keta = 5; //カウンタ表示桁数
$keta2 = 3; //今日昨日のカウンタ表示桁数

$file = fopen($filename,"r+");
$buffer = fread($file,filesize ($filename));
list($count,$ip,$tday,$tcount,$ycount) = explode("<>",$buffer);
$myip = getenv("REMOTE_ADDR");

if($tday == date("ymj",mktime(0,0,0,date("m"),date("d")-1,date("y")))){ //tdayが昨日だったときの処理
$ycount = $tcount;
$tcount = 0;}
elseif($tday != date("ymj")){ //tdayが昨日以前だったときの処理
$tcount = 0;
$ycount = 0;}

if($myip != $ip){ //同一IPでなければカウントアップ
$count++;
$tcount++;
$tday = date("ymj");
}

$count = sprintf("%0".$keta."d",$count);
$tcount = sprintf("%0".$keta2."d",$tcount);
$ycount = sprintf("%0".$keta2."d",$ycount);

//表示部
echo "Total: $count Today: $tcount Yesterday: $ycount";

ftruncate($file,0);
rewind($file);
flock($file,LOCK_EX);
fwrite($file, $count."<>".$myip."<>".$tday."<>".$tcount."<>".$ycount);
flock($file,LOCK_UN);
fclose($file);
?>

2004,12,02 : 00:00 | 修正 | トラックバック (0)


2004 All rights reserved

Movable Type 4.1b2-en