php+mysql の会員制サイト(ログインシステム)サンプル

こんな感じのページが出来上がります ⇒ SAMPLE

userとpassでログインできます。
signup?からはユーザー登録ができますので、登録してログインしてみて下さい。
ログインIDとは別に名前を登録できます(要するに「ようこそ○○さん!」ができる)
カスタマイズって言うかデザインするにはHTMLの知識が必要です。

注意事項って言うより不安要素

  • セキュリティとか正直どうなんだろう
  • 何かあっても責任とれないから、使う時は自己責任
  • 文字コードがUTF-8じゃないと文字化けするYO!
  • ソース汚い
  • pearとかよくわかんないから使わない
  • 関数めんどいから使わない
  • ファイルの構成を変えると作動しなくなるよ!
  • 私の環境はPHPが5.2.6でMySqlは5.0.9だから、それ以下だと動かないかもね!

以上、ご利用になる場合は、上記の不安要素をご理解いただいたものとします。

STEP1:ファイルをダウンロードして下さい

LoginSample.zip : Download

STEPSTEP2:データベースにテーブルを作成
  1. まずphpMyAdminにログインしてデータベースを選択
    ※MySqlのバージョンは5.x推奨です
  2. 右カラムのSQLタブをクリック → テキストエリアに下記のものをコピペ
    CREATE TABLE `spls_user` (
    `id` int(11) NOT NULL,
    `user` varchar(30) collate utf8_unicode_ci NOT NULL,
    `pass` varchar(32) collate utf8_unicode_ci NOT NULL,
    `name` varchar(20) collate utf8_unicode_ci NOT NULL,
    PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

  3. こんな感じのメッセージが出れば成功!
STEP3:DLしたファイルを自分の環境に合わせて編集
  1. db.php
    • テキストエディタでdb.phpを開く
    • 4行目~7行目を自分の環境に合わせて編集。
      ハッスルサーバならコントロールパネルのデータベースの項目にあるMySql5の所を見てね。
      できればMySql4は使わない方向で!
  2. index.php
    22行目あたりでログイン後の会員ページのURLを記入。
    61行目あたりからログインフォームになりますので、お好きなようにデザインして下さい。
    <input type=”text” name=”○○”> ← name=”○○” は変更すると作動しなくなりますので注意。
  3. logout.php
    12行目あたりでログアウト後のURLを記入。
  4. member/
    ログイン後(会員登録した人)に公開するページはこのフォルダの中へ。
    ちなみにcopy.phpをコピーして使うと便利。
    コピーして使わない場合は、<html>の前に必ず下記のものを記入してください。
  5. <?php
    require_once("../session.php");
    ?>
    
    <?php ← これの前に改行とかスペースは入れちゃダメ。絶対ダメ。
STEP4:サーバーにアップロード
ファイル構成は変えないで下さい。

ファイル構成

login
db.php
index.php
logout.php
session.php
style.css
membar
index.php
copy.php
signup
index.php
signup.php

以上、不明点とかエラーとか、何かあればコメントへどうぞ。

    • admin
    • February 8th, 2011

    oao 様

    はじめまして。
    えっと、PHPのバージョンについて書き忘れてましたすみませんorz

    toypark のPHPのバージョンは4.1.2と記載されていますので、php.iniをいじらないとsessionがちゃんと作動しません。
    session使えない=メンバーとして認識できない、という事になりますので、登録できても会員専用ページにはたどり着けない事になります。

    toyparkは今回はじめて聞いたのでどんなサービス内容か解らないのですが、無料のものなのでphp.iniはいじれないと思います。

    いじれた場合は、
    http://php.net/manual/ja/session.configuration.php
    このあたりを参考にご自身で設定されて下さい。

    ちなみにphp.iniをいじった事で起こった不具合に関しても、当方責任は負いかねます。

    • oao
    • February 4th, 2011

    はじめまして。
    検索してこのサイトにたどり着きました。
    サンプルの方をtoyparkで試しに使ってみたのですが、ログイン後のページに移動しませんでした。

    #ログイン後のページ(メンバーのみに公開されるページ)
    $login_url = “http://****.toypark.in/login/member/”;
    header(“Location: {$login_url}”);
    exit;
    と、変更してみたのですが移動しないみたいです…
    ちなみに****の部分はアカウント名です。
    登録等、他の部分は通常通り動いているのですが…
    アドバイスいただけないでしょうか。

    • admin
    • January 17th, 2011

    遅くなりました。
    再度当方で同プログラムをDLし、記事に記載されているものをコピペし、ローカル環境にてテストしましたが、記載されているようなエラーもなく、特に問題なく動きます。同様に複数のレンタルサーバーでも試しましたが、問題ありません。

    signup.phpのクエリをechoで出力して確認などされておりますでしょうか?
    また、

    >db.phpの変更も行いました、db.phpの変更を行わないと、サンプルコードはエラーをphp上で確認できる仕様なので、接続の確認が取れなければdie以下の文章が表示されルはずです。ここでは何も表示されません。(接続できているということでしょうか?)

    とありますが、こちらも接続成功時にechoで何か(例えば「接続成功」など)を出力するようにし、何が悪いのかを1つ1つ確認して下さい。
    何も表示されないのであれば、接続できているはずたと思いますが。

    >ローカル環境でphpMyadmin(もしくはcmd)を利用しMySqlの中身を確認しました

    について、前回も書きましたように、ご自身で独自の環境を構築されている場合は何が原因かは解り兼ねます。

    最後になりましたが、当方のローカル環境はVertrogoServです。php.iniはキャラクタセットの設定をUTF-8にしたぐらいです。
    確認したレンタルサーバーは、ハッスルサーバー、お名前.comの共用サーバーSD、ロリポップ、チカッパの4つです。
    無料レンサバで動くかは解りません。ちなみにphpはVersion 5 、MySql5 以上でしか確認してません。

    • admin
    • January 5th, 2011

    @Nakamura

    Nakamura :
    ローカル環境の設定は間違っておられないでしょうか?(すみません、localhostにてtableの中身を確認、の意味が上手く汲み取れません。ローカル環境でphpMyadmin(もしくはcmd)を利用しMySqlの中身を確認したのか、レンタルサーバーのMySqlのサーバー名がlocalhostになっていて、それをphpMyadminで確認したのか……レンサバなら問題ないと思いますが、ご自身で独自の環境を構築されている場合は、何が原因かは解り兼ねます)

    以上、コメントから読み取れる可能性を上げさせて頂きました。

    ご返信ありがとうございます。
    質問が明確でなく、申し訳ありません。
    ・テーブル作成時のクエリは解説にあるよう、コピペで行いました。
    データベース作成時、データベース名のみ変更し、対応しているプログラム部分は変更しました。

    ・db.phpの変更も行いました、db.phpの変更を行わないと、サンプルコードはエラーをphp上で確認できる仕様なので、接続の確認が取れなければdie以下の文章が表示されルはずです。ここでは何も表示されません。(接続できているということでしょうか?)

    ・signupを行う時にsessionの処理は挟まないのでは?フォルダ構成は何も変更していません。

    ・申し訳ありません。ローカル環境でphpMyadmin(もしくはcmd)を利用しMySqlの中身を確認しました。

    たび重なり質問して申し訳ありませんが、よろしくお願いいたします。

    • Nakamura
    • January 5th, 2011

    おはようございます。
    以下、ご確認をお願い致します。

    • データベースにテーブルを作成した際、テーブル名等を変更されていないでしょうか?
      (解説文にあるものをコピペして頂かないとテーブルにデータが入りません)
    • また、db.phpの4~7行目の部分はご自身の環境に変更されておりますでしょうか?
      (デフォルトのままだとデータベースにアクセスできません)
    • フォルダの中身の構成の変更はないでしょうか?
      (ファイルを動かしてしまうとリンク切れなどが起こりますし、sessionが切れたりします)
    • ローカル環境の設定は間違っておられないでしょうか?
      (すみません、localhostにてtableの中身を確認、の意味が上手く汲み取れません。ローカル環境でphpMyadmin(もしくはcmd)を利用しMySqlの中身を確認したのか、レンタルサーバーのMySqlのサーバー名がlocalhostになっていて、それをphpMyadminで確認したのか……レンサバなら問題ないと思いますが、ご自身で独自の環境を構築されている場合は、何が原因かは解り兼ねます)

    以上、コメントから読み取れる可能性を上げさせて頂きました。

    • admin
    • January 5th, 2011

    ログインフォームのサンプルを探していた所ここに辿り着きました。

    signup.phpで、ユーザー情報を登録する際、DBにはいってくれません。
    UserID Pass Name入力後、signupのボタンを押すと、SQLエラーもはかずに、真っ白なページに遷移してしまいます。

    localhostにてtableの中身を確認すると、フィールドには何も追加されていませんでした。

    お手数ですが、ご享受いただけましたら、幸いです。

    • Nakamura
    • November 21st, 2010

    @サイバー人間さん
    loginフォルダにあるindex.phpの24行目、

    header("Location: {$login_url}");
    

    よりも前の行で、既に何かを出力しているため header 関数が使えないという意味のエラーです。

    これより前に、例えばhtmlで何か出力していたり、phpのprintやらechoやらで何か出力していると、ログインしようとしてもmemberページに飛べません。

  1. 登録はできるんですけどログインするときに

    Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\login\db.php:1) in C:\AppServ\www\login\index.php on line 24

    というエラーが出ます。
    どうすればいいでしょうか

    お願いします

    • yusuke
    • September 28th, 2010

    こんにちは。

    早速、やってみましたらうまくいきました!^^

    教えていただけると、それを見て「あ〜、そういうことかぁ」って思うんですよね。
    ソース見て、そう思える・判断できるまで訓練なんでしょうかね。^^;
    だからまだ、白紙に自分の手で書き始めるにはほど遠いです。

    この度も、ありがとうございました。

    • admin
    • September 28th, 2010

    yusuke 様

    おはようございます。
    ご質問の件ですが、signupフォルダ内のsignup.phpの5行目から、以下のようになっていると思います。

        #データ取得
        $User = mb_convert_kana($_POST["user"], "a", "UTF-8");
        $Pass = mb_convert_kana($_POST["pass"], "a", "UTF-8");
        $Name = $_POST["name"];
    

    これは、signupフォルダ内のindex.htmlで指定したテキストボックスに入力された値を受け取り、変数に代入している部分です。

    なので、index.phpに追加したテキストボックスの値も、受け取って変数に代入してあげないといけません。
    「#データ取得」の部分に、以下のものを追加してみて下さい。

        $Address = $_POST["address"];
        $Tel = $_POST["tel"];
    

    それでは、また何かありましたらお気軽にどうぞ^^

    • yusuke
    • September 28th, 2010

    登録ページの index.php には、・・・のところ、

    <input type=”text” name=”address” class=”input” size=”50″ />
    <input type=”text” name=”tel” class=”input” size=”30″ />

    こうでした。

    • yusuke
    • September 26th, 2010

    以前、こちらのソースで質問させていただき、お世話になりました。
    再度、ソースをいじって勉強中です。

    住所や電話も入力させて、データベースに入るようにやってみたいと思っており、自分なりにやってはいるのですが、意図通りになっておりません。

    phpMyAdminで、

    CREATE TABLE `spls_user` (
    `id` int(11) NOT NULL,
    `user` varchar(30) collate utf8_unicode_ci NOT NULL,
    `pass` varchar(32) collate utf8_unicode_ci NOT NULL,
    `name` varchar(20) collate utf8_unicode_ci NOT NULL,
    `address` varchar(50) collate utf8_unicode_ci NOT NULL,
    `tel` varchar(20) collate utf8_unicode_ci NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    としました。

    ともなって、登録ページの index.php には、

    を追記。

    signup.php には、44行目あたりを

    $sql = “INSERT INTO aono_user VALUES ( “.time().”, ‘”.$User.”‘, ‘”.$Pass.”‘, ‘”.$Name.”‘, ‘”.$Address.”‘, ‘”.$Tel.”‘ )”;

    として、その下の箇所も

    $tmp .= “\n”;
    $tmp .= “ご住所:”.$Address.”\n”;
    $tmp .= “”;
    $tmp .= “\n”;
    $tmp .= “電話番号:”.$Tel.”\n”;
    $tmp .= “”;

    を追記。

    上記のようにしたのですが、これだけだと元の仕様どおりで、’user’と’pass’と’ name’ の3つしかDBに入りません。
    あと、ほかに何が足りないのでしょうか・・・

    お手数ですが、ご享受いただけましたら、幸いです。。。

    • admin
    • September 21st, 2010

    @tc
    おはようございます。
    ログインできてよかったです。

    copy.phpについてですが、ログイン後のページを増やす時に使います。
    ログイン情報はsession.phpというファイルに保存されていますので、それを読み込まないと、ログインしていると認識されません。
    なので、copy.phpは、予めsession.phpを読み込むように書かれています。

    例えばログイン直後のページのURLは「http://xxx.xx/member/」になっていますが、そのページからログイン状態を保ったまま違うページ(例えばhttp://xxx.xx/member/abc.php)に移動させたい場合。

     1.copy.phpをコピペすると「copy.phpコピー」というファイルができる
     2.そのファイルの名前をabc.phpに変更する
     3.あとはhtmlでホームページを作るのと一緒で、リンクをはってページ移動

    では、また何かありましたらコメント下さいませ。

    • tc
    • September 20th, 2010

    すみません。できました。
    簡単なログイン画面ありがとうございます。

    • tc
    • September 20th, 2010

    こんにちは。
    ログイン後の画面でエラーが出てしまいます。
    下のようにURLかえたのですが、理由がわかりません。

    後初心者なもので「4.member~」のとこがいまいち分かりません。
    memberファイルの中にファイルを入れればいいのですか?
    それとcopyファイルをどのように活用すればいいか教えて下さい。
    たくさん質問すみません。

    #ログイン後のページ(メンバーのみに公開されるページ)
    $login_url = “http://www.youtube.com/?utm_source=googletb”;
    header=(“Location: {$login_url}”);
    exit;
    }

    • yusuke
    • July 14th, 2010

    ありがとうございます。

    「明らかにメールアドレスでないものが入っていないか調べる」に限ることに納得しました。いまの自分では、複雑になればなるほど大変です。

    この度は大変お世話になり、また感激しました。
    もっともっといろんなことを学んでいきたいと思います。

    • admin
    • July 14th, 2010

    yusuke様
    おはようございます。
    あ、気軽に書き込んで頂けると嬉しいです。

    えっと、メールアドレスかどうかを判定する(メールアドレスの正規表現)には、色々と細かい問題があります。
    あそことは別のはらっぱさんのエントリを読まれたら解りやすいかな、と。

    で、その細かい問題を全てクリアするのは(たぶん)ムリで、とりあえず無難な正規表現を書く事になります。
    ただ、実際に企業などで運用する場合は、たいてい登録者に自分のメールアドレスを送ってもらって(←ここで正規表現での簡単なチェックを行います)、そのアドレスに登録URLを自動で返信するというものを利用します。

    また何かあれば、お気軽にコメント下さい。

    • yusuke
    • July 13th, 2010

    こんにちは。
    こんな初心者の僕にわざわざソースまでかいていただき、ありがとうございます。
    こういうとこに書込むのはすごい勇気がいりますよね。

    そして、

    うまく動きました!^^
    すごいですね、プログラムって。だんだん楽しくなってきました。

    メールアドレスですが、123@abc みたいなかたちも受け付けていますが、そういうものなんでしょうか・・・

    • admin
    • July 12th, 2010

    yusuke さん

    こんにちは。

    ユーザーIDの部分をメールアドレスにするには、
    loginフォルダ > signupフォルダ > signin.php
    この「signup.php」ファイルのphp記述部分
    <?php
      phpプログラム
    ?>
    ここに表示されているものと入れ替えて下さい。
    ソースじゃなくて、画面に表示されてるものをコピペでお願いします。

    テスト環境では動きましたが、yusuke様の方でも何度かチェックしてみて下さい。

    えっと、上記プログラムはあくまで「入力された文字がメールアドレスの並び方をしているかどうか」を判定するものであって、
    「存在しているメールアドレスかどうか」を確認するものではありません。

    もしメアドの存在を確認したい場合は、(・∀・)イイ!!Memoさんあたりを参考にされたらよいかと思います。

    それから、これは簡易チェックですので、通らないメアドなんかも存在します。
    詳細は「php メールアドレス 正規表現」で検索してみて下さい。

    • yusuke
    • July 10th, 2010

    ものすごく求めていたソースでした。自分はプログラマではないため書けませんが、動かすこととデザインは出来ました。ありがとうごうざいます。

    もしユーザIDの部分にメールアドレスを入力してもらいたい場合、それがメールアドレスじゃないと登録できないようにすることは可能なのですかね・・・

    おそらく可能なのでしょうけど・・・お手数のない程度でアドバイスとかいただけたら、すごくすごくうれしいです。

    • admin
    • March 4th, 2010

    すみません、ログインしたままの状態を保持して(ログアウトボタンを押さないで)トップページに戻ると真っ白になってしまいますね・・・。
    ログアウトして下さいという案内を入れ忘れてます。
    直したものをアップロードしましたので、そちらをお使い下さい。
    Download

  2. foirfoxにて

    一度、成功しましたが

    2回目から、真っ白な画面になっちゃいます…

    なぜでしょうか?

  1. No trackbacks yet.