<?php
require_once('MyAuth.php');    // 引用
require_once('Functions.php'); // 必要
require_once('Db.inc.php');    // 檔案

// 建構 MyAuth 物件時設定參數 flase, 表示呼叫 start() 方法時
// 不自動顯示登入表單, 但在 checkAuth() 方法傳回使用者未登入時 
// 立即轉往 Login.php 網頁
$a = new MyAuth(false);   // 不自動顯示登入表單
$a->start();              // 驗證使用者 
if(!$a->checkAuth()) {
  header('Location:login.php'); // 若未登入則轉至登入網頁
  exit();
}  

header('Content-Type:text/html; charset=utf-8');
$username = $a->getUsername();        // 先取得會員名稱


//-----------------------------------------------------------
// 變更電子郵箱作業
$email    = $a->getAuthData('email'); // 取得註冊的電子郵箱
if(isset($_POST['email']) &&               
   $_POST['email']!= $email) {             // 是否與原資料不同 
  if(!verifyemail($_POST['email']))        // 格式是否正確
    $message = '電子郵件未設定或格式錯誤！';
  elseif(!$a->checkemail($_POST['email'])) // 是否已被使用
    $message = '此電子郵件已被其他會員註冊！';
  else {    
    $sql = sprintf('UPDATE users SET email=%s WHERE username=%s', 
                   $mdb2->quote($_POST['email'],'text'), 
                   $mdb2->quote($username,'text'));
    $res = $mdb2->exec($sql);
    if(PEAR::isError($res)) 
      die('資料庫操作失敗，請稍後再試：'.$res->getMessage());

    // 執行正常結果, 設定訊息。
    $message = '電子郵件已更新！';
  }
}  


//-----------------------------------------------------------
// 變更密碼作業
// 先至資料庫取得舊密碼經MD5編碼的字串
$sql = "SELECT password FROM users WHERE username = " . 
       $mdb2->quote($username,'text');
$res = $mdb2->query($sql);
if(PEAR::isError($res)) 
  die('資料庫操作失敗，請稍後再試：'.$res->getMessage());
$password = $res->fetchOne();

// 檢查表單中輸入的密碼經 MD5 編碼後, 是否與舊密碼編碼結果相同
// 以及『新密碼』及『確認新密碼』兩欄的內容相同
if(md5(mystrip($_POST['oldpass']))==$password && 
   ($_POST['newpass1']==$_POST['newpass2'])) {
  // 呼叫 changePassword() 方法設定新密碼
  $res = $a->changePassword($a->getUsername(),
                            mystrip($_POST['newpass1']));
  if(PEAR::isError($res)) 
    die('操作失敗，請稍後再試：'.$res->getMessage());
  else
    $message .= '密碼已更新！';
} 


//-----------------------------------------------------------
// 變更密碼提示與答案作業  
// 若密碼提示或答案與原有資料不同, 才會進行更新
if(isset($_POST['prompt']) && isset($_POST['answer']) && (
   mystrip($_POST['prompt'])!=$a->getAuthData('prompt') ||  
   mystrip($_POST['answer'])!=$a->getAuthData('answer'))) {  
   // 建立更新密碼提示 (prompt) 和答案 (answer) 的 UPDATE 敘述
   // 為簡化程式邏輯, 即使使用者只更改其中一項
   // 程式也會同時更新這兩個項目
   $sql = sprintf("UPDATE users SET prompt = %s, answer = %s WHERE username = %s",
                 $mdb2->quote($_POST['prompt'],'text'),
                 $mdb2->quote($_POST['answer'],'text'), 
                 $mdb2->quote($username,'text'));
  $res = $mdb2->exec($sql);
  if(PEAR::isError($res)) 
    die('更新失敗，請稍後再試：'.$res->getMessage());
  $message .= '密碼提示及答案已更新！';    
}
?>
<html>
<head>
  <title>會員資料</title>
  <style>
    tr.gray{background-color:#CECECE}
    .message{color:red;font-size:0.7em}
  </style>
  <script type="text/javascript">
  function check()	{
    // 檢查電子郵件欄是否為空白
    if(document.reg.email.value == "")		{
	    alert("未輸入電子郵件信箱");
    }
    // 檢查密碼欄及『確認密碼』欄是否相同
    if(document.reg.newpass1.value != 
       document.reg.newpass2.value) {
	    alert("兩次輸入的密碼不相同");
    }
    // 檢查是否有輸入密碼提示問題, 但沒有輸入答案
    else if(document.reg.prompt.value != "" &&
       document.reg.answer.value == "") {
	    alert("未輸入密碼提示答案");
	    return false;
    }
    else  // 上列檢查都通過才送出表單
      document.reg.submit();
  }
  </script>
</head>
<body style="background-image:url(flowers.jpg)">
<div style="position:absolute;left:115">
<form name=reg method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table cellspacing="0">
  <caption>會員資料<br />
    <span class="message"><?php echo $message; // 輸出訊息 ?></span>
  </caption>
  <tr class="gray">
    <td>會 員 帳 號</td>
    <td><?php echo htmlspecialchars($username); ?></td>
  </tr>
  <tr> 
    <td>舊 密 碼</td>
    <td><input type="password" name="oldpass" size="16" /></td>
  </tr>
  <tr><td colspan="2">(如要變更密碼才需先輸入舊密碼)</td></tr>  
  <tr class="gray"> 
    <td>新 密 碼<br /></td>
    <td><input type="password" name="newpass1" size="16" /></td>
  </tr>
  <tr> 
    <td>確 認 新 密 碼</td>
    <td><input type="password" name="newpass2" size="16" /></td>
  </tr>
  <tr class="gray"> 
    <td>電 子 郵 件</td>
    <td><input type="text" name="email" size="32" value=
      "<?php 
        echo htmlspecialchars($a->getAuthData('email'),ENT_QUOTES); 
      ?>"/>
    </td>
  </tr>
  <tr> 
    <td>密 碼 提 示</td>
    <td><input type="text" name="prompt" size="32" value=
      "<?php 
        echo htmlspecialchars($a->getAuthData('prompt'), ENT_QUOTES); 
      ?>"/>
    </td>
  </tr>
  <tr class="gray"> 
      <td>答 案</td>
      <td><input type="text" name="answer" size="32" value=
        "<?php 
          echo htmlspecialchars($a->getAuthData('answer'), 
                                ENT_QUOTES); 
        ?>"/>
      </td>
  </tr>
  <tr> 
    <td>&nbsp;</td>
    <td><input type="button" value="立即更新" onClick="check();"/></td>
  </tr>
</table>
</form>
<a href="Login.php">回登入網頁</a>
</div>
</body>
</html>
