PHP教学!我的学习结合实战心得笔记更新,和我一起简单学会它!
第一课:PHP基础语法20230316更新
这个就不多说了,放一个简单的试例,很简单,也不用多说了
<?php
$abc = "我的第一段 PHP 脚本!";
echo $abc;
?>
追加更新:
并列符 . (英文状态下的点),用于输出时相互连接
单行注释 //
多行注释 /*注释内容*/
第二课:根据第一课的语法创建一个简单的静态php页面
在网站根目录创建ce.php,引入一个基础的页面
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>创建一个简单的静态php页面</title>
</head>
<body>
<?php
/*给a一个值,在H1标签中调取a*/
$a = "这是一个H1";
?>
<h1><?php echo $a; ?></h1>
</body>
</html>
访问这个文件可以看到如下图:
第三课:PHP的常见的五类标量类型
学习了解五类数据类型的书写格式,这个也都比较好理解,不多说了,不懂的小伙伴可以到网上学习下,基本可以秒懂的,和数学差不多~
布尔型
整型
浮点型
字符串
NULL
第四课:PHP的数组
1 首先熟悉2种数组的书写模式
<?php
$cars=array(
"porsche",
"BMW",
"Volvo"
);
echo count($cars); //count();可以列出数组一共包含多少个数组;
?>
以下为简写:
<?php
$cars= [
"porsche",
"BMW",
"Volvo"
];
var_dump($cars); //这个可以打印出所有数组详细的内容,以及数据类型;
?>
2 然后要知道如何输出数组里指定的内容
数组里都有隐形的键值,从0开始的
因此想要单独输出"porsche"
可以这样设置:
echo $cars[0];
3 接下来要学习如何自定义这个键值
<?php
$cars=array(
"zidingyi"=>"porsche", //给这个键设置一个自定义的键值,为zidingyi;
"BMW",
"Volvo"
);
echo $cars['zidingyi'];
?>
第五课:多维度数组20230317更新
1 二维数组
在数组里,增加数组,如下:
<?php
$cars=array(
array(
"porsche",
),
array(
"BMW",
),
array(
"Volvo"
)
);
?>
2 三维数组
如下:
<?php
$doing = [ //这里面是一维
[ //这里面是二维
'name'=>'小明',
'dowhat'=>[ //这里面是三维
'在打游戏',
'在洗澡',
'在遛狗'
]
],
[
'name'=>'小红',
'dowhat'=>[
'在打游戏',
'在洗澡',
'在遛狗'
]
]
];
?>
3 怎么输入多维度数组
一个数组一个数组往下写
echo $doing[1]['dowhat'][0]; //输出:在打游戏;
第六课:数组循环
foreach语句
<?php
$name = [
'小明',
'小红',
'小北'
];
foreach ($name as $key => $suiyi){
echo $suiyi;
echo '<hr>';
}
/*
这其中的难点,就是 as 和 $key => $suiji
其中 $key => $suiyi 你可以这样理解,在数组中,默认的格式就是 键值名称 => 值,因此这里对应的也是比如之前说到的 'name'=>'小明', name是键值的名称,小明是这个键值的具体值,因此 $key => $suiyi 就是表示这个数组的值,在$符号后面,取名可以随意取,不会影响数据的输出
当然也可以简写,取消$key => ,直接写成 foreach ($name as $suiyi){
这样输出的结果是一样的,这里你自己试一下就能明白了!
然后就是as,可以简单理解为中文意思为“当做”,便于记忆,你可以理解为,把数组name的值当做suiyi然后循环输出出来。
*/
?>
效果如下图,可以循环将数组中的内容全部循环显示出来:
第七课:利用数组循环写一个网站导航和列表
先用bootsrap构建一个基础的导航页面,代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>利用数组循环写一个网站导航和列表</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body>
<ul class="nav nav-tabs">
<li role="presentation"><a href="#">Home</a></li>
<li role="presentation"><a href="#">Profile</a></li>
<li role="presentation"><a href="#">Messages</a></li>
</ul>
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
然后增加一个数组,并利用将数组循环到导航条上,代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>利用数组循环写一个网站导航和列表</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body>
<?php
$daohang = [ //这里增加一个导航有关的数组
'首页',
'产品中心',
'新闻动态',
'关于我们'
];
?>
<ul class="nav nav-tabs">
<?php
foreach ($daohang as $kkk) {
?>
<li role="presentation"><a href="#"><?php echo $kkk; ?></a></li>
<?php
}
?>
这里采用的是php和html混编模式,注意标色的色块格式即可!
</ul>
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
最后效果如下图:
而网页中的列表也可以通过二维数组的形式展现出来,一样我们可以利用bootsrap制作一个简易的列表页面进行练习:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>利用数组循环写一个网站导航和列表</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body>
<?php
$daohang = [ //这里增加一个导航有关的数组
'首页',
'产品中心',
'新闻动态',
'关于我们'
];
?>
<ul class="nav nav-tabs">
<?php
foreach ($daohang as $kkk) {
?>
<li role="presentation"><a href="#"><?php echo $kkk; ?></a></li>
<?php
}
?>
</ul>
<?php
$list = [
[
'title' => '中国积极探索网络司法模式',
'views' => '62123',
],
[
'title' => '旅俄大熊猫画风突变,体重狂飙40公斤!网友:养的是相当炸裂!',
'views' => '52123',
],
[
'title' => '中央音乐学院回应虐猫男子非该校学生',
'views' => '46412',
],
[
'title' => '中国低龄老人达1.5亿:约1/3仍在工作,主要从事这些行业',
'views' => '11321',
]
];
?>
<ul>
<?php
foreach ($list as $vvv){
?>
<li><?php echo $vvv['title']; ?><span><?php echo $vvv['views']; ?></span></li>
<?php
}
?>
</ul>
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
最后效果如下图:
第八课:PHP条件判断20230318更新
1 简单了解三元运算符号
2 IF语句
<?php
$t=date("H");
if ($t<"10") {
echo "Have a good morning!";
} elseif ($t<"20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>
3 switch语句
<?php
$favfruit="orange";
switch ($favfruit) {
case "apple":
echo "Your favorite fruit is apple!";
break;
case "banana":
echo "Your favorite fruit is banana!";
break;
case "orange":
echo "Your favorite fruit is orange!";
break;
default:
echo "Your favorite fruit is neither apple, banana, or orange!";
}
?>
关于条件判断的2个语句,经常会用到,但是只要知道语法结构,以及如何使用就好了
第九课:PHP的函数
1 系统函数
可以了解一些常见的函数用法,在实际中接触多了就知道了
2 自定义函数
<?php
function sayhi() { //saghi就是一个自定义函数,()里面可以设置参数,目前了解其基本格式就好
return "Hello world!";
}
echo sayhi();
?>
3 作用域
在函数中,要使用函数外的值,需要在函数中增加global明示,如下示例:
<?php
$num1 = 20;
function jiafa( $num1 = 30, $num2 = 40 ) {
global $num1;
echo $num1 + $num2; //输出结果为60;
}
jiafa();
?>
第十课:PHP运算符
1 基础的运算符:加减乘除之类的
<?php
$x=17;
$y=8;
echo ($x + $y); // 输出 25
echo ($x - $y); // 输出 9
echo ($x * $y); // 输出 136
echo ($x / $y); // 输出 2.125
echo ($x % $y); // 输出 1
?>
2 赋值运算符,比如+=,就是先加再等于,是按照符号顺序计算的!
<?php
$x=17;
echo $x; // 输出 17
$y=17;
$y += 8;
echo $y; // 输出 25
$z=17;
$z -= 8;
echo $z; // 输出 9
$i=17;
$i *= 8;
echo $i; // 输出 136
$j=17;
$j /= 8;
echo $j; // 输出 2.125
$k=17;
$k %= 8;
echo $k; // 输出 1
?>
3 比较运算符
4 逻辑运算符
常见于条件判断中
第十一课:PHP循环20230319更新
1 while 循环
<?php
$x=1;
while($x<=5) {
echo "这个数字是:$x <br>";
$x++;
}
?>
2 do...while 循环
<?php
$x=6;
do {
echo "这个数字是:$x <br>";
$x++;
} while ($x<=5);
?>
和 while 循环的区别就是,do...while 循环会先执行do中的命令
3 for 循环
<?php
for ($x=0; $x<=10; $x++) { //只是把条件和命令放到()里面了;
echo "数字是:$x <br>";
}
?>
第十二课:mysql简介
mysql简单理解就是类似一个表格,把有关的数据像表格一样存储起来,在需要使用的地方,进行数据调用
1 了解新建数据库
2 数值数据类型,常用的为下图框选的三个:
3 字符串数据类型,常用的2个如下图框选:
4 日期时间数据类型
5 试着创建一个数据库表
第十三课:PDO连接mysql数据库
1 查询语句: select * from 表名;
2 pdo连接mysql数据库
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名称', '数据库用户名', '数据库密码'); //OPD连接;
$stmt = $pdo -> prepare('select * from article'); //准备一条SQL语句,来说明调用哪个数据库?;
$stmt -> execute(); //执行一下这个SQL语句;
$lists = $stmt -> fetchall(); //用fetchall来执行这个SQL语句,将这个article这个数据库作为一个数组,赋予给$lists;
var_dump($lists); //打印一下,看是否能调取到这个数据库;
?>
20230322追加更新:
在学习后面的内容时,这个内容,比较重要,如果搞不明白,后面的内容,在实战操作中就会卡住,因为小编就卡住了!所以要搞明白它们的具体意义,和它们的逻辑关系!
因此在此重新对上述语句做出一个更新解释说明,方便后续理解:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名称', '数据库用户名', '数据库密码'); //PDO连接方式来连接数据库;
$stmt = $pdo -> prepare('select * from article'); //预处理数据,实际上是处理你想要的数据,类似一个定位,比如这个就是预处理article表,告诉它,我要article表,因为在数据库中有很多很多表
$stmt -> execute(); //执行上面的预处理语句;
$lists = $stmt -> fetchall(); //将返回的数据数组,赋予给$lists,但是这里要知道的是, fetchall是返回一个完整的数组!他原本是几维数组,就返回几维数组,不会因为上面的prepare定位更加精准,而调取出数组里面的数组,形成一个单独的数组。
print_r($lists); //打印换成print,这样查看源代码时,可以更加清晰看到数组的结构!
?>
3 如果出现乱码,可能是编码问题,可以用以下方式进行修正:
方法1:$pdo = new PDO('mysql:host=localhost;dbname=数据库名称', '数据库用户名', '数据库密码', array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));
方法2:$pdo -> query('set names utf8');
第十四课:连接mysql数据库返回博客列表文章实战
1 新建立一个空白站点,引入boosrap的基础模板,创建一个index.php的首页,重点是里面的列表!
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>连接mysql数据库返回博客列表文章实战</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div>
<!-- Brand and toggle get grouped for better mobile display -->
<div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span>Toggle navigation</span>
<span></span>
<span></span>
<span></span>
</button>
<a href="#">Brand</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#">Link <span>(current)</span></a></li>
<li><a href="#">Link</a></li>
<li>
<a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span></span></a>
<ul>
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator"></li>
<li><a href="#">Separated link</a></li>
<li role="separator"></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-left">
<div>
<input type="text" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Link</a></li>
<li>
<a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span></span></a>
<ul>
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator"></li>
<li><a href="#">Separated link</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<div>
<h1>Hello, world!</h1>
<p>...</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
</div>
<div><h3>最近更新</h3></div>
<div>
<div class="col-sm-6 col-md-4">
<div>
<img src="..." alt="...">
<div>
<h3>标题..</h3>
<p>时间:..</p>
<p>内容..</p>
<p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#" class="btn btn-default" role="button">Button</a></p>
</div>
</div>
</div>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
创建好以后,效果如下图:
接下来要做的就是利用数据库引入,将最近更新的文章调取并展示出来!
2 登录数据库,创建数据库article文章表
3 在这个article表中手动增加3篇文章内容的数据,如下图:
关于图片上传到根目录,创建一个img的文件夹,反正都是学习测试用的!
4 在index.php上,建立PDO连接:
代码如下:涉及到数据库名称类的,都需要换成自己设置的数据名称哦!
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>连接mysql数据库返回博客列表文章实战</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div>
<!-- Brand and toggle get grouped for better mobile display -->
<div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span>Toggle navigation</span>
<span></span>
<span></span>
<span></span>
</button>
<a href="#">Brand</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#">Link <span>(current)</span></a></li>
<li><a href="#">Link</a></li>
<li>
<a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span></span></a>
<ul>
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator"></li>
<li><a href="#">Separated link</a></li>
<li role="separator"></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-left">
<div>
<input type="text" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Link</a></li>
<li>
<a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span></span></a>
<ul>
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator"></li>
<li><a href="#">Separated link</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<div>
<h1>Hello, world!</h1>
<p>...</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
</div>
<div><h3>最近更新</h3></div>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名称', '数据库用户名', '数据库密码');
$stmt = $pdo -> prepare('select * from article'); //准备一条SQL语句,来说明调用哪个数据库?;
$stmt -> execute(); //执行一下这个SQL语句;
$lists = $stmt -> fetchall(); //用fetchall来执行这个SQL语句,将这个article这个数据库作为一个数组,赋予给$lists;
?>
<div>
<?php
foreach ($lists as $liebiao){
?>
<div class="col-sm-6 col-md-4">
<div>
<img src="<?php echo $liebiao['img']; ?>" alt="...">
<div>
<h3><?php echo $liebiao['title']; ?></h3>
<p>时间:<?php echo $liebiao['date']; ?> 分类:<?php echo $liebiao['class']; ?></p>
<p><?php echo $liebiao['content']; ?></p>
<p><a href="#" class="btn btn-primary" role="button">查看详情</a></p>
</div>
</div>
</div>
<?php
}
?>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
最后,展示效果如下:
第十五课:mysql的增删查改语句20230320更新
1 数据库查询语句
SELECT * FROM 表名 where '字段' = '具体值';
如需指定字段,可以将中间的 * 号换成字段,如:
SELECT * FROM title,content where '字段' = '具体值';
有时数据库内容较大,全部查询会造成卡顿,因此可以做一个查询结果限制,比如限制2条,如下:
SELECT * FROM title,content where '字段' = '具体值' limit 2;
也可以设置结果从第几条开始,取出多少条,比如从第一条开始,取出2条,如下:
SELECT * FROM title,content where '字段' = '具体值' limit 0,2;
另外还可以对结果进行排序:
DESC 表示倒序
ASC 表示正序
SELECT * FROM article where 'class' = '新闻资讯' order by 'date' DESC ;
2 数据库插入语句
INSERT INTO 表名 (这个表里的字段, 这个表里的字段,...)
VALUES (对应字段的内容, 对应字段的内容,....)
3 数据库修改语句
UPDATE 表名
SET
'要修改的字段' = '修改后的内容',
'要修改的字段' = '修改后的内容'
WHERE '要修改的字段' = '修改前的内容';
4 数据库删除语句
DELETE FROM 表名
WHERE '具体字段' = ''要删除字段的内容;
第十六课:PHP超全局变量
1 常见的超全局变量
2 $_GET
提交信息到URL上,自己试一下,代码如下:
<html>
<body>
<h3>我要加盟</h3>
<form action="" method="get">
您的尊称:<input type="text" name="name"><br>
您的手机:<input type="text" name="phone"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
效果截图:
3 $_POST
提交信息不会显示在URL上,可以用于密码类的提交,代码如下:
<html>
<body>
<h3>我要加盟</h3>
<form action="" method="post">
您的尊称:<input type="text" name="name"><br>
您的手机:<input type="text" name="phone"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
第十七课:数据库主键概念20230321更新
1 文本传值
<a href="/article.php?title=一个文章标题">锚文本</a>
文本传值会出错,因此常用数字代替文本
2 引入主键概念,让数据库每一组数据唯一,传值更精准
在数据库中进行设置:
第十八课:实战创建文章页利用主键进行URL跳转
在之前的项目中,可以新增加一个文章页,在根目录创建一个wen.php,便于实战创建URL用,代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>URL传值练习</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div>
<!-- Brand and toggle get grouped for better mobile display -->
<div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span>Toggle navigation</span>
<span></span>
<span></span>
<span></span>
</button>
<a href="#">Brand</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#">Link <span>(current)</span></a></li>
<li><a href="#">Link</a></li>
<li>
<a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span></span></a>
<ul>
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator"></li>
<li><a href="#">Separated link</a></li>
<li role="separator"></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-left">
<div>
<input type="text" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Link</a></li>
<li>
<a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span></span></a>
<ul>
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator"></li>
<li><a href="#">Separated link</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');//连接数据库
$stmt = $pdo -> prepare('select * from article WHERE `id`="'.$_GET['id'].'"');//预处理所需要的数据库里的数据
$stmt -> execute(); //执行上面的预处理
$lists = $stmt -> fetchall();//将上面的数据返回集
$find = $lists[0];//$lists是一个二维数组,为了方便下面用1维数组进行调用,因此增加了一个find
?>
<div>
<div>
<div class="col-md-8 col-sm-12">
<h1 style="font-size:20px;"><?php echo $find['title']; ?></h1>
<p>时间:<?php echo $find['date']; ?></p>
<div><?php echo $find['content']; ?></div>
</div>
<div class="col-md-4 col-sm-12">
这里是侧边栏
</div>
</div>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
第十九课:列表标题URL传值跳转到对应文章
在将之前首页列表上的标题,增加上URL传值,就可以实现动态打开相应的文章页面啦!替换代码如下,就不全部复制了!
<div class="row">
<?php
foreach ($lists as $liebiao){
?>
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="<?php echo $liebiao['img']; ?>" alt="...">
<div class="caption">
<a href="/wen.php?id=<?php echo $liebiao['id']; ?>"><h3><?php echo $liebiao['title']; ?></h3></a>
<p>时间:<?php echo $liebiao['date']; ?> 分类:<?php echo $liebiao['class']; ?></p>
<p><?php echo $liebiao['content']; ?></p>
<p><a href="#" class="btn btn-primary" role="button">查看详情</a></p>
</div>
</div>
</div>
<?php
}
?>
</div>
第二十课:增加导航排序功能20230322更新
创建分类目录表,在分类目录表中增加排序,并将排序打乱,为后面一步排序调用做准备
将主页和文章页php文件中引入刚刚设置好的导航,并设置顺序进行实战练习
以下是index.php的:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>连接mysql数据库返回博客列表文章实战</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div>
<!-- Brand and toggle get grouped for better mobile display -->
<div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span>Toggle navigation</span>
<span></span>
<span></span>
<span></span>
</button>
<a href="/">PHP测试站</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/">首页<span>(current)</span></a></li>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');//连接数据库
$stmt = $pdo -> prepare('select * from class order by sort ASC');//预处理所需要的数据库里的数据
$stmt -> execute(); //执行上面的预处理
$lists = $stmt -> fetchall();//将上面的数据返回集
?>
<?php
foreach ($lists as $daohang){
?>
<li><a href="#"><?php echo $daohang['name']; ?></a></li>
<?php
}
?>
</ul>
<form class="navbar-form navbar-left">
<div>
<input type="text" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<div>
<h1>Hello, world!</h1>
<p>...</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
</div>
<div><h3>最近更新</h3></div>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');
$stmt = $pdo -> prepare('select * from article'); //准备一条SQL语句,来说明调用哪个数据库?;
$stmt -> execute(); //执行一下这个SQL语句;
$lists = $stmt -> fetchall(); //用fetchall来执行这个SQL语句,将这个article这个数据库作为一个数组,赋予给$lists;
?>
<div>
<?php
foreach ($lists as $liebiao){
?>
<div class="col-sm-6 col-md-4">
<div>
<img src="<?php echo $liebiao['img']; ?>" alt="...">
<div>
<a href="/wen.php?id=<?php echo $liebiao['id']; ?>"><h3><?php echo $liebiao['title']; ?></h3></a>
<p>时间:<?php echo $liebiao['date']; ?> 分类:<?php echo $liebiao['class']; ?></p>
<p><?php echo $liebiao['content']; ?></p>
<p><a href="#" class="btn btn-primary" role="button">查看详情</a></p>
</div>
</div>
</div>
<?php
}
?>
</div>
<form action="" method="get">
您的尊称:<input type="text" name="name"><br>
您的手机:<input type="text" name="phone"><br>
<input type="submit" value="提交">
</form>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
然后修改文章页wen.php:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>URL传值练习</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div>
<!-- Brand and toggle get grouped for better mobile display -->
<div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span>Toggle navigation</span>
<span></span>
<span></span>
<span></span>
</button>
<a href="/">PHP测试站</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/">首页<span>(current)</span></a></li>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');//连接数据库
$stmt = $pdo -> prepare('select * from class order by sort ASC');//预处理所需要的数据库里的数据
$stmt -> execute(); //执行上面的预处理
$lists = $stmt -> fetchall();//将上面的数据返回集
?>
<?php
foreach ($lists as $daohang){
?>
<li><a href="#"><?php echo $daohang['name']; ?></a></li>
<?php
}
?>
</ul>
<form class="navbar-form navbar-left">
<div>
<input type="text" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');//连接数据库
$stmt = $pdo -> prepare('select * from article WHERE `id`="'.$_GET['id'].'"');//预处理所需要的数据库里的数据
$stmt -> execute(); //执行上面的预处理
$lists = $stmt -> fetchall();//将上面的数据返回集
$find = $lists[0];
?>
<div>
<div>
<div class="col-md-8 col-sm-12">
<h1 style="font-size:20px;"><?php echo $find['title']; ?></h1>
<p>时间:<?php echo $find['date']; ?></p>
<div><?php echo $find['content']; ?></div>
</div>
<div class="col-md-4 col-sm-12">
这里是侧边栏
</div>
</div>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
最后导航页效果如下:
第二十一课:实战分类目录的传值和调取20230323更新
创建文章表的分类目录主键
我们在之前为了学习方便,因此在文章表的分类上,是直接写中文名字的,在实际项目中,都是以分类表上创建的主键id为主的,这样不容易出错,因此我们对其进行修改!
所以我们把文章表的class分类删掉,以后用class_id进行定位,在实际项目中,应该在一开始就确立好主键!
然后我们在创建一个简单的列表页面,用于导航上可以添加URL:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>列表页</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div>
<!-- Brand and toggle get grouped for better mobile display -->
<div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span>Toggle navigation</span>
<span></span>
<span></span>
<span></span>
</button>
<a href="/">PHP测试站</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/">首页<span>(current)</span></a></li>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');//连接数据库
$stmt = $pdo -> prepare('select * from class order by sort ASC');//预处理所需要的数据库里的数据
$stmt -> execute(); //执行上面的预处理
$lists = $stmt -> fetchall();//将上面的数据返回集
?>
<?php
foreach ($lists as $daohang){
?>
<li><a href="/list.php?id=<?php echo $daohang['id']; ?>"><?php echo $daohang['name']; ?></a></li>
<?php
}
?>
</ul>
<form class="navbar-form navbar-left">
<div>
<input type="text" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');
$stmt = $pdo -> prepare('select * from article where `class_id`="'.$_GET['id'].'"'); //准备一条SQL语句,来说明调用哪个数据库?;
$stmt -> execute(); //执行一下这个SQL语句;
$lists = $stmt -> fetchall(); //用fetchall来执行这个SQL语句,将这个article这个数据库作为一个数组,赋予给$lists;
?>
<div>
<?php
foreach ($lists as $liebiao){
?>
<div class="col-sm-6 col-md-4">
<div>
<img src="<?php echo $liebiao['img']; ?>" alt="...">
<div>
<a href="/wen.php?id=<?php echo $liebiao['id']; ?>"><h3><?php echo $liebiao['title']; ?></h3></a>
<p>时间:<?php echo $liebiao['date']; ?> 分类:<?php echo $liebiao['class']; ?></p>
<p><?php echo $liebiao['content']; ?></p>
<p><a href="#" class="btn btn-primary" role="button">查看详情</a></p>
</div>
</div>
</div>
<?php
}
?>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
然后将index.php wen.php 的导航代码替换都替换成:
<nav class="navbar navbar-default">
<div>
<!-- Brand and toggle get grouped for better mobile display -->
<div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span>Toggle navigation</span>
<span></span>
<span></span>
<span></span>
</button>
<a href="/">PHP测试站</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/">首页<span>(current)</span></a></li>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');//连接数据库
$stmt = $pdo -> prepare('select * from class order by sort ASC');//预处理所需要的数据库里的数据
$stmt -> execute(); //执行上面的预处理
$lists = $stmt -> fetchall();//将上面的数据返回集
?>
<?php
foreach ($lists as $daohang){
?>
<li><a href="/list.php?id=<?php echo $daohang['id']; ?>"><?php echo $daohang['name']; ?></a></li>
<?php
}
?>
</ul>
<form class="navbar-form navbar-left">
<div>
<input type="text" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
这样就可以实现点击对应的导航,就链接到列表页面,并展示改分类目录下的文章了!
202303023这里插一个小更新:
因为代码调用太麻烦了,引入
<?php require("nav.php"); ?>
这样我们把导航代码放到nav.php中,后续php文件要只要增加require就可以直接调用了!
在文章列表上调取相对应的分类
通过上述的学习,小编一直对分类调取有疑惑,因为不管是文章列表,还是文章页面,都要调取分类,而这存在于2个表里,单独调取文章表里的分类,只会显示数字ID,因此需要在调取的时候,创建新的数组,来形成一个新的数组!代码如下,重点给大家标黄,方便学习了!
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>连接mysql数据库返回博客列表文章实战</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!--调用导航-->
<?php require("nav.php"); ?>
<div>
<h1>Hello, world!</h1>
<p>...</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
</div>
<div><h3>最近更新</h3></div>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=不多说了', '不多说了', '不多说了');
$stmt = $pdo -> prepare('select * from article'); //准备一条SQL语句,来说明调用哪个数据库?;
$stmt -> execute(); //执行一下这个SQL语句;
$lists = $stmt -> fetchall(); //用fetchall来执行这个SQL语句,将这个article这个数据库作为一个数组,赋予给$lists;
$stmt = $pdo -> prepare('select * from class'); //增加一个预准备,调取一下分类目录表,原来可以多重调取,这也打消了我原本的疑虑!
$stmt -> execute();
$daohang = $stmt -> fetchall();
$xin = [];//创建一个新的数组用来储存导航id对应的值,用id作为中介,把分类表和文章表中的分类ID相互关联起来,比如文章表的分类ID为1,就是表示新闻,分类目录表里是1,也表示新闻。因此通过foreach循环,形成一个新的数组,来表示1=新闻,在调取时就可以直接表达了!
foreach ($daohang as $dao){
$xin[$dao['id']]=$dao['name'];
}
?>
<div>
<?php
foreach ($lists as $liebiao){
?>
<div class="col-sm-6 col-md-4">
<div>
<img src="<?php echo $liebiao['img']; ?>" alt="...">
<div>
<a href="/wen.php?id=<?php echo $liebiao['id']; ?>"><h3><?php echo $liebiao['title']; ?></h3></a>
<p>时间:<?php echo $liebiao['date']; ?> 分类:<a href="/list.php?id=<?php echo $liebiao['class_id'];?>"><?php echo $xin[$liebiao['class_id']]; ?></a></p>
<p><?php echo $liebiao['content']; ?></p>
<p><a href="#" class="btn btn-primary" role="button">查看详情</a></p>
</div>
</div>
</div>
<?php
}
?>
</div>
<form action="" method="get">
您的尊称:<input type="text" name="name"><br>
您的手机:<input type="text" name="phone"><br>
<input type="submit" value="提交">
</form>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
第二十二课:实战增加搜索功能20230324更新
1 对搜索框进行代码进行修改:
<form action="/sou.php" class="navbar-form navbar-left"> //这样点击搜索,可以跳转到搜索页面!
<div class="form-group">
<input type="text" class="form-control" placeholder="关键词" name="s">
</div>
<button type="submit" class="btn btn-default">搜索</button>
</form>
这样修改后,点击搜索,url就是变成 /sou.php?s=关键词
2 创建一个sou.php 用于输出搜索结果,一般用列表页复制过来即可!
3 对搜索页做一个预处理
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>连接mysql数据库返回博客列表文章实战</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!--调用导航-->
<?php require("nav.php"); ?>
<div>
<h1>Hello, world!</h1>
<p>...</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
</div>
<div><h3>最近更新</h3></div>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=数据库名', '数据库用户名', '数据库密码');
$stmt = $pdo -> prepare('select * from article where `title` like "%'.$_GET['s'].'%" '); //like "%关键词%" 的意思就是关键词前后模糊匹配
$stmt -> execute(); //执行一下这个SQL语句;
$lists = $stmt -> fetchall(); //用fetchall来执行这个SQL语句,将这个article这个数据库作为一个数组,赋予给$lists;
$stmt = $pdo -> prepare('select * from class'); //预准备调取一下分类目录表
$stmt -> execute();
$daohang = $stmt -> fetchall();
$xin = [];//创建一个新的数组用来储存导航id对应的值,用id作为中介,把分类表和文章表中的分类ID相互关联起来,比如文章表的分类ID为1,就是表示新闻,分类目录表里是1,也表示新闻。因此通过foreach循环,形成一个新的数组,来表示1=新闻,在调取时就可以直接表达了!
foreach ($daohang as $dao){
$xin[$dao['id']]=$dao['name'];
}
?>
<div>
<?php
foreach ($lists as $liebiao){
?>
<div class="col-sm-6 col-md-4">
<div>
<img src="<?php echo $liebiao['img']; ?>" alt="...">
<div>
<a href="/wen.php?id=<?php echo $liebiao['id']; ?>"><h3><?php echo $liebiao['title']; ?></h3></a>
<p>时间:<?php echo $liebiao['date']; ?> 分类:<a href="/list.php?id=<?php echo $liebiao['class_id'];?>"><?php echo $xin[$liebiao['class_id']]; ?></a></p>
<p><?php echo $liebiao['content']; ?></p>
<p><a href="#" class="btn btn-primary" role="button">查看详情</a></p>
</div>
</div>
</div>
<?php
}
?>
</div>
<form action="" method="get">
您的尊称:<input type="text" ><br>
您的手机:<input type="text" name="phone"><br>
<input type="submit" value="提交">
</form>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
然后我们搜索一下标题中带有的“女性”,就可以得到一篇文章了!如下:
第二十三课:实战后台登录20230325更新
1 在数据库里创建一个用户表
密码加密要自己处理下,直接输入是无法加密的!
2 做一个登录页面,放到后台新建的admin文件夹内,名:deng.php
<?php
if(!empty($_POST)){
if(empty($_POST['user'])){
echo '<script>window.alert("请输入账号!");history.back();</script>';
return false; //return false,事件处理函数会取消事件,不再继续向下!
}
if(empty($_POST['word'])){
echo '<script>window.alert("请输入密码!"); history.back();</script>';
return false;
}//这2个判断写在里面,是因为表格的post提交,虽然看不到,但是也有一个空值存在!
$pdo = new PDO('mysql:host=localhost;dbname=名', '名', '密码');
$stmt = $pdo -> prepare('select * from users where `username` = "'.$_POST['user'].'"');
$stmt -> execute();
$admin = $stmt -> fetchall();
$find = $admin[0];//将用户数据库二维数组表变成一维数组表
if($_POST['user'] != $find['username']){
echo '<script>window.alert("用户名错误!"); history.back();</script>';
return false;
}
if( md5($_POST['word']) != $find['password']){ //32位小写的md5加密
echo '<script>window.alert("密码错误!"); history.back();</script>';
return false;
}
echo '<script>window.alert("登录成功!");window.location.href="hou.php";</script>';//创建一个后台页面,登录后进入后台
return false;
}
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>登录页</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!--调用导航-->
<?php require("../nav.php"); ?>
<form action="" method="post"><!--post提交,不会在url上显示密码-->
用户名:<input type="text" name="user" ><br>
密码:<input type="password" name="word"><br> <!--type="password"在前端输入密码的时候,可以隐藏密码-->
<input type="submit" value="登录">
</form>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
3 在登录环节上引入2个超全局变量的认识
Session 变量
$_SESSION:变量用于存储关于用户会话(session)的信息,通常是存放在服务器上!
cookie变量
$_COOKIE:常用于识别用户,通常是存放在用户的浏览器的缓存上,这样可以方便用户登录,只要有缓存,打开就能直接登录到后台了!同时在登录后台时,也可以用于判断用户是否登录,如果没有登录,则返回到登录状态。
所以我们在刚刚的登录页面上加上cookie的获取
<?php
if(!empty($_POST)){
if(empty($_POST['user'])){
echo '<script>window.alert("请输入账号!");history.back();</script>';
return false; //return false,事件处理函数会取消事件,不再继续向下!
}
if(empty($_POST['word'])){
echo '<script>window.alert("请输入密码!"); history.back();</script>';
return false;
}//这2个判断写在里面,是因为表格的post提交,虽然看不到,但是也有一个空值存在!
$pdo = new PDO('mysql:host=localhost;dbname=名', '名', '密码');
$stmt = $pdo -> prepare('select * from users where `username` = "'.$_POST['user'].'"');
$stmt -> execute();
$admin = $stmt -> fetchall();
$find = $admin[0];//将用户数据库二维数组表变成一维数组表
if($_POST['user'] != $find['username']){
echo '<script>window.alert("用户名错误!"); history.back();</script>';
return false;
}
if( md5($_POST['word']) != $find['password']){ //32位小写的md5加密
echo '<script>window.alert("密码错误!"); history.back();</script>';
return false;
}
setcookie('id',$find['id']);
setcookie('user',$find['username']);//获取用户的cookie,20230331更新,推荐使用session进行判断,可以更有效的做用户登录和退出,cookie是保存在浏览器的,不安全,退出也不太好设置
echo '<script>window.alert("登录成功!");window.location.href="hou.php";</script>';//登录进入后台
return false;
}
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>登录页</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!--调用导航-->
<?php require("../nav.php"); ?>
<form action="" method="post"><!--post提交,不会在url上显示密码-->
用户名:<input type="text" name="user" ><br>
密码:<input type="password" name="word"><br> <!--type="password"在前端输入密码的时候,可以隐藏密码-->
<input type="submit" value="登录">
</form>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
第二十四课:实战后台文章列表页20230327更新
1 先做一个简单的后台文章列表页面
2 在登录页面上,对用户的cookie做一下判断,如果没有用户的cookies,就需要跳转到登录页
3 文章列表的获取,和之前讲过的一样,用数据库做一下连接,获取一下即可
<?php
if(empty($_COOKIE)){ //这里做一个获取cookie的判断,防止任何人都能访问后台页面!
echo '<script>window.alert("请登录!");window.location.href="deng.php";</script>';
return false;
}
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>后台文章列表页</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!--调用导航-->
<?php require("../nav.php"); ?>
<h4>我的文章</h4>
<ul>
<?php
$pdo = new PDO('mysql:host=localhost;dbname=名', '名', '密码');
$stmt = $pdo -> prepare('select * from article');
$stmt -> execute();
$admin = $stmt -> fetchall();
?>
<?php
foreach ($admin as $link){ //调取文章
?>
<li>
<a href="/wen.php?id=<?php echo $link['id'];?>"><?php echo $link['title']; ?></a>
</li>
<?php } ?>
</ul>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
最后效果如下:
4 同时,我们可以利用登录cookie优化导航,在登录时,可以显示用户名,优化nav.php
<?php
$pdo = new PDO('mysql:host=localhost;dbname=', '', '');//连接数据库
$stmt = $pdo -> prepare('select * from class order by sort ASC');//预处理所需要的数据库里的数据
$stmt -> execute(); //执行上面的预处理
$lists = $stmt -> fetchall();//将上面的数据返回集
?>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">PHP测试站</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="/">首页<span class="sr-only">(current)</span></a></li>
<?php
foreach ($lists as $daohang){
?>
<li><a href="/list.php?id=<?php echo $daohang['id']; ?>"><?php echo $daohang['name']; ?></a></li>
<?php
}
?>
</ul>
<form action="/sou.php" class="navbar-form navbar-left">
<div class="form-group">
<input type="text" class="form-control" placeholder="关键词" name="s">
</div>
<button type="submit" class="btn btn-default">搜索</button>
</form>
<?php
if(!empty($_COOKIE)){
echo '
<ul class="nav navbar-nav navbar-right">
<li><a href="">'.$_COOKIE['user'].'</a></li>
</ul>
';
}
?>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
登录后效果如下:
第二十五课:实现分页效果20230328
1 定义分页URL ,如hou.php?p=2,表示第二页
2 获取文章表的总数
3 计算页数
代码如下:
<?php
if(empty($_COOKIE)){ //这里做一个获取cookie的判断,防止任何人都能访问后台页面!
echo '<script>window.alert("请登录!");window.location.href="deng.php";</script>';
return false;
}
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>后台文章列表页</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.cn/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.cn/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!--调用导航-->
<?php require("../nav.php"); ?>
<h4>我的文章</h4>
<ul>
<?php
if(empty($_GET['p'])){
$p = 1;
}else{
$p = $_GET['p']; //这是给页数定义一个p?=数字,一个URL,比如第二页就是hou.php?p=2 而如果页数为空,则默认第一页显示
}
$one = ($p-1)*1; //比如第一页,其实是从0页开始的,然后乘以获取条数1
$pdo = new PDO('mysql:host=localhost;dbname=', '', '');
$stmt = $pdo -> prepare('select * from article limit '.$one.', 1'); //配合分页,limit 查询
$stmt -> execute();
$admin = $stmt -> fetchall();
$stmt = $pdo -> prepare('select count(*) from article'); //计算文章表总条数
$stmt -> execute();
$count = $stmt -> fetchall();//这是一个二维数组
$count_yiwei = $count[0]['count(*)'];//将上面的二维数组转为具体数值结果
$page = ceil($count_yiwei / 1); //ceil可以取余,比如10条一页,31条,就可以得到4!这里方便学习,所以除以1
?>
<?php
foreach ($admin as $link){ //调取文章
?>
<li>
<a href="/wen.php?id=<?php echo $link['id'];?>"><?php echo $link['title']; ?></a>
</li>
<?php } ?>
</ul>
<nav aria-label="Page navigation">
<ul>
<?php
for($x=1; $x<=$page; $x++) { //for循环获取页数号码,自增1
?>
<li><a href="hou.php?p=<?php echo $x;?>"><?php echo $x;?></a></li>
<?php
}
?>
</ul>
</nav>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</body>
</html>
最后效果如下,有3页,每页为1条数据
第二十六课:实战在后台发布文章功能