参考:

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";
}
?>

技巧

php第二例的更多相关文章

  1. RequireJS入门之二——第二例(写自己的模块)

    第一节遗留的问题: 中文乱码:  修改require.js文件,搜索charset 关键字,修改为GBK:(貌似乱不乱码和jquery版本有问题,切换GBK和utf-8!!) 路      径:  仅 ...

  2. c语言程序 第二例

    求5! # include <studio.h> int main(){ int i,t; t=1; i=2; while (i<=5){ t=t*i i=i+1 } printf( ...

  3. PHP程序设计经典300例

    不知道怎么转载,原文源自:http://bbs.php100.com/u-htm-uid-330857.html 来自:php100钟泽锋 第一例<?php $s_html="< ...

  4. Python: 设计模式 之 工厂模式例(2)(神奇的Python)

    #!/usr/bin/env python #coding=utf-8 # # 工厂模式第二例(神奇的Python) # 版权所有 2014 yao_yu (http://blog.csdn.net/ ...

  5. HTML-虚线框3例

    第一例: 代码 <HR style=> 第二例: 代码 <DIV style="BORDER-TOP: #00686b 1px dashed; OVERFLOW: hidd ...

  6. 【JavaScript】--ajax

    1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传 ...

  7. c#datagirdview ,用DataSource 方式赋值,然后更新出问题问题

    先说一下程序 主窗体  ,两个子窗体A,B.嵌入主窗体的Panel里边 主窗体,启动类C里边的查找方法,查到的值,通过事件委托送到窗体A C类里同时修改查询表,把修改的查询表通过事件委托发送给窗体B, ...

  8. 自然语言18.2_NLTK命名实体识别

    QQ:231469242 欢迎nltk爱好者交流 http://blog.csdn.net/u010718606/article/details/50148261 NLTK中对于很多自然语言处理应用有 ...

  9. 2小时入门Robot Framework

    1.介绍 1.1.介绍Robot Robot Framework是一个基于关键字驱动的自动化测试框架.通过该框架,测试人员可使用python封装关键字,并在非代码环境下使用关键字构建可被执行的测试用例 ...

随机推荐

  1. C语言 · 身份证号码升级

    算法提高 身份证号码升级   时间限制:1.0s   内存限制:256.0MB      问题描述 从1999年10月1日开始,公民身份证号码由15位数字增至18位.(18位身份证号码简介).升级方法 ...

  2. ubuntu 14.04 安装中文输入法

    记录Ubuntu 14.04 里面安装中文输入法的过程 先安装如下包 sudo apt-get install ibus sudo apt-get install ibus ibus-clutter ...

  3. Android—— Intent参数this问题

    Android Intent参数this问题 (2013-04-02 11:19:48) 转载▼ 标签: android intent 分类: Android 转自:http://blog.csdn. ...

  4. KafkaStream时间戳问题CreateTime = -1引起的程序中断

    Exception in thread "app-8835188a-e0a0-46da-ac2a-6820ec197628-StreamThread-1" org.apache.k ...

  5. Java NIO使用及原理分析 (一)(转)

    最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下 ...

  6. CDH安装kafka

    摘要:前言其实cloudera已经做了这个事了,只是把kafka的包和cdh的parcel包分离了,只要我们把分离开的kafka的服务描述jar包和服务parcel包下载了,就可以实现完美集成了.具体 ...

  7. archdexls主题游戏页面game-play.php有评论时,报错( ! ) Warning: printf(): Too few arguments in D:\wamp\www\wp-content\themes\arcadexls\games-play.php on line 97

    ( ! ) Warning: printf(): Too few arguments in D:\wamp\www\wp-content\themes\arcadexls\games-play.php ...

  8. Laravel Debugbar

    Installation Require this package with composer: composer require barryvdh/laravel-debugbar After up ...

  9. r语言 技巧总结

    1.table函数返回众数,再转为dataframe as.data.frame(table(x)) 2.使用which 返回数组下标 which(rs.list=="rs1008507&q ...

  10. GAN(Generative Adversarial Nets)的发展

    GAN(Generative Adversarial Nets),产生式对抗网络 存在问题: 1.无法表示数据分布 2.速度慢 3.resolution太小,大了无语义信息 4.无reference ...