参考:

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. 基于js仿汽车之家2015新版焦点图代码

    今天给大家分享一款仿汽车之家2015新版焦点图代码.这是一款基于jQuery实现的适合电子商务网站或者企业产品展示功能特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: < ...

  2. 【C#/WPF】调节图像的对比度(Contrast)

    关于对比度: 调节对比度直观感受是,高对比度的图像明暗关系更明显,色彩更鲜艳:低对比度的图像表面像是蒙上一层灰,色彩不鲜艳. 需求: 制作一个面板,一个滑动条,拖动滑动条可以修改目标图片的对比度. 资 ...

  3. Ajax-ajax实例4-多级联动菜单

    项目结构: 项目运行: 技术要点: 1.4.1 技术要点在分析具体的实现代码之前,先介绍一下本例的几个技术要点.1 .选项的动态创建与删除document 对象的 createElement 方法可以 ...

  4. Linux C定时器使用指南

    使用定时器的目的是为了周期性的执行某一任务,或者是到了某个指定时间去执行某一任务.要达到这一目的,一般有两个常见的方法.一个是用linux内部的三个定时器,另一个是用sleep, usleep函数让进 ...

  5. node-webkit读取json文件

    1.原理 node-webkit包含了node.js,node.js提供了处理json数据文件的方法,通过node.js提供的方法,我们可以比较方便地读取json文件. 2.示例 这里我们读取的文件是 ...

  6. Jquery与.net MVC结合,通过Ajax

    在工作中做了这么一个东西. Html端: @using Test.fh.Project.Storefront.ViewModels @using Test.fh.Project.Storefront. ...

  7. Windoows窗口程序四

    子窗口的创建 .创建时要设置父窗口句柄 .创建风格要增加WS_CHILD|WS_VISIBLE HWND CreateChild(LPSTR lpClassName,LPSTR lpWndName,H ...

  8. 关于Cocos2d-x中物理世界的物体乱跳的问题的解决

    这是电脑短时间内帧率低,无法满足游戏配置的帧率引起的. 解决方法: 第一种: 1.打开AppDelegate.cpp文件 2.把director->setAnimationInterval(1. ...

  9. 远程桌面能连接到服务器,但PING不通

    解决方法:

  10. 使用_snscanf_s转换十六进制时引起的内存越界

    //将Hex编码转换为指定编码格式的字符串 string Encoding::DecodeHexString(const string &strSrc, UINT code_page ) { ...