php第二例

参考:

http://www.php.cn/code/3645.html

前言

由于navicat在linux平台不能很好的支持, PHP的学习转到windows平台.

  • php IDE: PhpStorm 64bit(需要和jvm保持一致)
  • XAMPP套件
  • navicat 可视化数据库

目标:

实现 message-board

涉及技术:

php读写mysql, 增, 删, 查

代码:

https://github.com/hixin/message-board

目录映射

ln -s /home/sain/code/PHP/message-board /opt/lampp/htdocs/test/message-board

访问页面: http://localhost/test/message-board/add.html

修改mysql密码

ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

/opt/lampp/phpmyadmin/config.inc.php

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'tiger';

访问数据库时 mysql -u root -p;

数据库

构造数据库

create  database demo;

CREATE TABLE `message` (
 `id` tinyint(1) NOT NULL auto_increment,
 `user` varchar(25) NOT NULL,
 `title` varchar(50) NOT NULL,
 `content` tinytext NOT NULL,
 `lastdate` timestamp NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

查询数据库:

查看数据库中的表:
MariaDB [demo]> show tables
    -> ;
+----------------+
| Tables_in_demo |
+----------------+
| message        |
+----------------+
1 row in set (0.00 sec)

查看表结构:
MariaDB [demo]> desc  message;
+----------+-------------+------+-----+-------------------+-----------------------------+
| Field    | Type        | Null | Key | Default           | Extra                       |
+----------+-------------+------+-----+-------------------+-----------------------------+
| id       | tinyint(1)  | NO   | PRI | NULL              | auto_increment              |
| user     | varchar(25) | NO   |     | NULL              |                             |
| title    | varchar(50) | NO   |     | NULL              |                             |
| content  | tinytext    | NO   |     | NULL              |                             |
| lastdate | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+----------+-------------+------+-----+-------------------+-----------------------------+
5 rows in set (0.00 sec)

创建所需的PHP文件

add.html 评论页面

add.php 提交评论页面传输的内容到数据库。

conn.php 连接数据的配置文件

css.css 文件 美化html样式

del.php 删除评论文件

list.php 获得数据库中所有的数据展示在页面上。

连接数据库 conn.php

新建文件conn.php 用来设置连接数据库文件

<?php
 $conn =mysql_connect("localhost", "root", "tiger") or die("数据库链接错误");
 mysql_select_db("demo", $conn);
 mysql_query("set names 'utf8'"); //使用utf-8中文编码;
 ?>

后面的文件 需要用到数据库连接,只需要调用conn.php文件就可以将使用,很方便。

创建留言板提交页面

add.html

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <link href="css.css" rel="stylesheet" type="text/css">
     <title>Title</title>
     <?php include ("add.php")?>
 
 </head><body>
 <b><a href="add.php">添加留言</a></b>
 <hr size=1>
 <form action="add.php" method="post" >
     用户:<input type="text" size="10" name="user"/><br>
     标题:<input type="text" name="title" /><br>
     内容:<textarea name="content"></textarea><br>
     <input type="submit" name="submit" value="发布留言" />
 </form>
 </body>
 </html>

加强版:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="css.css" rel="stylesheet" type="text/css">
    <title>Title</title>
    <?php include ("add.php")?>
</head>
<script>
    function CheckPost() {
        if(myform.user.value=="")
        {
            alert("请填写用户");
            myform.user.focus();
            return false;
        }
        if (myform.title.value.length<5)
        {
            alert("标题不能少于5个字符");
            myform.title.focus();
        return false;
        }
        if (myform.content.value=="")
        {
            alert("内容不能为空");
            myform.content.focus();
            return false;
        }
    }
</script>
<body>
<b> <a href="list.php">浏览留言</a>  </b>
<hr size=1>
<form action="add.php" method="post" name="myform" onsubmit="return CheckPost();">
    用户:<input type="text" size="10" name="user"/><br>
    标题:<input type="text" name="title" /><br>
    内容:<textarea name="content"></textarea><br>
    <input type="submit" name="submit" value="发布留言" />
</form>
</body>
</html>

html页面中引入了conn文件和css文件,分别用来连接数据库和对页面进行布局

css.css

td {
   line-height: 16pt;
   font-size: 10pt;
   font-family: "Verdana", "Arial", "Helvetica", "sans-serif";
}
a:link {
   text-decoration: none;
   color: #000000;
}
body {
   font-size: 10pt;
   line-height: 13pt;
   background-color: #ECF5FF;
}
textarea {
   font-size: 8pt;
   font-family: "Verdana", "Arial", "Helvetica", "sans-serif";
   border: 1px solid #999999;
   padding: 5px;
}
form {
   margin: 0px;
   padding: 0px;
}
.textdrow {
   color:#666666;
   filter: DropShadow(Color=white, OffX=1, OffY=1, Positive=1);
}
.p {
   text-indent: 24px;
}

留言板页面提交php文件 add.php

add.php 文件通过 $_POST 变量来收集表单数据了

<?php

include ("conn.php");
$id=$_POST['id'];
$user=$_POST['user'];
$title=$_POST['title'];
$content=$_POST['content'];
if ($_POST['submit']){
 $sql="insert into message(id,user,title,content,lastdate)values('','$user','$title','$content',now())";
 mysql_query($sql);
 echo "<script>alert('提交成功!返回首页。');location.href='add.html';</script>";
}
?>

调用数据库连接文件,当点击submit时用post提交方式,使用sql语insert into对message表内的id user title content lastdata 写入文件, echo "<script>alert('提交成功!返回首页。');

location.href='add.html';</script>";是使用js来进行弹窗提示并返回。

创建文件 list.php

<!DOCTYPE html>
 <html lang="utf-8">
 <head>
 <?php
 include ("conn.php");
 ?> 
 <link href="css.css" rel="stylesheet" type="text/css">
 </head>
 
 
 <table width=500 border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#add3ef" >
 <?php
 $sql="select * from message order by id desc";
 $query=mysql_query($sql);
 while($row=mysql_fetch_array($query)){ ?>
 
 <tr bgcolor="#eff3ff">
 <td>标题: <?php echo $row['title'];?> <font color="red">用户: <?php echo $row['user'];?> </td>
 </tr>
 <tr bgColor="#ffffff">
 <td>发表内容:<?php echo $row['content'];?></td>
 </tr>
 <tr bgColor="#ffffff">
 <td><div align="right">时间:<?php echo $row['lastdate'];?></td>
 </tr>
 <?php } ?>
 <tr bgcolor="#f0fff0">
 <td><div align="right">< a href=" ">返回留言</ a> </td>
 </tr>
 </table>
 </html>

其中

<?php
    $sql="select * from message order by id desc";
    $query=mysql_query($sql);
    while($row=mysql_fetch_array($query)){ 
    } ?>

连接message数据库进行倒叙排序,使用倒叙的方式显示数据,最新的放在最前面,更能符合人们使用的习惯。

要注意: 一定要用.php后缀, php可以看作是加强版的html, 可以执行php函数, 如果是html后缀, 里面的php命令默认不会执行.

删除留言 del.php

<?php
include 'conn.php';
    $id = $_GET['id'];
    $query="delete from message where id=".$id;
    mysql_query($query);
?>
//引入conn文件,使用get方式获取id,使用sql语句来删除id
<?php
//页面跳转,实现方式为javascript 
$url = "list.php";
echo "<script>";
echo "window.location.href='$url'";
echo "</script>";
?> 
//使用js页面跳转回list查看文件的页面

注意list.php的这里:

<?php error_log($row['id'], 3, "D:\php_error.log");?>
<div align="right"><a href="del.php?id=<?php echo $row['id']; ?>">删除</a></div>

实际相当于执行:http://localhost/test/message_board/del.php?id=7

异常及解决

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /home/sain/code/PHP/message-board/conn.php:2 Stack trace: #0 /home/sain/code/PHP/message-board/add.php(2): include() #1 {main} thrown in /home/sain/code/PHP/message-board/conn.php on line 2

查阅资料后发现,原来是从PHP5.0开始就不推荐使用mysql_connect()函数,到了php7.0则直接废弃了该函数,替代的函数是: mysqli_connect(); 用法是: $con=mysqli_connect("localhost","my_user","my_password","my_db");

Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in /home/sain/code/PHP/message-board/conn.php on line 2 error Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in /home/sain/code/PHP/message-board/add.php on line 6 insert error

还是因为密码的问题,改成下面ok:

<?php
$conn = mysqli_connect("localhost", "root", "", "demo");
if($conn){
    echo"ok";
}else{
    echo"error";    
}
 ?>

技巧

posted @ 2018-08-28 16:00  疾风剑  阅读(244)  评论(0编辑  收藏  举报