iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
1
自我挑戰組

30天翻玩動態網站-會員需驗證才能看到部落格文章 系列 第 16

Day16 翻玩adduser.php 驗證與加密

昨天發生的大事:南方澳大橋瞬間坍塌!希望能找到失蹤的人,天佑台灣。
而今天我們要瞧瞧如何用 PHP 驗證使用者,然後將驗證通過的寫入SQL資料庫。

如果你是第一次看本系列的邦友,可以先點擊下方 Day01 文章,內含 30 秒的 Demo 短片跟原始碼下載。

玩轉 adduser.php

我們先快速瀏覽過程式碼,看看有甚麼新奇的玩意?!

<?php
session_start();

//Open a new connection to the MySQL server
$mysqli = new mysqli('localhost', 'root', '12345', 'perfectcup');

//Output any connection error
if ($mysqli->connect_error) {
    die('Error : (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

$fname = mysqli_real_escape_string($mysqli, $_POST['fname']);
$lname = mysqli_real_escape_string($mysqli, $_POST['lname']);
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);

//VALIDATION

if (strlen($fname) < 2) {
    echo 'fname';
} elseif (strlen($lname) < 2) {
    echo 'lname';
} elseif (strlen($email) <= 4) {
    echo 'eshort';
} elseif (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    echo 'eformat';
} elseif (strlen($password) <= 4) {
    echo 'pshort';
	
//VALIDATION
	
} else {
	
	//PASSWORD ENCRYPT
	$spassword = password_hash($password, PASSWORD_BCRYPT, array('cost' => 12));
	
	$query = "SELECT * FROM members WHERE email='$email'";
	$result = mysqli_query($mysqli, $query) or die(mysqli_error());
	$num_row = mysqli_num_rows($result);
	$row = mysqli_fetch_array($result);
	
		if ($num_row < 1) {

			$insert_row = $mysqli->query("INSERT INTO members (fname, lname, email, password) VALUES ('$fname', '$lname', '$email', '$spassword')");

			if ($insert_row) {

				$_SESSION['login'] = $mysqli->insert_id;
				$_SESSION['fname'] = $fname;
				$_SESSION['lname'] = $lname;

				echo 'true';

			}

		} else {

			echo 'false';

		}
		
}

?>

驗證條件

寫入資料庫

加密方式

  • 這是今天的重點部分,我們來多看他一眼
$spassword = password_hash($password, PASSWORD_BCRYPT, array('cost' => 12));
  • md5:https://zh.wikipedia.org/wiki/MD5
    • 已被破解,目前多用來檢驗檔案副本是否正確無誤的工具。
  • Hash:https://zh.wikipedia.org/wiki/散列函數
    • 算是目前主流的加密方法之一,雜湊函式必須具有不可逆性。

總結

我們對照前兩天的 register.php 註冊表單的內容,了解如何通過 PHP 來連接資料庫。
透過兩位 PHP 程式跳著 POST 舞步,達到驗證與寫入資料庫,是不是很有Fu~
只是傳輸方便,相對也可能遇到駭客的攔截,所以對其中的密碼使用加密來處理。
謝謝你的觀看,我們明天再會。


上一篇
Day15 jQuery 與 Ajax 驗證註冊表單
下一篇
Day17 翻玩login.php
系列文
30天翻玩動態網站-會員需驗證才能看到部落格文章 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言