因為全棋同學的系統需求,雖然會員機制並不難,他一定也很快就學會了,而我還是寫此教學來引導他,幫助他系統擴展的更快,相信他的系統在未來也一定會很有用的! 而這個教學主要是說明session應用在會員機制上,而教學的程式碼還是有些地方有沒有考慮的很周詳,安全上還是會有瑕疵,希望大家見諒。
(1) 首頁 - 登入頁面 (index.php)
<!-- 設定網頁編碼為UTF-8 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form name="form" method="post" action="connect.php">
帳號:<input type="text" name="id" /> <br>
密碼:<input type="password" name="pw" /> <br>
<input type="submit" name="button" value="登入" />
<a href="register.php">申請帳號</a>
</form>
(2) php連結MySQL資料庫語法(mysql_connect.inc.php)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
//資料庫設定
//資料庫位置
$db_server = "localhost";
//資料庫名稱
$db_name = "mydb";
//資料庫管理者帳號
$db_user = "root";
//資料庫管理者密碼
$db_passwd = "1234";
//對資料庫連線
if(!@mysql_connect($db_server, $db_user, $db_passwd))
die("無法對資料庫連線");
//資料庫連線採UTF8
mysql_query("SET NAMES utf8");
//選擇資料庫
if(!@mysql_select_db($db_name))
die("無法使用資料庫");
?>
(3) 會員ID、PW與MySQL資料庫作認證(connect.php)
<?php session_start(); ?>
<!--上方語法為啟用session,此語法要放在網頁最前方-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
//連接資料庫
//只要此頁面上有用到連接MySQL就要include它
include("mysql_connect.inc.php");
$id = $_POST['id'];
$pw = $_POST['pw'];
//搜尋資料庫資料
$sql = "SELECT * FROM member_table where username = '$id'";
$result = mysql_query($sql);
$row = @mysql_fetch_row($result);
//判斷帳號與密碼是否為空白
//以及MySQL資料庫裡是否有這個會員
if($id != null && $pw != null && $row[1] == $id && $row[2] == $pw)
{
//將帳號寫入session,方便驗證使用者身份
$_SESSION['username'] = $id;
echo '登入成功!';
echo '<meta http-equiv=REFRESH CONTENT=1;url=member.php>';
}
else
{
echo '登入失敗!';
echo '<meta http-equiv=REFRESH CONTENT=1;url=index.php>';
}
?>
(4) 會員登入成功後 頁面 - 此頁面有「新增」、「修改」、「刪除」與「登出」的連結
並且會顯示出所有會員資料(member.php)
<?php session_start(); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include("mysql_connect.inc.php");
echo '<a href="logout.php">登出</a> <br><br>';
//此判斷為判定觀看此頁有沒有權限
//說不定是路人或不相關的使用者
//因此要給予排除
if($_SESSION['username'] != null)
{
echo '<a href="register.php">新增</a> ';
echo '<a href="update.php">修改</a> ';
echo '<a href="delete.php">刪除</a> <br><br>';
//將資料庫裡的所有會員資料顯示在畫面上
$sql = "SELECT * FROM member_table";
$result = mysql_query($sql);
while($row = mysql_fetch_row($result))
{
echo "$row[0] - 名字(帳號):$row[1], " .
"電話:$row[3], 地址:$row[4], 備註:$row[5]<br>";
}
}
else
{
echo '您無權限觀看此頁面!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
?>
(5) 登出 - 洗掉登入使用者之session(logout.php)
<?php session_start(); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
//將session清空
unset($_SESSION['username']);
echo '登出中......';
echo '<meta http-equiv=REFRESH CONTENT=1;url=index.php>';
?>
(6) 加入(註冊)會員 - 「填寫」會員資料 (register.php)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form name="form" method="post" action="register_finish.php">
帳號:<input type="text" name="id" /> <br>
密碼:<input type="password" name="pw" /> <br>
再一次輸入密碼:<input type="password" name="pw2" /> <br>
電話:<input type="text" name="telephone" /> <br>
地址:<input type="text" name="address" /> <br>
備註:<textarea name="other" cols="45" rows="5"></textarea> <br>
<input type="submit" name="button" value="確定" />
</form>
(7) 加入(註冊)會員 - 「新增」會員資料進MySQL資料庫 (register_finish.php)
<?php session_start(); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include("mysql_connect.inc.php");
$id = $_POST['id'];
$pw = $_POST['pw'];
$pw2 = $_POST['pw2'];
$telephone = $_POST['telephone'];
$address = $_POST['address'];
$other = $_POST['other'];
//判斷帳號密碼是否為空值
//確認密碼輸入的正確性
if($id != null && $pw != null && $pw2 != null && $pw == $pw2)
{
//新增資料進資料庫語法
$sql = "insert into member_table (username, password, telephone, address, other) values ('$id', '$pw', '$telephone', '$address', '$other')";
if(mysql_query($sql))
{
echo '新增成功!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
else
{
echo '新增失敗!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
}
else
{
echo '您無權限觀看此頁面!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
?>
(8) 修改會員資料 - 「填寫」要修改之會員資料(update.php)
<?php session_start(); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include("mysql_connect.inc.php");
if($_SESSION['username'] != null)
{
//將$_SESSION['username']丟給$id
//這樣在下SQL語法時才可以給搜尋的值
$id = $_SESSION['username'];
//若以下$id直接用$_SESSION['username']將無法使用
$sql = "SELECT * FROM member_table where username='$id'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
echo "<form name=\"form\" method=\"post\" action=\"update_finish.php\">";
echo "帳號:<input type=\"text\" name=\"id\" value=\"$row[1]\" />(此項目無法修改) <br>";
echo "密碼:<input type=\"password\" name=\"pw\" value=\"$row[2]\" /> <br>";
echo "再一次輸入密碼:<input type=\"password\" name=\"pw2\" value=\"$row[2]\" /> <br>";
echo "電話:<input type=\"text\" name=\"telephone\" value=\"$row[3]\" /> <br>";
echo "地址:<input type=\"text\" name=\"address\" value=\"$row[4]\" /> <br>";
echo "備註:<textarea name=\"other\" cols=\"45\" rows=\"5\">$row[5]</textarea> <br>";
echo "<input type=\"submit\" name=\"button\" value=\"確定\" />";
echo "</form>";
}
else
{
echo '您無權限觀看此頁面!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
?>
(9) 修改會員資料 - 「更新」要修改之會員資料進MySQL資料庫(update_finish.php)
<?php session_start(); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include("mysql_connect.inc.php");
$id = $_POST['id'];
$pw = $_POST['pw'];
$pw2 = $_POST['pw2'];
$telephone = $_POST['telephone'];
$address = $_POST['address'];
$other = $_POST['other'];
//紅色字體為判斷密碼是否填寫正確
if($_SESSION['username'] != null && $pw != null && $pw2 != null && $pw == $pw2)
{
$id = $_SESSION['username'];
//更新資料庫資料語法
$sql = "update member_table set password=$pw, telephone=$telephone, address=$address, other=$other where username='$id'";
if(mysql_query($sql))
{
echo '修改成功!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=member.php>';
}
else
{
echo '修改失敗!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=member.php>';
}
}
else
{
echo '您無權限觀看此頁面!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
?>
(10) 刪除會員資料 - 「填寫」要刪除之會員帳號(delete.php)
<?php session_start(); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
if($_SESSION['username'] != null)
{
echo "<form name=\"form\" method=\"post\" action=\"delete_finish.php\">";
echo "要刪除的帳號:<input type=\"text\" name=\"id\" /> <br>";
echo "<input type=\"submit\" name=\"button\" value=\"刪除\" />";
echo "</form>";
}
else
{
echo '您無權限觀看此頁面!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
?>
(11) 刪除會員資料 - 對MySQL資料庫進行「刪除」會員資料(delete_finish.php)
<?php session_start(); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include("mysql_connect.inc.php");
$id = $_POST['id'];
if($_SESSION['username'] != null)
{
//刪除資料庫資料語法
$sql = "delete from member_table where username='$id'";
if(mysql_query($sql))
{
echo '刪除成功!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=member.php>';
}
else
{
echo '刪除失敗!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=member.php>';
}
}
else
{
echo '您無權限觀看此頁面!';
echo '<meta http-equiv=REFRESH CONTENT=2;url=index.php>';
}
?>
以上若有錯誤,也請各位告知或糾正,謝謝~~~!
本來程式碼要加上實際顯示出來的圖片作介紹的,但因為真的花太多時間了,只好作罷!!!


一般應用程式 (4)
輸入號密碼後
但卻不能登入耶..
板主知道什麼原因嗎
至於未啥不能登入
if($id != null && $pw != null && $row[1] == $id && $row[2] ==$pw
我把row[1]-->row[0] row[2]-->row[1]
就行了
感謝分享程式碼
經過測試 登入以後沒問題可能我編碼問題吧 登出前面會出現 ?的符號
update的部分沒辦法使用 改住址電話 甚至密碼 都出現更新失敗
還有 如果用任何的帳號 都有權限 刪除某帳號的資訊....(驗證的部分可能要追加)
不過很感謝熱心的大大提供
最後再提供一個 就是寫入資料庫的欄位 原本第一張圖片是顯示要建置name
不過 程式裡面對應的欄位應該是username才對~ (發現的一點 希望能夠幫助到)
補
沒啦 是我打錯了 圖沒錯 是usernameXD
在undate的部份我怎麼試都無法成功
一直更新失敗
在這個部份能不能講解一下呢?
還有很感謝你提供的這個範例
對我的學習珍的很有幫助
但是當我修改完資料按下送出後
在update_finish.php的判斷下都顯示修改失敗
回資料庫檢查也發現資料沒有修改進去
我的update.php與update_finish.php都照著你的範例去打的
資料庫也跟範例設的一樣
感謝你的幫助
可是還是一樣
甚至連整個程式碼都複製貼上還是沒辦法成功
是不是還有其他可能呢??
網主修一修吧....
我想不是我的問題....
我試了很多次....
網主你自己試一試updata.php 可不可以運作.....
$id = $_POST['id'];
$pw = $_POST['pw'];
$pw2 = $_POST['pw2'];
$telephone = $_POST['telephone'];
$address = $_POST['address'];
$other = $_POST['other'];這幾行刪掉
再把更新資料庫語法的password=$pw改成password='{$_POST['pw']}'(以此類推)
就可以用了
我也不知道為什麼
並沒有像樓上所說的更改語法,
因為理論上兩種都是一樣的,
但我出現的問題是僅能註冊一次帳號,
無論登入或登出都無法新增,
真摸不著頭緒= =..
換了之後全部正常執行
程式無更動
登入問題
可以登入!!但是在登入前的登入訊息前面多出一行--不知道下面這行是什麼原因??
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\LOG2.php:3) in C:\AppServ\www\LOG2.php on line 3
該怎麼解決
修改會員後我只想顯是那個會員的資料該怎麼做?
謝謝分享~
最近正在研究會員系統的寫法~您分享的 流程 & 設計 很清楚~
謝謝~
================================
另外"無法對資料庫連線" 那位~
可能是 localhost 的密碼設不一樣喔~
檢查一下 mysql_connect.inc.php 那個檔案
改成自己的密碼
你的這一段>>
//更新資料庫資料語法
$sql = "update member_table set password=$pw, telephone=$telephone, address=$address, other=$other where username='$id'";
再更新 新變數 的時候 都沒有加單引號喔 ' $變數 '
$sql = "update member_table set password='$pw', telephone='$telephone', address='$address', other='$other' where username='$id'";
所以才會出錯喔
free
東西寫的還不錯我拷貝一下就能用了
但我要建議你~~~
東西寫得太散了
只要幾支程式就可以.不然你以後維護會很累~~~
登入/登出一隻
主功能選單一隻
查詢/刪除會員一支
修改/新增會員 一支
像連結資料/跟資料存取的弄成一隻 .最好是class
那麼你維護會很簡單的
基本上.你已經很棒了~~~
http://easysoft.twelife.com 速達軟件,免費會計,進銷存,POS,庫存系統軟體
非常謝謝
馬上就學馬上可以用
非常謝謝
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at register_finish.php:1) in register_finish.php on line 1
無法便用
謝謝
謝謝教學, 成功制做了SESSION 的LOGIN,接下來很多東西都會順利制作了,
支教發更多教學
回22樓的
你的是因為UTF8 的BOM,說明: 英文
解決方法: 不要用記事本去寫UTF8 PHP, 改用其它如DREAMWEAVER 或NOTEPAD++ 等等就可以 ^^
MYSQL導入碼是什麼?
其實這篇進步空間還非常很大,
只是本人不是老手,
期盼老手釋出您的優秀源碼供大家參考 ...
感謝樓主~!
感謝樓主喔,我找了很久才找到這麼有用的會員系統,
另外如果是使用big5連線的話,
中文的帳號是可以註冊和登入的(已測試)
如果是增加其他資料(例: 電郵)
就先在MySQL增加資料表,
再到註冊、資料修改等加入剛剛增加的資料填寫位&其他數值就可以了
登入失敗...
<?php session_start(); ?>改成
<?php @session_start(); ?>
會比較好喔0.0
因為妳是用UTF-8編碼(上網找到的)
可是我現在不會出現 session_start(); 錯誤
但是就是登不進去呢 PHP設定問題嗎?
$sql = "update member set password='$pw', telephone='$telephone', address='$address', other='$other' where username='$id'";
將$pw,$telephone…這些加上單引號'' 就可以更新成功了
此外,session_start()是php 的其元件,<?php session_start(); ?>是要放在網頁的最上,請各位注意!
設定好欄位之後?
我把上面的程式碼都放入以後測試登入結果出現 echo '登入失敗!'
我在想是不是資料庫沒弄好? 請教一下資料庫的檔案應該存在哪一個地方呢?
是亂碼 = = """
�b���G
�K�X�G
�ӽбb��
像這個!!
無法登入
我沒辦法 登入, 我的 member.php 裡 $_SESSION['username'] 的值是空白==> if ($_SESSION['username'] != null)
請問我的問題出在哪裡 ?
可以參考24樓的解答
用記事本編輯的話把 UTF-8 改成 Big5 也行
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
我帳號申請可以順利申請
並且在登入時會順利出現登入成功
可是當我登入成功後進入'member.php'
卻一直無法順利擷取到username
也就是"if ($_SESSION['username'] != null)"
的結果一直為False
想請問這問題可能出現在哪
不過沒有出現任何訊息
所以我才覺得是沒有抓擷取到資料
我不知道做了什麼竟然可以順利登入了!!
真是讓我好不解...
不過我有一個小問題~~
就是no設定成"auto_increment"
它NO是不是只會一直增加
不會去判斷NO是否有因為帳號被刪除而空出來的空缺
如果想要做此判斷
不知道要如何修改?
不知道我的問題是否描述的清楚?
無法註冊會員
無法註冊會員, 已經確定數據庫已連接請問是什麼問題呢?
回覆47
出現"新增失敗!"的訊息資料庫裡原本有user資料表(有帳號.密碼...) 那是放會員的資料
將新註冊的會員資料傳回去資料庫的user資料表裡
if(mysql_query($sql)) 這邊老是判斷不過,請問問題大概是出在什麼地方?
有錯誤訊息
有錯誤訊息Notice: A session had already been started - ignoring session_start() in C:\Program Files\Apache Group\Apache2\htdocs\adam\register_finish.php on line 1
新增失敗!
修改會員資料時,若會員其他都修改,只有電話不修改,但會員還是需要再次的輸入電話
應該用幾個判斷來判斷會員是否有填值,若沒填值則就用原值才對
感謝分享~~
請問一下
版主請問一下這種寫法有辦法寫成pear的方式嗎?我申請帳號密碼那邊
資料庫密碼的地方都是空白的
其他帳號電話那些都有
這是什麼問題?
我不知道要怎麼解決....
我在本地主機測試可以註冊 註冊完也可以登入
可是我把它複製到我們學校的FTP空間以後
就沒辦法登入 註冊
一直顯示
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /data/y96/s9611310/www/register_finish.php:4) in /data/y96/s9611310/www/register_finish.php on line 4
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /data/y96/s9611310/www/register_finish.php:4) in /data/y96/s9611310/www/register_finish.php on line 4
無法對資料庫連線
是不是哪邊程式碼要修改
確定帳號密碼都正確
我找不到問題出在哪ˊˋ
是指程式碼裡面嗎? 好像沒有耶@@"
就照著你的教學去操作
在本地測試成功登入 但到FTP就不行了
我連的資料庫是MyDB
我把原本電腦裡的PHP檔全部複製到FTP空間
是不是因為上傳到FTP所以哪邊要修改@@?
請問對外的IP連線要怎麼設定
剛開始接觸這個很多東西都還不太熟悉
不過你的教學簡單明瞭
謝謝你囉!!!對我這新手幫助很多^^
'mysql' 不是內部或外部命令、可執行的程式或批次檔。
怎麼會這樣0.0
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\wamp\www\login\connect.php:4) in C:\wamp\www\login\connect.php on line 4
登入成功!
後自動跳到這邊
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\wamp\www\login\member.php:4) in C:\wamp\www\login\member.php on line 4
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\wamp\www\login\member.php:4) in C:\wamp\www\login\member.php on line 4
登出
您無權限觀看此頁面!
請問這樣算成功了嗎
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\login.php:10) in C:\AppServ\www\login.php on line 10
登入失敗
然後就自己跳到登入失敗連結的頁面
您的網頁一試就成功了XDD
然後上面會出現 header already sent 的問題是因為 header 的重複送出,
如果網頁最開頭不是 PHP 的話必須要加個 <?php ob_start ?>
否則一旦轉頁的時候就會有兩個 header,就會錯誤~
當然直接第一行寫 session_start(); 也是 OK 的~
if($id != null && $pw != null && $row[1] == $id && $row[2] == $pw)
這段我看不懂><
請問前面id是一開始的登入帳號方塊?pw是一開始的登入密碼方塊?
那後面的row[1]== $id . row[2]== $pw 這2個是什麼意思??
$result = mysql_query($sql);
$row = mysql _fetch_row($result);
這2行又是什麼意思??
請解說一下~謝謝
發現你的修改會員資料這項功能,修改之後按確定會修改失敗,不會成功@@
請問是您的php語法有錯嗎@@?此外還有NO(自動排號)也沒有效果@@應該不會是我的問題吧@@?
請幫解除疑惑一下~謝謝
在MySQL 的no欄位 附加那邊 加個 auto_increment 好像是這回事
可是當我附加之後按儲存會出現
錯誤
SQL 語法:
ALTER TABLE `member_table` CHANGE `no` `no` INT( 6 ) NOT NULL AUTO_INCREMENT
MySQL 傳回:
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
請問有解決的辦法嗎??
我設過了還是錯誤耶><
請問有解決辦法嗎@@?
原來要把no欄位設為主索引就可以使用了!!
程式只要 新增會員後 系統儲存 登入後 看到一張圖片 或文章 就好了
幫助我 謝謝^^
$sql = "SELECT * FROM member_table where username = '$id'";
"SELECT * FROM member_table where username = '$id"這個要怎麼改才能有效
謝謝~
功能小修改後, 測試都沒問題, 可以套用到我要的功能裡了...
真是謝啦!
找了很多的php書 很多到session就不講了
不然就是交代得很模糊
看了你的文章 又更有概念跟印象 謝謝你囉
卻會馬上跳出
您無權限觀看此頁面!
怎麼會這樣呢
成功登入, 但在 member page 例出了所有的 Member, 如何才可只例出當前用戶資料 ???
$row[1] == $id && $row[2] == $pw
因為作者資料庫裡的username是第二個欄位所以用row[1]
如果你建資料庫第一個是username第二個是password那就要把程式碼改成
$row[0] == $id && $row[1] == $pw
很多人不願分享程式碼,就一直用嘴吧操作php,對剛入門的新生真的還是不知如何下手,感謝分享.我覺的大陸對岸這方面很願意分享,我有問題google時有用的詳細的資訊很多是對岸提供的,,熱情分享程式碼,學習才會快也知道自己問題是卡在哪個部分,才可以做修正.謝謝版主