PHP管理员登陆、验证与添加(前端验证)
//造成乱码的原因为数据库(源),网页编码,文件编码,php代码,数据库传输过程编码mysql_query('SET NAMES utf8')
header('Content-Type:text/html;charset=utf-8');
header('Cache-control:private'); //页面启用session之后,退回去时表单数据还存在。
session_start(); //session_start()前面不能有内容输出
//连接服务器,数据库,(服务器的IP地址或者域名,用户名,密码)
$server = '127.0.0.1';
$user = 'root';
$pwd = '';
//将连接结果存入一个变量,并用错误抑制符@
@ $linkid = mysql_connect($server,$user,$pwd);
//输出错误,终止程序。
if(!$linkid)
{
die('与服务器'.$server.'的连接失败,原因为'.mysql_error());
}
//选择数据库
$database = 'e1215cms';
$rs = mysql_select_db($database);
if(!$rs)
{
die('选择数据库'.$database.'失败,错误原因为'.mysql_error());
}
//数据库传输过程编码mysql_query()该函数可以将代码放入服务器、数据库上运行。。
mysql_query('SET NAMES utf8');
将这部分代码作为独立文件,放入includes文件夹,将代码放入新建的config.php文件。
用require('../includes/config.php');调用.
//流程:入口页—login.html,用post方式提交到login.php,到数据库查询post过来的password和username。
$username = $_POST['username'];
$password = md5( $_POST['password'] ); //由于表单中的密码被加密,所以要用加密函数
$sql=" select * from `tb_admin` where `username` = '$username' and `password` = '$password' LIMIT 1"; //加快执行效率
//用双引号
$sql = 'SELECT FROM `tb_admin` WHERE `username ` = " '.$username.' " AND `password` = " '.$password.' " ';
$result = mysql_query($sql); //$result代表执行sql语句后的结果集,用来判断sql语句是否执行成功
//判断sql语句是否出错,如果有错,终止程序,输出错误。如果查询数据为0,依然代表执行成功,不代表$result为false.
if(!$result)
{
die(mysql_error());
}
//从查询到的结果集中抓取到$r
$data = mysql_fetch_assoc($result);
if(!$data)
{
die('<script>alert("不正确");window.location="login.html"</script>') //退回去,不保留原表单中的数据。
die('<script>alert("不正确");window.history.back()</script>'); //退回去,能够保留原表单中的数据。
}
else
{
//验证管理员登陆,用全局变量$_SESSION,服务器端生成文件,安全性高。$_COOKIE验证会员登录,客户端生成,安全性不高。
$_SESSION['username'] = $data['username'];
$_SESSION['id'] = $data['id'];
echo '输入正确,您的ID是:'.$data['id'];
print_r($r); //返回的为数组
header('location:index.php'); //PHP跳转
die('<script>window.location="index.php";</script>')
}
检测$_SESSION,放入includes,
session_start();
if(!$_SESSION['username'] || !$_SESSION['id'])
{
header('Location:login.html');
die('<script>window.location="login.html";</script>');
}
//添加管理员,add-admin.php,验证功能尽量写在前端。
require(../includes/check-admin.php);
<script>
function check(obj)
{
/*var n = document.getElementsByName('username')[0]; //getElementsByName抓取到的是数组,因此需要下标来指定值;*/
var n = obj.elements['username']; //返回的为对象或集合(自动判断是对象还是集合,适合单选按钮,复选框。) OR
var n = obj.username;
if(n.value == '' )
{
alert('用户名不能为空');
n.focus(); //定位光标到用户名填写框
return false;
}
var p = obj.password;
if(p.value )
{
alert('密码不能为空');
p.focus(); //定位光标到用户名填写框
return false;
}
if(p.value != obj.confirmpwd.value)
{
alert('密码输入不一致');
p.focus();
p.select(); //获得焦点的同时,选中内容
obj.confirmpwd.focus(); //定位光标到用户名填写框
return false;
}
}
</script>
<form action="admin_action.php" method="post" onsubmit="return check(this)">
<p>用户名:<input type="text" name="username" /></p>
<p>密码:<input type="password" name="password" /></p>
<p>密码确认:<input type="password" id="confirmpwd" /></p>
<p><input tyep="submit" value="提交" /></p>
</form>
//管理员列表页
<?php
require(../includes/check-admin.php);
//查询所有管理员
$sql = "SELECT * FROM e1215cms ORDER BY id DESC"; //将最新添加的管理员放在前面
$result = mysql_query($sql);
if(!$result)
{
die(mysql_error());
}
?>
<table>
<tr>
<th>ID</th>
<th>用户名</th>
<th>操作</th>
</tr>
<tr>
<?php
while($data = mysql_fetch_assoc($result))
{
?>
<td><?=$data['id']?></td>
<td><?=$data['username']?></td>
<td><a href="edit.php">编辑</a><a href="delete.php">删除</a></td>
</tr>
<?php
}
?>
</table>
//管理员添加
<?php
header('Cache-control:private'); //页面启用session之后,退回去时表单数据存在。(密码域和文件域除外)
session_start();
header('Content-Type:text/html;charset=utf-8');
?>