署名フォームのソース
<?php $po1 = $_POST["kuni"]; $po2 = $_POST["home"]; $po3 = $_POST["sign"]; $po4 = $_POST["hand"]; $po5 = $_POST["pass"]; |
//ヒトムルからの郵便受け、「$po1」にバリューが入る。 //住所、「$po2」=入力された住所。 //名前、「$po3」=入力された名前。 //ハンドル、「$po4」=入力されたコテハン。 //パスワード、「$po5」=入力されたパスワード。 |
if (strlen($po2) > 50){ print("住所が長すぎます。"); exit;} elseif(strlen($po3) > 30){ print("お名前が長すぎます。"); exit;} elseif(strlen($po4) > 30){ print("コテハンが長すぎます。"); exit;} elseif(strlen($po5) > 30){ print("パスワードが長すぎます。"); exit;} |
//strlenは、言葉の長さを計る記号。 //ただし、文字種を特定しません。 //その方が都合が良いと思います。 //右側の数字は、半角分です。 //全角だと15文字という事になります。 |
if($po1 == "0000"){ print("都道府県が未入力。"); exit;} elseif($po2 == ""){ print("住所が入力されていません。"); exit;} elseif($po3 == ""){ print("お名前が未入力。"); exit;} elseif($po4 == ""){ print("コテハンが未入力。"); exit;} elseif($po5 == ""){ print("パスワードが未入力。"); exit;} |
//架空のバリュー「0000」を作らないと、 //誤作動を起こして、 //「↓南 北↑.log」というファイルを //作ってしまいます。 //exitを付けないと、以下の処理を実行してしまいます。 |
$ng = file_get_contents ("in/handle.log","r"); $str = strstr($ng, $po4); if ($str === false) {echo "";} else{echo "ごめんなさい、($po4)は 、 先客があります。"; exit;} ?> |
//このスクリプトは、コテハン重複回避の為です。 //file_get_contents この記号は、ログ参照の決定版。 //strstr、()内、左の中から右を調べる。 //見つからない時に、「false」。 //その場合、黙って作業を続行。 //逆の場合、先着コテハンを挙げて、 //その場所まで指定できるそうです。(=strripos) //exitを付けないと、以下の処理を実行してしまいます。 |
<?php $po1 = $_POST["kuni"]; $po2 = $_POST["home"]; $po3 = $_POST["sign"]; $file = fopen("on/$po1.log","a"); flock($file,LOCK_EX); fwrite($file,$po2."\n"); fwrite($file,$po3."\n"); fclose($file); $file2 = fopen("in/$po1.log","r+"); $count = fgets($file2); $count = $count + 1; rewind($file2); flock($file2,LOCK_EX); fwrite($file2,$count); fclose($file2); ?> |
//ここは、本当は重ねなくて良い部分です。 //バリューとファイル名が同一なので、関数になります。 //同時アクセス防止の為、ファイルをロック。 //ファイルに「住所」を書く、+改行。 //ファイルに「名前」を書く、+改行。 //ファイルを閉じる。同時にロック解除。 //ファイルを開く、上書き更新。 //数えて、 //ひとつ足す。 // //同時アクセス防止の為、ファイルをロック。 //ファイルに書く、+カウント。 //ファイルを閉じる。同時にロック解除。 |
<?php $po3 = $_POST["sign"]; $po4 = $_POST["hand"]; $po5 = $_POST["pass"]; $file = fopen("on/hapass.log","a"); flock($file,LOCK_EX); fwrite($file,$po4.":"); fwrite($file,$po5."\n"); fclose($file); $file2 = fopen("on/handle.log","a"); flock($file2,LOCK_EX); fwrite($file2,$po4."/"); fclose($file2); $file3 = fopen("on/hasign.log","a"); flock($file3,LOCK_EX); fwrite($file3,$po3.":"); fwrite($file3,$po4."/"); fclose($file3); ?> |
//ファイルを開く。こちらは、書き込み。 //同時アクセス防止の為、ファイルをロック。 //ファイルに「コテハン」を書く、+":"。 //ファイルに「パスワード」を書く、+改行。 //ファイルを閉じる。同時にロック解除。 //コテハン参照用に、もうひとつファイルを作る。 //同時アクセス防止の為、ファイルをロック。 //ファイルに「コテハン」を書く、+"/"。 //ファイルを閉じる。同時にロック解除。 //名前とコテハン対照用に、さらにファイルを作る。 //同時アクセス防止の為、ファイルをロック。 //ファイルに「名前」を書く、+":"。 //ファイルに「コテハン」を書く、+"/"。 //ファイルを閉じる。同時にロック解除。 |
<?php $po1 = $_POST["kuni"]; $file = fopen("in/00all.log","r+"); $count = fgets($file); $count = $count + 1; rewind($file); flock($file,LOCK_EX); fwrite($file,$count); fclose($file); print("あなたは衆議院議員です。"); ?> |
//ファイルを開く、上書き更新。 //数えて、 //ひとつ足す。 // //同時アクセス防止の為、ファイルをロック。 //ファイルに書く、+カウント。 //ファイルを閉じる。同時にロック解除。 //あなたを迷わせる、甘言。 |
少しづつ、勉強しながら作ったので、プログラムが複数になっています。
「?>」と「<?php」とを略して、ひとつにする事は出来るのですが、その場合、「$file」や「$count」に番号を振らねばなりません。へたをすると、誤作動を起こしそうなので、そのままにしてあります。
これはもちろん、「j_shomei.php」ファイルとして、「j_shomei.htm」ファイルの裏側に、寄り添うように存在しています。そして、陽の目を見る事はありません。
ちなみに、これは表になっているので、このままコピペしても使えません。律儀に、表の枠内をコピペして下さい。また、PHP有効のサーバー空間に送らないと、起動しません。
もちろん、黄色いフォルダ「in」や「on」を作って、その中に、ログ・ファイルを入れて置く必要があります。覚え書きの為のファイル「$po1.log」「hapass.log」「hasign.log」は「402」で機能します。たびたび参照する事になるファイル「handle.log」だけは、「406」にする必要があります。
「$po1.log」は、バリュー名の数だけ用意します。「$po1」というのは、関数ですよ。