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
php第二例的更多相关文章
- RequireJS入门之二——第二例(写自己的模块)
第一节遗留的问题: 中文乱码: 修改require.js文件,搜索charset 关键字,修改为GBK:(貌似乱不乱码和jquery版本有问题,切换GBK和utf-8!!) 路 径: 仅 ...
- c语言程序 第二例
求5! # include <studio.h> int main(){ int i,t; t=1; i=2; while (i<=5){ t=t*i i=i+1 } printf( ...
- PHP程序设计经典300例
不知道怎么转载,原文源自:http://bbs.php100.com/u-htm-uid-330857.html 来自:php100钟泽锋 第一例<?php $s_html="< ...
- Python: 设计模式 之 工厂模式例(2)(神奇的Python)
#!/usr/bin/env python #coding=utf-8 # # 工厂模式第二例(神奇的Python) # 版权所有 2014 yao_yu (http://blog.csdn.net/ ...
- HTML-虚线框3例
第一例: 代码 <HR style=> 第二例: 代码 <DIV style="BORDER-TOP: #00686b 1px dashed; OVERFLOW: hidd ...
- 【JavaScript】--ajax
1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传 ...
- c#datagirdview ,用DataSource 方式赋值,然后更新出问题问题
先说一下程序 主窗体 ,两个子窗体A,B.嵌入主窗体的Panel里边 主窗体,启动类C里边的查找方法,查到的值,通过事件委托送到窗体A C类里同时修改查询表,把修改的查询表通过事件委托发送给窗体B, ...
- 自然语言18.2_NLTK命名实体识别
QQ:231469242 欢迎nltk爱好者交流 http://blog.csdn.net/u010718606/article/details/50148261 NLTK中对于很多自然语言处理应用有 ...
- 2小时入门Robot Framework
1.介绍 1.1.介绍Robot Robot Framework是一个基于关键字驱动的自动化测试框架.通过该框架,测试人员可使用python封装关键字,并在非代码环境下使用关键字构建可被执行的测试用例 ...
随机推荐
- DHCP配置实例
配置DHCP的思路: 1.创建dhcp服务2.添加一个网络号(或者说地址池)3.排除路由器的网管4.排除DHCP的网关 代码: Router>enableRouter#configRouter# ...
- java——关于异常处理机制的简单原理和应用2(转)
Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...
- git过期处理
删除git下的文件:C:\Users\Java\AppData\Roaming\syntevo\......\7\settings.xml删除settings.xml文件即可
- VS2010在C#头文件中添加文件注释的方法(转)
步骤: 1.VS2010 中找到(安装盘符以D盘为例)D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTempl ...
- js学习笔记11----表单操作
1.复选框选中 var aInput = document.getElementsByTagname('input'); aInput[0].checked=true;
- imx6 ar8031 千兆网卡不能用
/*************************************************************************** * imx6 ar8031 千兆网卡不能用 * ...
- 第三百一十二节,Django框架,Cookie
第三百一十二节,Django框架,Cookie 注意:获取Cookie是在请求对象里处理,设置Cookie是在响应对象里处理 普通Cookieset_cookie()设置普通cookie 参数: ke ...
- ANSI 标准是为了确保 C++ 的便携性
ANSI 标准ANSI 标准是为了确保 C++ 的便携性 —— 您所编写的代码在 Mac.UNIX.Windows.Alpha 计算机上都能通过编译. 由于 ANSI 标准已稳定使用了很长的时间,所有 ...
- web 开发之酷炫--- 酷炫展示
http://www.cnblogs.com/dsxniubility/p/4588560.html
- gsoap 学习 1-如何使用
新年伊始,想把onvif和gsoap boa这三个东西学习下,并作下笔记,当然为了省时间,我昨天下午看了一个下午的gsaop官网pdf感触良多,也做了小测试,废话少说,一下也有一些是摘自网友博客,大部 ...