删除了一些不必要的东西,三个界面的后端简化为一个(感觉简化之后的代码看着好难受)
数据库名:mydb
三个表:
用户信息表:
member(
username varchar(20) not null,
password varchar(40) not null //之前采用的为vchar(20)因使用了SHA-1加密故需40位或以上
);
管理员信息表:
admin(
username varchar(20) not null,
userpass varchar(40) not null
);
留言信息表:
message(
id int(4) not null auto_increment primary key,//id这个很重要,不只是为了显示该信息为第几条,会让编写 author varchar(20) not null, del.php时方便很多。
addtime datetime not null,
content varchar(1000) not null
)”;
主界面前端,登陆后进入用户界面,区别:可发信息。管理界面大同小异,区别:加了个超链接可删除留言
后端
<?php
header(“Content-Type: text/html;charset=utf-8”);
session_start();
$link = mysqli_connect(“127.0.0.1”,”root”,”root”);
mysqli_select_db($link,”mydb”);
$query = “select * from message”;
$result = mysqli_query($link,$query);
if( mysqli_num_rows($result) < 1){
echo “ 目前数据表中还没有任何留言!”;
}else{
$result = mysqli_query($link,$query);
$datanum = mysqli_num_rows($result);
for( $i = 1; $i <= $datanum; $i++)
{
$info = mysqli_fetch_array($result);
echo “->[“.$info[‘author’].”]于”.$info[‘addtime’].”说:
“;
if(isset($_SESSION[‘guanli’]))
{
echo”[删除]“;
}
echo “ “.$info[‘content’].”
“;
echo “
“;
}
echo ““;
}
mysqli_close($link)
?>
登陆界面前端
后端
<?php
include ‘conn.php’;
session_start();
if(isset($_POST[‘submit’]))
{
$username=$_POST[‘username’];
$password=addslashes($_POST[‘password’]);//addslashes函数会在返回在预定义字符(’ “ \ NULL)之前添加反斜杠的字符串。
$ahh=sha1($password.”smi1e”);//sha1加密,加了点盐
var_dump($ahh);
$sql=(“select username,password from member where username=’$username’ and password=’$ahh’”) or die(“sql语句执行失败”);
$ar=$conn->query($sql);
if($ar)
{
if($row=mysqli_fetch_array($ar))
{
$_SESSION[“username”]=$username;
header(“location:index.php”);
}
else
{
echo “用户名或密码错误”;
}
}
}
?>
注册界面前端
后端
<?php
header(“Content-Type: text/html;charset=utf-8”);
include ‘conn.php’;
if(isset($_POST[‘submit’])&&$_POST[‘submit’]) {
if($_POST[‘username’]==’’)
{
echo “用户名不能为空”;
exit();
}
if($_POST[‘password’]==’’)
{
echo “密码不能为空”;
exit();
}
if($_POST[‘realpass’]!=$_POST[‘password’])
{
echo “两次密码输入不一致”;
exit();
}
$password = addslashes($_POST[‘password’]);
$ahh=sha1($password.”smi1e”);
$sql=”insert into member(username,password) values(‘$_POST[username]’,’$ahh’)”;
$ar=$conn->query($sql);
if($ar)
{
header(“location:login.php”);
}
else
{
echo mysql_error();
}
}
?>
管理员登录前端
后端
<?php
include ‘conn.php’;
if(isset($_POST[‘submit’]))
{
$username=$_POST[‘username’];
$password=addslashes($_POST[‘password’]);
$ahh=sha1($password.”smi1e”);
$sql=(“select username,userpass from admin where username=’$username’ and userpass=’$ahh’”) or die(“sql语句执行失败”);
$ar=$conn->query($sql);
if($ar)
{
if($row=mysqli_fetch_array($ar))
{
session_start();
$_SESSION[‘guanli’]=$username;
header(“location:index.php”);
}
else
{
echo “用户名或密码错误”;
}
}
}
?>
管理员账号只可手动添加不可注册
实现留言发送功能
<?php
header(“Content-Type: text/html;charset=utf-8”);
session_start();
if(isset($_SESSION[‘guanli’]))
{
$name=$_SESSION[‘guanli’];
}else{
$name=$_SESSION[“username”];
}
$content = strip_tags($_POST[‘content’]);
date_DEFAULT_timezone_set(‘PRC’);
$addtime = date(“Y-m-d h:i:s”);
$link = mysqli_connect(“127.0.0.1”,”root”,”root”);
if($link)
echo “ok!
“;
else {
echo “bad!
“;
}
mysqli_select_db($link,”mydb”);
if($name==’’){
echo ““;
exit();
}else{
$insert = “insert into message(author,addtime,content) values(‘$name’,’$addtime’,’$content’)”;
mysqli_query($link,$insert);
mysqli_close($link);
echo ““;
}
?>
实现删除功能
<?php
header(“Content-Type: text/html;charset=utf-8”);
session_start();
include ‘conn.php’;
if(!isset($_SESSION[‘guanli’]))
{
echo “ERROR”;
exit();
}else{
$id=$_GET[id];
$query=”delete from message where id=$id”;
$conn->query($query);
mysqli_close($link);
echo ““;
}
?>//我™真是个傻逼明明用isset判断$_session[‘guanli’]是否为空就行了,硬是没想到,整了什么判断session内存的是不是管理表里的,还想着把id传过来的时候加密然后再解密。⑧说了猪都比我聪明。
实现退出登录功能
<?php
session_start();
session_unset();
session_destroy();
header(“location:index.php”);
?>
//在一篇文章里作者表示:session_destroy();销毁session但是存入session的数据还在,session_unset();释放数据,但是session还在,建议先释放后销毁。不清楚其可靠性如何不过加上没什么影响就加了个session_unset();
Somethingelse
conn.php
<?php
$servername = “localhost”;
$username = “root”;
$password = “root”;
$dbname = “mydb”;
$conn = new mysqli($servername, $username, $password, $dbname);
?>
意义不明的另一个send.php(我也忘了我为啥整了个这个)//想起来了,这个是实现管理员的发送,除了没过滤以外没什么特殊之处,当时想的是苟管理可以为所欲为。已成废案。
<?php
header(“Content-Type: text/html;charset=utf-8”);
session_start();
$name=$_SESSION[“guanli”];
$content = $_POST[“content”];
date_DEFAULT_timezone_set(‘PRC’);
$addtime = date(“Y-m-d h:i:s”);
$link = mysqli_connect(“127.0.0.1”,”root”,”root”);
if( $link)
echo “ok!
“;
else {
echo “bad!
“;
}
mysqli_select_db($link,”mydb”);
$insert = “insert into message(author,addtime,content) values(‘$name’,’$addtime’,’$content’)”;
mysqli_query($link,$insert);
mysqli_close($link);
echo ““;
?>
简单加了一些防御(有个锤子用)学了这么多天才弄成这个吊样,我太菜了。我身边有smi1e和12end这样的人,每天活着都感觉自卑。
鸣谢12end的指点与帮助,东哥牛逼