
批改狀態(tài):合格
老師批語(yǔ):做之前,做好規(guī)劃, 會(huì)好很多
文檔說明(圖片):
1.Connect.php
<?php
namespace demo_MVC;
//數(shù)據(jù)庫(kù)參數(shù)
class Connect{
private $param =[
'DB_HOST'=>'localhost',
'DB_TYPE'=>'mysql',
'DB_NAME'=>'my_user',
'DB_PASSWORD'=>'root123',
'DB_USER'=>'root',
'DB_CHARSET'=>'utf8',
'DB_PORT'=>'3306'
];
// public $dsn = "mysql:host=localhost;dbname=my_user;charset=utf8";
//連接數(shù)據(jù)
public function link(){
try{
//連接數(shù)據(jù)款
return $pdo = new \PDO("mysql:host=localhost;dbname=my_user;charset=utf8",$this->param['DB_USER'],$this->param['DB_PASSWORD']);
} catch(\PDOException $e){
//捕捉特定于數(shù)據(jù)庫(kù)信息的PDOEXCEPTION 異常
echo $e->getMessage();
} catch(\Throwable $e){
//捕捉擁有Throwable接口的錯(cuò)誤或者其他異常
echo $e->getMessage();
}
}
}
2.Model.php
<?php
namespace demo_MVC;
//加載數(shù)據(jù)庫(kù)連接
require "./connect.php";
//開啟session會(huì)話
session_start();
class Model extends Connect
{
//驗(yàn)證
public function checked($data){
$pdo = parent::link();
$sql = "SELECT * FROM `mu_user` WHERE `username`=?";
$stm = $pdo ->prepare($sql);
$stm ->bindParam(1,$data['username']);
$stm ->execute();
$result = $stm ->fetch();
if($result && $result['password'] == md5($data['password'])){
$arr['status'] =200;
$arr['msg'] ="登錄成功";
}else{
$arr['status'] =100;
$arr['msg'] ="賬號(hào)或密碼有誤";
}
return $arr;
}
}
if(strtolower($_POST['code']) == strtolower($_SESSION['codenum'])){
$model = new Model();
$res = $model->checked($_POST);
}else{
$res['status'] = 100;
$res['msg'] = '驗(yàn)證碼有誤';
}
echo json_encode($res);
3.code.php
<?php
require_once __DIR__.'/composer/vendor/autoload.php';
use Gregwar\Captcha\CaptchaBuilder;
//開啟session會(huì)話
session_start();
//獲取驗(yàn)證圖片
$captcha = new CaptchaBuilder;
$captcha->build()->save('out.jpg');
$_SESSION["codenum"] = $captcha ->getPhrase();
$data['code'] = $captcha ->inline();
echo json_encode($data);
4.login.html
<?php
require "./code.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>登錄</title>
</head>
<style>
h2 {
text-align: center;
}
form {
width: 350px;
border: 1px solid;
margin-left: 38%;
background-color: beige;
}
form div {
margin: 15px 15px;
display: flex;
flex-direction: column;
}
form div input {
margin: 10px 0px;
}
img {
width: 200px;
}
img:hover {
cursor: pointer;
}
button:hover {
cursor: pointer;
}
span {
font-size: 1.5rem;
}
.reslut {
width: 350px;
margin-left: 38%;
margin-top: 20px;
background-color: rgb(147, 197, 193);
}
.reslut > span:nth-of-type(2) {
color: chocolate;
}
</style>
<body>
<h2>登 錄</h2>
<form action="" method="POST" onsubmit="return false">
<div>
<label for="username">賬號(hào):</label>
<input type="text" name="username" id="username" />
</div>
<div>
<label for="password">密碼:</label>
<input type="password" name="password" id="password" />
</div>
<div>
<label for="code">驗(yàn)證碼:</label>
<input type="text" name="code" id="code" />
<img src="" onclick="getcode()" id="codeimg" />
</div>
<div>
<button>登錄</button>
</div>
</form>
<div class="reslut">
<span>登錄結(jié)果:</span>
<span></span>
</div>
</body>
<script type="text/javascript">
//立即調(diào)用函數(shù)
(function () {
getcode();
})();
//ajax--GET請(qǐng)求方式獲取驗(yàn)證碼圖片
function getcode() {
//創(chuàng)建ajax對(duì)象
var xhr = new XMLHttpRequest();
//監(jiān)聽請(qǐng)求
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
// // xhr.responseText:保存請(qǐng)求成功后的文本數(shù)據(jù),是個(gè)json字符串,必須用JSON.parse()轉(zhuǎn)換js對(duì)象
var data = JSON.parse(xhr.responseText);
document.getElementById("codeimg").src = data["code"];
}
};
//初始化請(qǐng)求參數(shù)
xhr.open("GET", "code.php");
//發(fā)送請(qǐng)求
xhr.send(null);
}
//ajax--POST請(qǐng)求方式驗(yàn)證登錄
var btn = document.querySelector("form button");
var form = document.querySelector("form");
btn.addEventListener("click", function () {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
// // xhr.responseText:保存請(qǐng)求成功后的文本數(shù)據(jù),是個(gè)json字符串,必須用JSON.parse()轉(zhuǎn)換js對(duì)象
var obj = JSON.parse(xhr.responseText);
var reslut = document.querySelector(".reslut");
reslut.children[1].innerText = obj["msg"];
}
};
// 初始化請(qǐng)求參數(shù)
xhr.open("POST", "Model.php");
// 使用FormData來組織數(shù)據(jù),最終仍是以表單數(shù)據(jù)方式發(fā)送
var data = new FormData(form);
//發(fā)送請(qǐng)求
xhr.send(data);
});
</script>
</html>
效果圖:
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)