【会员订阅系列4】html+ajax无刷新登录+显示更多+php后端

会员订阅与下载的功能,把过程做成一个【会员订阅系列】进行分享。之前已经发布了前端控制下载、前端控制显示条数、、会员登录验证、弹出登录,本篇将实现后端的会员ajax的PHP登录接口。这里补充一下,前几篇我们都讲前端,现在开始讲一些后端与前端的配合。同样从最简单的方式开始,易于所有人都搞懂原理。


前言

知识付费现在已经完全在互联网上流行开了,从文章到小说、从创意到程序、从音乐到影视等等,都需要前后端的订阅控制,所以我们必须了如指掌,并且一学就会。


一、会员订阅功能是什么?

简而且概之就是,通过前端或后端让用户,根据会员等级看到相应的内容。这个权限可能是长期或一次性或多次性的。

二、使用步骤

1.引入库

//加入jquery库。

2.php后端接口

文件 user.php

<?php

// 登录处理
if ($_GET['tx'] === 'login') {
    // 假设正确的帐号和密码
    $correct_username = '1388000';
    $correct_password = '123456';

    // 接收POST请求中的用户名和密码
    $username = $_POST['u'];
    $password = $_POST['p'];

    // 检查用户名和密码是否匹配
    if ($username === $correct_username && $password === $correct_password) {
        // 登录成功
        $response = array('code' => 1, 'user' => $username);

        // 设置COOKIE
        setcookie('user', $username, time() + (86400 * 30), '/'); // 有效期30天

        echo json_encode($response);
    } else {
        // 登录失败
        $response = array('code' => 0);

        echo json_encode($response);
    }
}
?>

