php+mysql留言板实现代码分享

date
Feb 7, 2018
slug
php-mysql-content
status
Published
tags
开发测试
summary
今天没什么想说的,直接上正文吧。。。。。。。。
type
Post

正文

在前几天学习的基础上,自己重新把功能实现一遍,并把自己的总结都写在代码的注释里面。。。

上次忘了的sql+PHP的查询总结

mysqli查询结果: 1.用它的mysqli_result类,文档是这样说的 “代表从一个数据库查询中获取的结果集” 。。。 query语句执行完以后一般是返回truefalse,但如果执行的是select语句的话,返回的就是一个对象了,但是执行不成功肯定是false,所以一般前面要先判断。。
2.如果他是对象的话,那么就可以调用mysqli_result类下的fetch_array()函数,这个函数是不可逆的,就是显示完以后重复加载该函数没用,要解决的这种情况我们可以用一个数组存储一下。。。 如果里面什么都不填的话他返回的数组里面即含有索引,又含有字段,详细可以自己用var_dump函数测试一下。。。 所以可以用一个常量MYSQLI_ASSOC,注意常量不需要引号,也不需要$

登录功能

由于http是无记忆的,关闭网页后会消失数据,因此才要用数据库去存储数据 所以我们用session跟cookie来实现登录功能,我用的是session,因为session一般都在服务器端,比较安全

还有几点注意事项

1.Undefined index:的错误,这种错误我出现了很多次,主要是post或者get请求为空导致的,后来是在class类里面调用了isset函数解决的.....
2.代码中所有注释中的var_dump函数都是用做测试
3.还有就是html语句跟PHP语句的混写一定要小心,很容易就会写错
4.我用的是PHPstudy搭建的环境,数据库起名PHP10

下面就附上代码

1.book.php
<?php


	/*
		留言板首页
	*/
	session_start();
	include ('connect.php');
    include ('mysql.php');
    //var_dump($_SESSION);

?>

<?php date_default_timezone_set("PRC");  //这句话解决的是It is not safe to rely on the system's timezone settings报错

?>

<!DOCTYPE html>


