###### tags: `PHP`
# 蕭幫1219PHP教學
# 實作 註冊→登入→會員中心
# 資料庫
資料庫名稱 phpclass
表單 user
ID int(5) AUTO_INCREMENT
account varchar(25) utf8_general_ci
name varchar(5)
nickname varchar(10)
sex char(1)
birthday date
mail varchar(25)
address varchar(50)
img varchar(255)
表單 detail
account varchar(25)
password varchar(18)
uni varchar(255)
active varchar(2)
time date
# Register.php
- 一、將要傳值的表單完成
- uniqid() 以為秒計的當前時間,生成一個唯一的ID
```php=
<?php
$uni = sha1(uniqid(rand(),true)); //唯一標識符
?>
<input type="hidden" name="uni" value="<?php echo $uni;?>" />
```
- 二、到main.php準備接資料
```php=
if(isset($_POST['register'])){ /*註冊*/
/*********接收資料***********/
$name = $_POST['name'];
$nickname = $_POST['nickname'];
$account = $_POST['account'];
$password = $_POST['password'];
$checkPassword = $_POST['checkPassword'];
$sex = $_POST['sex'];
$birthday=$_POST['year'].'/'.$_POST['month'].'/'.$_POST['day']; /*將日期合併*/
$mail = $_POST['mail'];
$address = $_POST['address'];
$uni = $_POST['uni'];
$time = date("Y-m-d",time());
/******************************/
/********* 將資料寫進資料庫 *********/
$sql1="INSERT INTO user(`account`,`name`,`nickname`,`sex`,`birthday`,`mail`,`address`,`img`)
VALUES('".$account."','".$name."','".$nickname."','".$sex."','".$birthday."','".$mail."','".$address."','')";
$sql2="INSERT INTO detail(`account`,`password`,`uni`,`active`,`time`)
VALUES ('".$account."','".$password."','".$uni."','','".$time."')";
filterTable($sql1);
filterTable($sql2);
_alert('註冊成功!','login.php');
/*************************************/
}
```
# Login.php
- 一、將要傳出的表單完成
- checkCode.php
- 產生一組驗證碼圖片
- SESSION 全域變數
- 基本用法
```php=
session_start();
$_SESSION['test'] = 'abc';
```
- 二、到main.php準備接資料
```php=
if(isset($_POST['login'])){ /*登入*/
/*接收資料*/
$account = $_POST['account'];
$pwd = $_POST['password'];
$check = $_POST['check'];
/**********/
/******* 登入判斷 ******/
$SQL1="SELECT `account` FROM `detail` WHERE `account` = '".$account."' AND `password` ='".$pwd."'"; /*與資料庫核對有無此帳號與密碼*/
if($check==$_SESSION['checkNum']){
$result=_fetch_array($SQL1);
if($result!=""){
$_SESSION['user'] = $account;
_alert('登入成功!','member.php');
}else{
_alert('登入失敗!','login.php');
}
}else{
_alert('驗證碼錯誤!','login.php');
}
/*************************/
_alert('登入成功!','member.php');
// print_r($result);
}
```
# member.php
- 此處要將資料庫中會員的資料撈出進行顯示
```php=
include "db_connect.php";
$sql = "SELECT a.*,b.`uni`,b.`active`
FROM `user` as a ,`detail` as b
WHERE a.`account` ='{$_SESSION["user"]}'
and b.`account` ='{$_SESSION["user"]}' ";
$result=_fetch_array($sql);
$img=$result['img']; //圖片位置
$active = $result['active']; //認證狀態
```
- 接著將撈出的資料放進相對應的欄位,例如:
```html5=
<label for="" class="col-form-label-lg info"><?php echo $result['name'];?></label>
<input name="name" type="text" class="form-control toChange" placeholder="Name" value="<?php echo $result['name'];?>" >
```
- 更新資料,可以更新的欄位為【姓名】、【暱稱】、【E-mail】、【地址】
```php=
if(isset($_POST['update'])){ /*修改個人資料*/
/*********接收資料***********/
$name = $_POST['name'];
$nickname = $_POST['nickname'];
$email = $_POST['mail'];
$address = $_POST['address'];
/****************************/
/********** 更新資料庫內的資料 **********/
$sql = "UPDATE `user` SET
`name` = '$name',
`nickname` = '$nickname',
`mail` = '$email',
`address` = '$address'
WHERE `account` = '".$_SESSION['user']."'";
filterTable($sql);
/**************************************/
}
```
- 對有無上傳大頭貼進行判斷,為避免在HTML中嵌入太多PHP程式碼導致不易閱讀,將之寫為一個function後,在html中進行呼叫
```php=
function imgs($img){
if($img==""){
echo 'defult.png';
}else{
echo $img.'.jpg';
}
}
```
- 在HTML中呼叫並帶值
```html5=
<img src="images/<?php imgs($img); ?>" style="width:200px; height:200px; margin:-200 0 0 30;">
```
- 上傳圖片
需要上傳圖片的表單需要將form改成如下
```html5=
<form method="POST" action="main.php" enctype="multipart/form-data">
```
並在要顯示上傳圖片按鈕的位置輸入
```html5=
<input name="upfile[]" type="file" multiple="multiple" id="file">
```
後端處理
```php=
/************* 上傳圖片 ***************/
$type=$_FILES['upfile']['type']; //取的上傳圖片的名稱以及檔案類型
$sql1 = "SELECT `uni` FROM `detail` WHERE `account` = '".$_SESSION['user']."'";
$uni=_fetch_array($sql1); //取出會員編碼,準備作為圖片新的名稱
$i=0;
while($i<count($_FILES['upfile']['name'])){ //上傳多張圖片
$newname="img_".$uni[0].$i; //定義新名稱
move_uploaded_file($_FILES['upfile']['tmp_name'[$i],"images/".$newname.".jpg"); //將使用者選定的圖片移動至指定位置
$sqll = "UPDATE `user` set `img` = '$newname' WHERE `account` = '".$_SESSION['user']."'"; //儲存新的圖片名稱
$result = filterTable($sqll);
$i++;
}
/************************************/
```
- 對有無進行信箱認證進行判斷,方式同判斷大頭貼
```php=
function act($active){
if($active==""){
echo '<a href="active.php"> <label for="" class="col-form-label-lg ">未認證</label></a>';
}else{
echo '<label for="" class="col-form-label-lg ">已認證</label>';
}
}
```
- 在HTML中呼叫並帶值
```html5=
<div class="form-group row p-3">
<label for="address" class="col-sm-3 col-form-label-lg">信箱認證狀態</label>
<div class="col">
<?php act($result['active']); ?>
</div>
</div>
```
- 登出&刪除
```php=
if(isset($_POST['logout'])){ /*登出*/
session_destroy();
_alert('登出成功!','login.php');
}
if(isset($_POST['del'])){ /*刪除*/
$sql1 = "DELETE FROM `user` WHERE `account` = '{$_SESSION["user"]}'";
$sql2 = "DELETE FROM `detail`WHERE `account` = '{$_SESSION["user"]}'";
filterTable($sql1);
filterTable($sql2);
session_destroy();
_alert('刪除成功!','login.php');
}
```
認證信箱 active.php
===
```php=
include "db_connect.php";
if($_GET['active']!=""){
$sql="SELECT `uni` FROM `detail` WHERE `account` = '".$_SESSION['user']."'";
$code = _fetch_array($sql);
if($code[0]!=$_GET['active']){
_alert('認證失敗!,請重新操作','member.php');
}else{
$sql1="UPDATE `detail` set `active`='ok' WHERE `account` = '".$_SESSION['user']."'";
filterTable($sql1);
_alert('認證成功','member.php');
}
}else{
$sql="SELECT a.`uni`, b.`mail` FROM `detail` as a , `user` as b WHERE a.`account` = '".$_SESSION['user']."'";
$result=_fetch_array($sql);
$ver='http://'.$_SERVER["HTTP_HOST"].substr($_SERVER['PHP_SELF'],0,9).'/active.php'.'?active='.$result[0];
$mail=$result[1];
mailer($mail,$ver);
}
```
# 修改XAMPP的mysql密碼
C:\xampp\phpMyAdmin\config.inc.php
```php=
/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'http'; <-改成http
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '●●●●●●'; <-填入剛剛輸入的密碼
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';
```
# Dark Theme CSS
{%hackmd theme-dark %}