三、html+ajax前端

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>会员显示更多实例</title> 
<script src="https://g.csdnimg.cn/lib/jquery/1.12.4/jquery.min.js"></script> 
<style>
#showMore{width:100%;text-align:center;
   width: 100%;
    padding-top: 78px;
    background-image: -webkit-gradient(linear,left top, left bottom,from(rgba(255,255,255,0)),to(#fff));
    background-image: linear-gradient(-180deg,rgba(255,255,255,0) 0%,#fff 100%);cursor: pointer;
    position: relative;
    z-index: 996;
    padding-top: 160px;
    bottom: -1px;
    margin-top: -160px;
	color:#0c5081;
	}
</style>
</head>  
<body>  
    <h1>控制显示数据条数</h1>  
    <table class="sj" id="table_down">
	<tbody>
	<tr><td><div class="t2">日期</div></td><td><div class="t2">现有确诊</div></td><td><div class="t2">累计确诊</div></td><td><div class="t2">治愈病例</div></td><td><div class="t2">死亡病例</div></td></tr>
	<tr><td>'2022-10-21'</td><td>82</td><td>2025</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-22'</td><td>82</td><td>2025</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-23'</td><td>82</td><td>2025</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-24'</td><td>84</td><td>2027</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-25'</td><td>84</td><td>2027</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-26'</td><td>84</td><td>2027</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-27'</td><td>85</td><td>2028</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-28'</td><td>85</td><td>2028</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-29'</td><td>86</td><td>2029</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-30'</td><td>87</td><td>2030</td><td>1940</td><td>3</td></tr><tr><td>'2022-10-31'</td><td>90</td><td>2033</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-1'</td><td>90</td><td>2033</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-2'</td><td>95</td><td>2038</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-3'</td><td>99</td><td>2042</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-4'</td><td>105</td><td>2048</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-5'</td><td>105</td><td>2048</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-6'</td><td>106</td><td>2049</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-7'</td><td>108</td><td>2051</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-8'</td><td>115</td><td>2058</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-9'</td><td>126</td><td>2069</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-10'</td><td>149</td><td>2092</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-11'</td><td>165</td><td>2108</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-12'</td><td>187</td><td>2130</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-13'</td><td>217</td><td>2160</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-14'</td><td>265</td><td>2208</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-15'</td><td>305</td><td>2248</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-16'</td><td>351</td><td>2294</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-17'</td><td>426</td><td>2369</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-18'</td><td>525</td><td>2468</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-19'</td><td>617</td><td>2560</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-20'</td><td>753</td><td>2696</td><td>1940</td><td>3</td></tr><tr><td>'2022-11-21'</td><td>925</td><td>2869</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-22'</td><td>1101</td><td>3045</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-23'</td><td>1245</td><td>3189</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-24'</td><td>1322</td><td>3266</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-25'</td><td>1423</td><td>3367</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-26'</td><td>1515</td><td>3459</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-27'</td><td>1619</td><td>3563</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-28'</td><td>1741</td><td>3685</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-29'</td><td>1849</td><td>3793</td><td>1940</td><td>4</td></tr><tr><td>'2022-11-30'</td><td>1971</td><td>3915</td><td>1940</td><td>4</td></tr><tr><td>'2022-12-1'</td><td>2099</td><td>4043</td><td>1940</td><td>4</td></tr><tr><td>'2022-12-2'</td><td>2235</td><td>4179</td><td>1940</td><td>4</td></tr><tr><td>'2022-12-3'</td><td>2384</td><td>4328</td><td>1940</td><td>4</td></tr><tr><td>'2022-12-4'</td><td>2530</td><td>4474</td><td>1940</td><td>4</td></tr><tr><td>'2022-12-5'</td><td>2740</td><td>4684</td><td>1940</td><td>4</td></tr><tr><td>'2022-12-6'</td><td>2456</td><td>4863</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-8'</td><td>2625</td><td>5032</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-7'</td><td>2568</td><td>4975</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-9'</td><td>2715</td><td>5122</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-10'</td><td>2715</td><td>5122</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-11'</td><td>2785</td><td>5192</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-12'</td><td>2785</td><td>5192</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-13'</td><td>2785</td><td>5192</td><td>2403</td><td>4</td></tr><tr><td>'2022-12-14'</td><td>2785</td><td>5192</td><td>2403</td><td>4</td></tr>
	</tbody>
	</table>
	<div id="showMore">查看更多</div>
<script> 
//本例因为讲前端登录验证我们用COOKIE,如果涉及到具体超作以后再用加密身份验证(在后端时讲)。
//首先写一个 COOKIE 函数,用来读取COOKIE时使用
function getCookie(name) {
        var value = "; " + document.cookie;  
        var parts = value.split("; " + name + "=");  
        if (parts.length == 2) return parts.pop().split(";").shift();  
        return null;  
} 

 //登录界面函数
function userG(){
        var overlay = $('<div id="overlay"></div>').css({
            'position': 'fixed',
            'top': 0,
            'left': 0,
            'width': '100%',
            'height': '100%',
            'background-color': 'rgba(0, 0, 0, 0.5)',
            'z-index': '9990',
			'display': 'block'
        });
		var loginBox = $('<div id="loginBox"></div>').css({
			'position': 'fixed',
			'top': '50%',
			'left': '50%',
			'transform': 'translate(-50%, -50%)',
			'width': '360px',
			'background-color': '#fff',
			'padding': '20px',
			'border': '1px solid #ccc',
			'box-shadow': '0 0 10px rgba(0, 0, 0, 0.1)',
			'z-index': '9999'
		});
		var usertxt = $('<p class="user_txt">登录会员可获得任意订制功能</p>');
		var usernameInput = $('<input type="text" name="username" placeholder="用户名"><br>');
		var passwordInput = $('<input type="password" name="password" placeholder="密码"><div class="lmsg"></div>');
		var loginButton = $('<button>登录</button>').click(function() {
			var username = usernameInput.val();
			var password = passwordInput.val();
			$.ajax({
			//先把登录接口写在这里,后端的时侯再讲
				url: '/user/user.php?tx=login',
				type: 'POST',
				data: {
					u: username,
					p: password
				},
				dataType: 'json',
				success: function(response) {
					if (response.code === 1) {
					var usv=response.user ;
					loginy(usv);
					$(".lmsg").text('登录成功!');
					loginBox.remove();
					overlay.remove();
					} else {
						$(".lmsg").text('登录失败,请检查用户名和密码!');
					}
				},
				error: function() {
					$(".lmsg").text('网络错误,请稍后再试!');
				}
			});
		});
		var ress = $('<button class="ress">注册</button>').click(function() {
			event.preventDefault(); 
			window.location.href = '/user/user.php?tx=res';
		});
		var closeButton = $('<button>关闭</button>').click(function() {
			loginBox.remove();
			overlay.remove();
		});
		loginBox.append(usernameInput, passwordInput, usertxt, loginButton, ress, closeButton);
		 $('body').append(overlay, loginBox);
};
 
	//这里可以控制是否订阅:true可展开;false不能展开
    var isLoggedIn = true  ; 
	document.addEventListener("DOMContentLoaded", function () {
	//设定ID‘showMore’ 为按扭
    var showMoreButton = document.getElementById('showMore');  
	//获取id为table_down的表
    var table = document.getElementById('table_down');  
    var rows = table.rows; 
	//控制显示数据条数	
    var initialRowCount = 5; 
   //做一个全部显示的函数		
    function toggleRows() {
        for (var i = 0; i < rows.length; i++) {
            rows[i].style.display = (i < initialRowCount || isLoggedIn) ? '' : 'none';  
        }  
        showMoreButton.style.display = (rows.length > initialRowCount && !isLoggedIn) ? '' : 'none';  
    }  
//点击ID为‘showMore’的显示按扭
showMoreButton.addEventListener('click', function () {
	//验证是否登录
	//读取用户COOKIE,COOKIE的名字(键)为user
	var userCookie = getCookie('user');
	//这里先简单判断一下 是否是 用户已经登陆 ,复杂的身份验证(在后端时讲)。
	if (userCookie !== null) {
		//已经登录 调用全部显示的函数
	    toggleRows();
	} else {
	//未登录 调用登录界面函数,弹出登录界面
		userG(); 
	}
});

   //初始显示表的条数
	for (var ii = 0; ii < rows.length; ii++) { 
         rows[ii].style.display = (ii < initialRowCount ) ? '' : 'none';  
	}  
	});
</script>
</body>  
</html>

总结

这里我们就完成了前端html+ajax无刷新登录 ,后端验证用户并写入COOKIE。