php 實做會員制度基礎架構


電音大帝國 Alpha


填入 E-mail ,驗證後取得更多功能(例如:我的最愛...)

E-mail: 請至您的信箱點擊開通連結

登入

信箱:
密碼:
query("SET NAMES 'utf8'");
$q1 = "SELECT passwd FROM user WHERE mail_address='$mail_address'";
$r1 = $conn->query($q1);
if ( $r1 === FALSE ){
    echo "Connect Failed with: $conn->error
n"; $conn->close(); exit; } else{ $row_data = $r1->fetch_assoc(); } var_dump($row_data['passwd']); var_dump($passwd_encrypt); if ( $row_data['passwd'] == $passwd_encrypt ){ $_SESSION['mail_address'] = $mail_address; echo $_SESSION['mail_address']; header('Location: main.php'); } else{ echo "密碼錯誤"; } ?>




電音大帝國 Alpha


成功登入

登出

query("SET NAMES 'utf8'");
$q1 = "UPDATE user SET check_email='1', passwd='$passwd_encrypt' WHERE mail_address='$mail_address'";
$r1 = $conn->query($q1);
if ( $r1 === FALSE ){
    echo "Connect Failed with: $conn->error
n"; $conn->close(); exit; } else{ $_SESSION['mail_address'] = $_POST['mail_address']; header('Location: main.php'); } ?>



電音大帝國 Alpha


query("SET NAMES 'utf8'");
$q1 = "SELECT mail_address,passwd FROM user WHERE mail_address = '$mail_address'";
$r1 = $conn->query($q1);
if ( $r1 === FALSE ){
    echo "Connect Failed with: $conn->error
n"; $conn->close(); exit; } $row_data = $r1->fetch_assoc(); echo "目前密碼為".$row_data['passwd']; echo "
"; if ( $row_data['passwd'] == $sn ){ echo "您可以設定您自己的密碼,或者直接進入網站"; echo ""; echo ""; echo ""; echo ""; echo ""; echo "
"; } else{ //寫入 user 資料表的信箱不見得都是已經開通的,要有一個可以區別是否為已開通的帳號的方法 echo "認證錯誤。請重新註冊"; } ?>
query("SET NAMES 'utf8'");
//這邊未來還要再加入驗證 $mail_address 是否已經開通過
$q1 = "INSERT INTO user(mail_address, passwd) VALUES ('$mail_address', '$sn')";
$r1 = $conn->query($q1);
if ( $r1 === FALSE ){
    echo "Connect Failed with: $conn->error
n"; $conn->close(); exit; } $subject = "電音大帝國帳號開通信件"; $body = "

點擊下面開通連結,以取得更多功能!

Click the link to upgrade your account!


http://ccnsweb.twbbs.org/mp3/get_account.php?mail_address=$mail_address&sn=$sn"; $mail = new PHPMailer(); $mail->IsSMTP(); // set mailer to use SMTP $mail->CharSet = "utf-8"; $mail->Encoding = "base64"; $mail->From = "xxx@gmail.com"; $mail->FromName ="電音大帝國"; $mail->Host ="ssl://smtp.gmail.com"; $mail->Port = 465; //default is 25, gmail is 465 or 587 $mail->SMTPAuth = true; //ssl://smtp.gmail.com:465 //ssl://smtp.live.com:25 ssl://pop3.live.com:995 $mail->Username = "xxxx@gmail.com"; $mail->Password = "xxxx"; $mail->AddAddress($mail_address); $mail->WordWrap = 50; $mail->IsHTML(true); $mail->Subject = $subject; $mail->MsgHTML($body); if(!$mail->Send()) { echo "驗證信件寄出失敗"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "驗證信件已寄出
請收信並點擊開通連結"; ?>

還要有 cookie 才能做自動化登入

PHPMailer 寄送 HTML 格式信件到 Gmail

<?php
require_once('./include/class.phpmailer.php');
$subject = "kawaiftp";
$body = "

H1

"; $mail = new PHPMailer(); $mail->IsSMTP(); // set mailer to use SMTP $mail->CharSet = "utf-8"; $mail->Encoding = "base64"; $mail->From = "xxxx@gmail.com"; $mail->FromName ="xxx"; $mail->Host ="ssl://smtp.gmail.com"; $mail->Port = 465; //default is 25, gmail is 465 or 587 $mail->SMTPAuth = true; $mail->Username = "xxxx@gmail.com"; $mail->Password = "xxxx"; $mail->AddAddress("xxxx@gmail.com");//收件者 $mail->AddBCC("xxxx@gmail.com");//密件副本收件者 $mail->AddBCC("xxxx@gmail.com");//密件副本收件者 $mail->WordWrap = 50; // 50 words per line $mail->IsHTML(true); $mail->Subject = $subject; #$mail->Body = $body;//使用 body 也可以加入內文,但不支援 html $mail->MsgHTML($body); if(!$mail->Send()) { echo "通知信件寄出失敗"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "通知信件已寄出"; ?>

收信者和密件副本的參數都只能一次放上一個 E-mail 位址

但是可以多呼叫幾次 AddBCC() 來加入多個密件副本收件者

PHPMailer 介紹與使用
PHPMailer 官方網站

Web 各種樣式的按鈕

.action_button_sm {
height: 22px;
border: 1px solid #ccc;
background: #fdfdfd url(http://02.static.slide.com/version/20110204114236/images/interface/gradient_button_sm.gif) repeat-x bottom;
line-height: 20px;
padding: 2px 10px;
font-size: 8pt;
cursor: pointer;
}
.my_title {
font-size: 150%;
color: red;
line-height: 30px;
}

樣式一(呼叫 javascript 功能)

樣式一


.action_button_sm {
 height: 22px;
 border: 1px solid #ccc;
 background: #fdfdfd url(http://02.static.slide.com/version/20110204114236/images/interface/gradient_button_sm.gif) repeat-x bottom;
 line-height: 20px;
 padding: 2px 10px;
 font-size: 8pt;
 cursor: pointer;
}
.my_title {
 font-size: 150%;
 color: red;
 line-height: 30px;
}

樣式一

這個按鈕的 css 屬性 background 裡面,color(#fdfdfd) 和 url 指定的圖片是有互相搭配的。整個按鈕高度為 22px,這張 gif 圖片高度 18px 並使用 bottom 屬性置底,上面多餘出來的 4px 就是 #fdfdfd 的顏色了!
這樣的按鈕要附加功能時,可以使用 javascript 的 onclick 來附加功能上去!
(按鈕背景圖片取自:http://www.slide.com)

樣式二(表單按鈕)

完整範例:http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_input_src


當表單的 input type 屬性設定為 image 時,這個 input 的功能如同 submit 的送出按鈕,並且可以設定以圖片代替瀏覽器預設的按鈕圖示!

html5 選取多個檔案上傳 multiple file upload

do.html





如果瀏覽器支援 html5,則 input type=file 的部份多給一個參數「multiple」 就可以升級成為多選了
同時要把input name的值修改為陣列的型態,也就是多加上「[ ]」就可以了

get.php

<?php
$num = count($_FILES["uploads"]["name"]);
//echo "共上傳了{$num}個檔案
n"; for($i = 0 ; $i < $num ; $i++){ //echo "{$_FILES[uploads][name][$i]}
n"; move_uploaded_file($_FILES[uploads][tmp_name][$i], "./".$path."/".$_FILES[uploads][name][$i]); } header("HTTP/1.1 301 Moved Permanently"); header("Location: http://iwhiori.twbbs.org"); ?>

升級成為多選之後,接收檔案的 php 程式碼部份要修改為處理「檔案陣列」!

真正的上傳過程我們不用處理
只要處理上傳完畢之後的動作就可以了
不論是多選或者單選,上傳之後都要把檔案從暫存區移動到我們真正要儲存的地方
例如 php 預設的暫存資料夾是 /tmp(已 linux 為例,反正沒什麼人以 windows 為伺服器吧! )
那就是使用 move_uploaded_file 這個函數將檔案從 /tmp 移動到你要的地方
上面的 get.php 裡面的 move_uploaded_file 第一個參數是使用 $_FILE 陣列來取得 tmp 資料的位置
第二個參數是我自己伺服器上面的位置,我用 $path 這個參數來存放(這個參數在 do.php 裡面傳遞過來,這邊省略)

初探 webGL 使用 X3DOM framework 操作!

其實要使用這個 x3dom 框架來編輯 webGL 的東西不用另外安裝什麼,它目前也沒有開發到 IDE (整合開發環境)這麼強大

就只要在網頁程式碼裡面加入 x3dom.js (和 x3dom.css)就可以使用 x3dom 的東西(標籤)了!!

下面舉一個最簡單的範例(記得要用支援 webgl 的瀏覽器,我使用Chromium 6.0.477.0,開啟時給參數./chrom –enabl-webgl)


  
    My first X3DOM page
    
    
  
  
    

My X3DOM world

This is my first html page with some 3d objects.

出來的結果如下圖:

可以使用滑鼠對這個方塊進行操作!(可以使用滑鼠進行操作應該是在 x3dom.js 裡面定義好的)

<scene> 定義進入 3D 場景
<shape> 定義形狀物件開始,所以接下來有 <box> <appearence>
<appearence> 在這個範例中,這個標籤裡面只有 <material> 這個標籤,用來標示材質顏色為紅色

您可以按這裡查找更多元素的描述與使用

並且可以用滑鼠左中右三個按鍵進行操作,可以做什麼動作自己試試看就知道了!
您可以按這裡查找更多互動的描述與使用
(這個頁面裡面的互動只有基本的透過滑鼠,沒有說明如何自訂更多的動作)

介紹 x3dom 元素的頁面裡面,舉圓柱體為例

Cylinder : X3DGeometryNode {
  SFNode  [in,out] metadata NULL [X3DMetadataObject]
  SFBool  []       bottom   TRUE
  SFFloat []       height   2    (0,∞)
  SFFloat []       radius   1    (0,∞)
  SFBool  []       side     TRUE
  SFBool  []       solid    TRUE
  SFBool  []       top      TRUE
}

裡面的 bottom, height, radius, side, solid, top 都是 Cylinder 的參數
只要在程式碼的 <Cylinder height=4> 標籤裡面寫上,並且給值就可以了!

完整實做 – php 對 pop3 mail server 的帳號驗證架構





   VOTE 
  


<?php
if( !isset($_SESSION['USER_ID']) ){
    echo <<<eobody


帳號:
密碼:
EOBODY; } else{ $user_id = $_SESSION['USER_ID']; echo "登出 $user_id"; } ?>
<?php
require_once('../../sessions.inc');
$user_id = $_POST['USER_ID'];
$user_passwd = $_POST['USER_PASSWD'];
if( isset($user_id) && isset($user_passwd) ){
  //核對學校信箱帳號密碼
  $fp = fsockopen("mail.ncku.edu.tw", 110, &$errno, &$errstr, 10);
  $answer1 = fgets($fp,128);
  //echo "answer1 = $answer1
"; if (!$fp) { echo "$errstr ($errno)
n"; }else{ fwrite($fp, "USER $user_idn"); $answer2 = fgets($fp,128); //echo "answer2 = $answer2
"; fwrite($fp, "PASS $user_passwdn"); $answer3 = fgets($fp,128); //echo "answer3 = $answer3
"; if( strpos($answer3, 'Logged') == FALSE ){ echo "No!
"; echo "回首頁"; } else{ $_SESSION['USER_ID'] = $_POST['USER_ID']; header('Location: main.php'); } } fclose ($fp); } ?>




   VOTE 
  


<?php
if( !isset($_SESSION['USER_ID']) ){
    echo "登入異常
"; echo "回首頁"; } else{ $user_id = $_SESSION['USER_ID']; echo "$user_id 登入完成
"; echo "登出 $user_id"; } ?>