忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP+SQLite 登録済チェック

PHP+SQLiteで会員登録システムを作りたいと思います。今回のテーマは、「登録済チェック」。登録申請のあったユーザーIDが、すでに登録済みであるかどうかをチェックする部分を考えたいと思います。

すでにテキストファイルベースやPHPファイルベースの会員情報ファイルについては「PHP 会員登録システム(テキストファイル版) 」、「会員登録システム(PHPファイル版)」で、 「登録済チェック」は、盛り込んでいます。そこでは、会員情報ファイルから1行ずつ読み込み、ユーザーIDの部分を取り出して、それが送信された申請ユーザーIDと一致するかどうかというチェックをしました。

SQLiteでも同様に会員情報テーブルに問い合わせを行い、そこで得られた結果セットについて1レコードずつ取り込んで、ユーザーIDのフィールドの値を送信された申請ユーザーIDと一致するかどうかというチェックを行うことはできます。

ただSQLiteは、SQL文を使えるデータベースです。問い合わせの仕方によっては、もっと簡単に答えがでます。

もう1度、「登録済チェック」の目的を考えてみましょう。
それは、「送信された申請ユーザーIDが既に登録されているかどうか」判断するということです。これをSQL的に翻訳すると、次のようになります。

「送信された申請ユーザーID」と一致する「ユーザーID」を会員情報テーブルから探して、それがあるかどうか。


$query = "SELECT usrid FROM member WHERE usrid = $_POST['usrid']";
$result = sqlite_query($db,$query);
$rows = sqlite_num_rows($result);
if($rows==0){
echo "登録できます。";
}else{
echo "登録済です。";
}


sqlite_num_rowsは、クエリによる結果セットのレコード数を返す関数です。
レコード数が0であれば、その「送信された申請ユーザーID」は、まだ登録されていないということになります。

SQLが使えるとループ処理を記述しないで済む場合があります。便利ですね。

同一値がチェックできるページを作成したので、そのソースを示しておきます。これは、いろいろなSQLiteデータベースのテーブルのフィールドのチェックに使える汎用的なものです。データベース名、テーブル名、フィールド名を変えて使用できます。

[画面サンプル]登録済チェック----画像をクリックすると大きく表示されます。
登録済チェック画面サンプル

[ソース]登録済チェック

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>ダブリチェック</title>
<style type="text/css">
<!--
table,td {border:#669966 solid 1px;empty-cells:show;}
th {border:#669966 solid 1px;background-color:#ccffcc;}
-->
</style>
</head>
<body>
<h1>ダブリチェック</h1>
<p>SQLiteのクエリでユーザーIDがダブルかチェックします。</p>
<form method='post' action="<?= $_SERVER[PHP_SELF] ?>">
DatabaseName:<br>
<input type='text' name='dbname' value="memberdb"><br>
TableName:<br>
<input type='text' name='table' value="member"><br>
FieldName:<br>
<input type='text' name='field' value="usrid"><br>
Value:<br>
<input type='text' name='value' value="<?= $_POST['value'] ?>">
<input type='submit' value='実行'>
</form>
<?php
if($_POST['dbname']){

$db = sqlite_open($_POST['dbname']);
if(!($db)){
die("データベースをオープンできません。");
}else{
$query = "SELECT ".$_POST['field']." FROM ".$_POST['table']." WHERE ".$_POST['field']." = '".$_POST['value']."'";
$query = htmlspecialchars($query) ;
$query = str_replace("\\","",$query);
$result = sqlite_query($db,$query);
echo "クエリを実行しました(結果ハンドル:".$result.")<br>";
$fields = sqlite_num_fields($result);
$rows = sqlite_num_rows($result);
echo "該当レコード数:".$rows."件---";
if($rows==0){
echo "重複値はありません<br>";
}else{
echo "同じ値のデータがあります。<br>";
}
####全データの表示
$query = "SELECT * FROM ".$_POST['table'];
$query = htmlspecialchars($query) ;
$query = str_replace("\\","",$query);
$result = sqlite_query($db,$query);
echo "<h2>全データの表示</h2>クエリを実行しました(結果ハンドル:".$result.")<br>";
$fields = sqlite_num_fields($result);
$rows = sqlite_num_rows($result);
echo "該当レコード数:".$rows."件";
echo "<table><tr>";
for($i=0;$i<$fields;$i++){
echo "<th>".$i."</th>";
}
echo "</tr><tr>";
for($i=0;$i<$fields;$i++){
$field_name=sqlite_field_name($result,$i);
echo "<th>".$field_name."</th>";
}
echo "</tr>";
for($j=0;$j<$rows;$j++){
$record = sqlite_fetch_array($result);
echo "<tr>";
for($i=0;$i<$fields;$i++){
echo "<td>".$record[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
?>
</body>
</html>
PR
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.