zoukankan      html  css  js  c++  java
  • php第二例

    参考:

    http://www.php.cn/code/3645.html

    前言

    由于navicat在linux平台不能很好的支持, PHP的学习转到windows平台.

    • php IDE: PhpStorm 64bit(需要和jvm保持一致)
    • XAMPP套件
    • navicat 可视化数据库

    目标:

    实现 message-board

    涉及技术:

    php读写mysql, 增, 删, 查

    代码:

    https://github.com/hixin/message-board

    目录映射

    ln -s /home/sain/code/PHP/message-board /opt/lampp/htdocs/test/message-board

    访问页面: http://localhost/test/message-board/add.html

    修改mysql密码

    ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

    /opt/lampp/phpmyadmin/config.inc.php

    /* Authentication type */
    $cfg['Servers'][$i]['auth_type'] = 'config';
    $cfg['Servers'][$i]['user'] = 'root';
    $cfg['Servers'][$i]['password'] = 'tiger';
    

    访问数据库时 mysql -u root -p;

    数据库

    构造数据库

    create  database demo;
    
    CREATE TABLE `message` (
     `id` tinyint(1) NOT NULL auto_increment,
     `user` varchar(25) NOT NULL,
     `title` varchar(50) NOT NULL,
     `content` tinytext NOT NULL,
     `lastdate` timestamp NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    

    查询数据库:

    查看数据库中的表:
    MariaDB [demo]> show tables
        -> ;
    +----------------+
    | Tables_in_demo |
    +----------------+
    | message        |
    +----------------+
    1 row in set (0.00 sec)
    
    查看表结构:
    MariaDB [demo]> desc  message;
    +----------+-------------+------+-----+-------------------+-----------------------------+
    | Field    | Type        | Null | Key | Default           | Extra                       |
    +----------+-------------+------+-----+-------------------+-----------------------------+
    | id       | tinyint(1)  | NO   | PRI | NULL              | auto_increment              |
    | user     | varchar(25) | NO   |     | NULL              |                             |
    | title    | varchar(50) | NO   |     | NULL              |                             |
    | content  | tinytext    | NO   |     | NULL              |                             |
    | lastdate | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
    +----------+-------------+------+-----+-------------------+-----------------------------+
    5 rows in set (0.00 sec)
    
    

    创建所需的PHP文件

    add.html 评论页面

    add.php 提交评论页面传输的内容到数据库。

    conn.php 连接数据的配置文件

    css.css 文件 美化html样式

    del.php 删除评论文件

    list.php 获得数据库中所有的数据展示在页面上。

    连接数据库 conn.php

    新建文件conn.php 用来设置连接数据库文件

    <?php
     $conn =mysql_connect("localhost", "root", "tiger") or die("数据库链接错误");
     mysql_select_db("demo", $conn);
     mysql_query("set names 'utf8'"); //使用utf-8中文编码;
     ?>
    

    后面的文件 需要用到数据库连接,只需要调用conn.php文件就可以将使用,很方便。

    创建留言板提交页面

    add.html

    <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <link href="css.css" rel="stylesheet" type="text/css">
         <title>Title</title>
         <?php include ("add.php")?>
     
     </head><body>
     <b><a href="add.php">添加留言</a></b>
     <hr size=1>
     <form action="add.php" method="post" >
         用户:<input type="text" size="10" name="user"/><br>
         标题:<input type="text" name="title" /><br>
         内容:<textarea name="content"></textarea><br>
         <input type="submit" name="submit" value="发布留言" />
     </form>
     </body>
     </html>
    

    加强版:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <link href="css.css" rel="stylesheet" type="text/css">
        <title>Title</title>
        <?php include ("add.php")?>
    </head>
    <script>
        function CheckPost() {
            if(myform.user.value=="")
            {
                alert("请填写用户");
                myform.user.focus();
                return false;
            }
            if (myform.title.value.length<5)
            {
                alert("标题不能少于5个字符");
                myform.title.focus();
            return false;
            }
            if (myform.content.value=="")
            {
                alert("内容不能为空");
                myform.content.focus();
                return false;
            }
        }
    </script>
    <body>
    <b> <a href="list.php">浏览留言</a>  </b>
    <hr size=1>
    <form action="add.php" method="post" name="myform" onsubmit="return CheckPost();">
        用户:<input type="text" size="10" name="user"/><br>
        标题:<input type="text" name="title" /><br>
        内容:<textarea name="content"></textarea><br>
        <input type="submit" name="submit" value="发布留言" />
    </form>
    </body>
    </html>
    

    html页面中引入了conn文件和css文件,分别用来连接数据库和对页面进行布局

    css.css

    td {
       line-height: 16pt;
       font-size: 10pt;
       font-family: "Verdana", "Arial", "Helvetica", "sans-serif";
    }
    a:link {
       text-decoration: none;
       color: #000000;
    }
    body {
       font-size: 10pt;
       line-height: 13pt;
       background-color: #ECF5FF;
    }
    textarea {
       font-size: 8pt;
       font-family: "Verdana", "Arial", "Helvetica", "sans-serif";
       border: 1px solid #999999;
       padding: 5px;
    }
    form {
       margin: 0px;
       padding: 0px;
    }
    .textdrow {
       color:#666666;
       filter: DropShadow(Color=white, OffX=1, OffY=1, Positive=1);
    }
    .p {
       text-indent: 24px;
    }
    

    留言板页面提交php文件 add.php

    add.php 文件通过 $_POST 变量来收集表单数据了

    <?php
    
    include ("conn.php");
    $id=$_POST['id'];
    $user=$_POST['user'];
    $title=$_POST['title'];
    $content=$_POST['content'];
    if ($_POST['submit']){
     $sql="insert into message(id,user,title,content,lastdate)values('','$user','$title','$content',now())";
     mysql_query($sql);
     echo "<script>alert('提交成功!返回首页。');location.href='add.html';</script>";
    }
    ?>
    

    调用数据库连接文件,当点击submit时用post提交方式,使用sql语insert into对message表内的id user title content lastdata 写入文件, echo "<script>alert('提交成功!返回首页。');

    location.href='add.html';</script>";是使用js来进行弹窗提示并返回。

    创建文件 list.php

    <!DOCTYPE html>
     <html lang="utf-8">
     <head>
     <?php
     include ("conn.php");
     ?> 
     <link href="css.css" rel="stylesheet" type="text/css">
     </head>
     
     
     <table width=500 border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#add3ef" >
     <?php
     $sql="select * from message order by id desc";
     $query=mysql_query($sql);
     while($row=mysql_fetch_array($query)){ ?>
     
     <tr bgcolor="#eff3ff">
     <td>标题: <?php echo $row['title'];?> <font color="red">用户: <?php echo $row['user'];?> </td>
     </tr>
     <tr bgColor="#ffffff">
     <td>发表内容:<?php echo $row['content'];?></td>
     </tr>
     <tr bgColor="#ffffff">
     <td><div align="right">时间:<?php echo $row['lastdate'];?></td>
     </tr>
     <?php } ?>
     <tr bgcolor="#f0fff0">
     <td><div align="right">< a href=" ">返回留言</ a> </td>
     </tr>
     </table>
     </html>
    

    其中

    <?php
        $sql="select * from message order by id desc";
        $query=mysql_query($sql);
        while($row=mysql_fetch_array($query)){ 
        } ?>
    

    连接message数据库进行倒叙排序,使用倒叙的方式显示数据,最新的放在最前面,更能符合人们使用的习惯。

    要注意: 一定要用.php后缀, php可以看作是加强版的html, 可以执行php函数, 如果是html后缀, 里面的php命令默认不会执行.

    删除留言 del.php

    <?php
    include 'conn.php';
        $id = $_GET['id'];
        $query="delete from message where id=".$id;
        mysql_query($query);
    ?>
    //引入conn文件,使用get方式获取id,使用sql语句来删除id
    <?php
    //页面跳转,实现方式为javascript 
    $url = "list.php";
    echo "<script>";
    echo "window.location.href='$url'";
    echo "</script>";
    ?> 
    //使用js页面跳转回list查看文件的页面
    

    注意list.php的这里:

    <?php error_log($row['id'], 3, "D:php_error.log");?>
    <div align="right"><a href="del.php?id=<?php echo $row['id']; ?>">删除</a></div>
    

    实际相当于执行:http://localhost/test/message_board/del.php?id=7

    异常及解决

    Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /home/sain/code/PHP/message-board/conn.php:2 Stack trace: #0 /home/sain/code/PHP/message-board/add.php(2): include() #1 {main} thrown in /home/sain/code/PHP/message-board/conn.php on line 2

    查阅资料后发现,原来是从PHP5.0开始就不推荐使用mysql_connect()函数,到了php7.0则直接废弃了该函数,替代的函数是: mysqli_connect(); 用法是: $con=mysqli_connect("localhost","my_user","my_password","my_db");

    Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in /home/sain/code/PHP/message-board/conn.php on line 2 error Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in /home/sain/code/PHP/message-board/add.php on line 6 insert error

    还是因为密码的问题,改成下面ok:

    <?php
    $conn = mysqli_connect("localhost", "root", "", "demo");
    if($conn){
        echo"ok";
    }else{
        echo"error";    
    }
     ?>
    

    技巧

  • 相关阅读:
    Python 学习笔记 11.模块(Module)
    Python 学习笔记 8.引用(Reference)
    Python 学习笔记 9.函数(Function)
    Python 学习笔记 6.List和Tuple
    Python 学习笔记 4.if 表达式
    Python 学习笔记 2.自省
    Python 学习笔记 3.简单类型
    Python 学习笔记 7.Dictionary
    Python 学习笔记 5.对象驻留
    Python 学习笔记 10.类(Class)
  • 原文地址:https://www.cnblogs.com/hixin/p/9548810.html
Copyright © 2011-2022 走看看