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";
}
?>
技巧
-
调试: error_log("Failed to connect to database!", 3, "D:\php_error.log");
-
PhpStorm 目录映射:https://www.cnblogs.com/vincent_ds/archive/2012/11/09/2761900.html