<html>
	<head>
		<meta charset="UTF-8">
		<title>留言板</title>
		<style>
			.wrap {
	              width:800px;
	              margin:0px auto;

	   		      }
	   		.add {overflow: hidden;}
	   		.add .content {
                  width: 798px;
                  margin: :0;
                  padding: 0;
	   					 }
	   		 .add .user{float: left;}
	   		 .add .btn{float: right;}
	   		 .msg{ margin:20px 0px;background: #ccc; padding:5px;}
	   		 .msg .info{overflow: hidden;}
	   		 .msg .user{float: left;color:blue;}
	   		 .msg .time{float:right;color:#999;}
	   		 .msg .content{width:100%padding:5px;}


		</style>

	</head>


    <body>
    	<div class="wrap">
	    	<!-- 发表留言 -->
	    	<div class="add">
	    		<form action='save.php' method='post' >
		    		<textarea  class="content" name='content' cols="50" rows="5"></textarea>
		    		<input class="user" type="text"  name='user' />
		    		<input class="btn" type="submit" value="发表留言"/>
		    		<a class='btn' href='login.php'>登录</a>
	        	</form>
	    	</div>
	    <?php
	    	foreach ($d as $row ) {
	    ?>
	    	<!--查看留言 -->
		    	<div class='msg'>
		    		<div class='info'>
		    			<span class='user'><?php echo $row['user'] ;?></span>
		    			<span class ='time'><?php echo date("Y-m-d H:i:s",$row['intime']);?>  <!--用了date函数改变一下格式-->
		    			<?php if(isset($_SESSION['username']) == true) {?>
		    				<a onclick="return confirm('你确定要删除吗?')" href="delete.php?id=<?php echo $row['id'];?>">删除</a></span>
		    				<!--这里用onclick去写js-->
		    			<?php }?>
		    		</div>
		    		<div class='content'>
		    		  <?php echo $row['content'] ;?>
		    	   </div>
		        </div>
         <?php
     		}
         ?>
	    </div>
    </body>

</html>
2.save.php
<?php
  /*
	此处是完成留言板的增加留言的功能
	无论你是否是管理员都可以发表留言
  */

  include ('connect.php');
  include('test3.php');
  $n = new input();
  $flag = $n->post('content');

  if($flag === false)
  {
  	die("输入内容不能为空!!");
  }
   $content = $flag;


  $flag = $n->post('user');
  if( $flag == false )
  {
  	die("输入名字违规!!");
  }
   $user = $flag;

 // var_dump($n->post($user));
  $time = time();   //time函数是用来表示时间戳,从1970年开始,也就是1970之前不能表示
  $sql = "insert into msg(content,user,intime) values('{$content}','{$user}','{$time}')";
/*
  这里用花括号是因为你在单引号里面不知道这个$后面跟着的是变量还是字符串
*/

    //echo $sql;

   $db->query("SET NAMES UTF8");
    //确保数据传输也是UTF-8,防止出现乱码,可能会出现这种情况,但我发现我删除之后没影响,最好还是些写写吧,小心是UTF8,没有横线

  $flag =  $db->query($sql);
  if($flag == true)
  {
  	header("location:book.php");//重定向
  }
  else
  {
  	echo '操作失败!';
  }
  //header("location:book.php");

?>
3.connect.php
<?php

 /*
	此处是数据库连接的关键文件
	每次执行sql都需要连接数据库
	单独写进一个文件在用文件包含比较方便
 */

  $host = '127.0.0.1';
  $dbuser = 'root';
  $pwd = 'root';
  $dbname = 'php10';

  $db = new mysqli($host,$dbuser,$pwd,$dbname);
  $db->query('SET NAMES UTF8');
  if($db->connect_errno !=0)
  {
  	die('连接失败!');
  }



?>
4.test3.php
<?php

/*
	此处是用于输入的判断,这里的试isset函数帮我解决了那个Undefined index:的错误
	这里也让我明白了这个PHP函数可以随意返回东西,不想C++那样只能返回对应函数类型的值
*/
  class input{
      function post($key)
  	{
		  if(isset($_POST[$key]) === false)
		  {
		  	return false;
		  }
		    //禁止使用的用户名,代码恶意过滤
		  $n = ['张三','李四','王五'];
	      foreach( $n as $name)
	      {
	      	if($key == $name)
	      	{
	      		return false;
	      	}
	      }

	      $val = $_POST[$key];
	      return $val;
  	}

  	function get($key)
  	{

  		 if(isset($_GET[$key]) === false)
		  {
		  	return false;
		  }
		  //禁止使用的用户名,代码恶意过滤
		  $val = $_GET[$key];
	      return $val;

  	}




  }

?>
5.mysql.php
<?php

    /*
		此处是留言板颜面查询功能的实现

    */
	include ('connect.php');


	$sql = "select * from msg order by id DESC";
	//执行SQL语句
	$mysqli_result = $db->query($sql);
	if($mysqli_result === false)
	{
		echo '操作失败!';
		exit;

	}
	/*
	fetch_array首次调用显示最新的一条记录
	重复调用,依次显示后面的记录
	如果没记录可显示,就返回NULL

	*/

	// echo $c['id'];
	// echo $c['content'];
	// echo $c['user'];
	// echo $c['intime'];  //测试部分。。这里的$符号忘记了写,找了很久才找得到,原谅新手O(∩_∩)O

	$d = [];
	while($c = $mysqli_result->fetch_array(MYSQLI_ASSOC))  //这里的$c变量运用了类型转换
	{
		$d[] = $c;
		/*
		这里的[]可以天可以不填,不填的话,就会自动索引从0开始,并且是个二维数组,一维对应的字段键值,如果自己想定义可以这样$d[$c['id']] = $c;这是以id为键值
		*/
	}



?>
6.login.php
<?php
	/*
		登录功能的实现

	*/


    session_start();  //session的用法其实就是相当与一个数组,可跨网页使用
	include ('test3.php');
	$input = new input();

	include ('connect.php');
	$act = $input->get('act');
	//var_dump($act);

	if($act !== false)
	{
		$username = $input->post('username');
		$password = $input->post('password');
		//var_dump($username,$password);
     /*
		把下面这一段代码放在外面的话,一直会爆未定义变量的错误,找了很久才发现因该在里面写
		请原谅新手。。。。

     */
		$sql = "select * from ada where username='{$username}' and password='{$password}'";

		 $mysqli_result = $db->query($sql);
		if($row = $mysqli_result->fetch_array(MYSQLI_ASSOC))
		 {
		 	$_SESSION['username'] = $row['username'];
		 	header("Location:book.php");
		 }
		 else
		 {
		 	echo"登陆失败!";
		 	exit;
		 }
	}



?>






<!DOCTYPE html>

<html>
	<head>
		<meta charset="utf-8"/>
		<title>管理员登陆</title>
	</head>
	<body>
		<form action = 'login.php?act=chk' method="post">    <!--get方法的变量只需要在这个action里面定义即可-->
			<input type="text" name='username'/>
			<input type='password' name= 'password' />    <!--type改成password可以隐藏明文-->
			<input type='submit' value='点击登录'/>
		</form>

	</body>

</html>
7.delete.php
<?php

	/*
		删除功能的实现
	*/

    session_start();
    if(isset($_SESSION['username']) ==false)
    {
    	echo "需要管理员权限!!";
    	exit;
    }

	include ('test3.php');
	$input = new input();


	$id = $input->get('id');
	include('connect.php');
	$sql = "delete from msg where id='{$id}'";
	$is = $db->query($sql);
	if($is == true)
	{
		header("Location:book.php");
	}
	else
		echo "删除失败!!";

?>

© 4me 2021 - 2024