PHP教学!我的学习结合实战心得笔记更新,和我一起简单学会它!

2周前 (03-16 18:37)阅读151回复0
翱翔MJ
翱翔MJ
  • 管理员
  • 注册排名1
  • 经验值2335
  • 级别管理员
  • 主题351
  • 回复290
楼主
☰ 快捷目录
  • 第一课:PHP基础语法20230316更新
  • 第二课:根据第一课的语法创建一个简单的静态php页面
  • 第三课:PHP的常见的五类标量类型
  • 第四课:PHP的数组
  • 第五课:多维度数组20230317更新
  • 第六课:数组循环
  • 第七课:利用数组循环写一个网站导航和列表
  • 第八课:PHP条件判断20230318更新
  • 第九课:PHP的函数
  • 第十课:PHP运算符
  • 第十一课:PHP循环20230319更新
  • 第十二课:mysql简介
  • 第十三课:PDO连接mysql数据库
  • 第十四课:连接mysql数据库返回博客列表文章实战
  • 第十五课:mysql的增删查改语句20230320更新
  • 第十六课:PHP超全局变量
  • 第十七课:数据库主键概念20230321更新
  • 第十八课:实战创建文章页利用主键进行URL跳转
  • 第十九课:列表标题URL传值跳转到对应文章
  • 第二十课:增加导航排序功能20230322更新
  • 第二十一课:实战分类目录的传值和调取20230323更新
  • 第二十二课:实战增加搜索功能20230324更新
  • 第二十三课:实战后台登录20230325更新
  • 第二十四课:实战后台文章列表页20230327更新
  • 第二十五课:实现分页效果20230328
  • 第一课: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>


    访问这个文件可以看到如下图:

    360截图20230316191217113.jpg


    第三课: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然后循环输出出来。

    */

    ?>


    效果如下图,可以循环将数组中的内容全部循环显示出来:

    360截图20230317200601841.jpg

    第七课:利用数组循环写一个网站导航和列表

    先用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>


    最后效果如下图:

    360截图20230317203415712.jpg

    而网页中的列表也可以通过二维数组的形式展现出来,一样我们可以利用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>


    最后效果如下图:


    360截图20230317210648091.jpg


    第八课: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 比较运算符

    360截图20230318121518279.jpg


    4 逻辑运算符

    360截图20230318121843831.jpg

    常见于条件判断中


    第十一课: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 了解新建数据库

    360截图20230319111401634.jpg


    2 数值数据类型,常用的为下图框选的三个:

    360截图20230319111851959.jpg


    3 字符串数据类型,常用的2个如下图框选:

    360截图20230319112041903.jpg


    4 日期时间数据类型

    360截图20230319112214664.jpg


    5 试着创建一个数据库表

    360截图20230319112436159.jpg


    第十三课:PDO连接mysql数据库

    1 查询语句: select * from 表名;


    2 pdo连接mysql数据库

    360截图20230319130825529.jpg


    <?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>


    创建好以后,效果如下图:


    360截图20230319121159181.jpg

    接下来要做的就是利用数据库引入,将最近更新的文章调取并展示出来!


    2 登录数据库,创建数据库article文章表


    360截图20230319122850732.jpg

    3 在这个article表中手动增加3篇文章内容的数据,如下图:

    关于图片上传到根目录,创建一个img的文件夹,反正都是学习测试用的!


    360截图20230319123812300.jpg


    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>


    最后,展示效果如下:

    2023-03-19_134421.png


    第十五课: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 常见的超全局变量

    360截图20230320203953820.jpg

    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>


    效果截图:

    360截图20230320204723908.jpg


    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 引入主键概念,让数据库每一组数据唯一,传值更精准

    在数据库中进行设置:

    360截图20230321192501344.jpg


    第十八课:实战创建文章页利用主键进行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更新

    创建分类目录表,在分类目录表中增加排序,并将排序打乱,为后面一步排序调用做准备


    360截图20230322184503606.jpg


    将主页和文章页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>


    最后导航页效果如下:


    360截图20230322193107981.jpg


    第二十一课:实战分类目录的传值和调取20230323更新

    创建文章表的分类目录主键

    我们在之前为了学习方便,因此在文章表的分类上,是直接写中文名字的,在实际项目中,都是以分类表上创建的主键id为主的,这样不容易出错,因此我们对其进行修改!


    360截图20230322193438915.jpg



    所以我们把文章表的class分类删掉,以后用class_id进行定位,在实际项目中,应该在一开始就确立好主键!


    360截图20230322194944003.jpg


    然后我们在创建一个简单的列表页面,用于导航上可以添加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>


    然后我们搜索一下标题中带有的“女性”,就可以得到一篇文章了!如下:


    360截图20230324204235616.jpg


    第二十三课:实战后台登录20230325更新

    1 在数据库里创建一个用户表

    360截图20230325174108273.jpg

    密码加密要自己处理下,直接输入是无法加密的!


    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>

    最后效果如下:

    360截图20230327194923676.jpg

    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>


    登录后效果如下:

    360截图20230328183129133.jpg

    第二十五课:实现分页效果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条数据

    360截图20230328211338214.jpg


    第二十六课:实战在后台发布文章功能




















    0
    回帖

    PHP教学!我的学习结合实战心得笔记更新,和我一起简单学会它! 期待您的回复!

    取消
    载入表情清单……
    载入颜色清单……
    插入网络图片

    取消确定

    图片上传中
    编辑器信息
    提示信息