网站添加注册/登录界面

        这里的网站是基于web server的网站,比如基于LAMP组合。关于如何在Ubuntu server上安装和设置web server,请参考“设置VirtualBox上的Ubuntu Server来Host网站”。另外,这里的Ubuntu server是安装在VirtualBox,在Windows 10上面host的。当然,web server可以在其他平台运行。关于Ubuntu server的安装,可参考“Windows上安装VirtualBox运⾏Ubuntu Server及SSH登录”。

        接下来的网站添加注册/登录界面会用到MySQL和PHP,具体可分别参考https://dev.mysql.com/doc/ 和https://www.w3schools.com/php/。普通网站,比如只是展现个人介绍或者相册的网站,使用html和css是足够的,而且,在本地或者远端都比较容易实现,不需要另外安装软件。如果需要添加用户登录界面,这时候,MySQL和PHP会非常方便。

        MySQL可以提供支持数据存储和访问的数据库,PHP是server scripting language,可以非常方便的实现网页的各种动态互动。

        一、创建database来保存用户信息

        1. 登录MySQL

        使用root连接MySQL

                sudo mysql -u root

        或者使用已经有授权的其他用户登录mysql,可使用

                sudo mysql -u -p

        回车之后会被要求输入相应的密码来登录。

        2. 这里列出一些mysql的基本命令,具体可以参考https://dev.mysql.com/doc/ 。

        列出所有databae:

                SHOW DATABASES;

        如果没有登录MySQL,也可以执行:

                sudo mysql -u -p -e “SHOW DATABASES;”

        列出所有用户:

                SELECT user FROM mysql.user;

        列出现在的用户:

                SELECT user();

        列出所有的table:

                USE ;

                SHOW TABLES;

        或者

                SHOW TABLES FROM ;

        3. 创建用户表格

        在MySQL里运行一下命令:

———————————————————————————

CREATE TABLE users (

    id INTNOT NULL PRIMARY KEY AUTO_INCREMENT,

    email  VARCHAR(100) NOT NULL UNIQUE,

    username VARCHAR(50)NOT NULL UNIQUE,

    password VARCHAR(50)NOT NULL,

    created_at DATETIME DEFAULT CURRENT_TIMESTAMP

);

———————————————————————————

        也可以把上面的命令添加到text文件里,比如file.txt,在mysql里执行:

                \.  /path/to/file/file.txt

        如需要删除表格(注意,信息会被删除,不可恢复):

                DROP TABLE users;

        二、创建配置文件

        这里使用PHP来连接database server,创建配置文件config.php,它主要声明访问database的登录信息。由于文件包含用户信息,这里不要把文件放在public_html,share等公共访问路径中。注意替换相应的username和password。

———————————

define('DB_SERVER', 'localhost');

define('DB_USERNAME', 'test');

define('DB_PASSWORD', 'test1234');

define('DB_NAME', 'testDB');

$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if ($link == false) {

  die("error: could not connect. " .mysqli_connect_error());

}

?>

———————————

        三、创建注册/登录页面

        由于页面的创建方法类似,这里仅用用户注册页面为例。注册页面通常以表格的形式来收集信息,并将信息对比存储在数据库里的用户信息来决定是否创建新的用户;如果创建,实质上是在数据库里面添加新的用户信息。登录页面则根据用户提供的信息,对比数据库里面的信息,验证是否正确及下一步操作。

        对于PHP不熟悉的话,建议参考https://www.w3schools.com/php/ 。在创建PHP文件时,可以打开错误提示,这样运行的时候,就很容易知道哪里出了问题。打开错误提示,这里有两步:

        一是在PHP文件中包括以下几行:

————————————

ini_set('display_errors', 1);

ini_set('display_startup_errors', 1);

error_reporting(E_ALL);

————————————

        二是在/etc/php/7.X/apache2/php.ini中打开display_errors (X这里为版本,比如7.4):

                display_errors = On

        基本的signup.php文件通常包括以下几个区块:

        1. 使用配置文件:这里是指上文中的config.php,用法,

                require_once(“/path/to/config.php”);

        2. 设置储存用户信息的变量:比如username,email, password,confirm password等。对于每一个变量,可对应一个错误提示变量。这些变量初值为空,然后根据用户填写的信息, 获得真实值:

                $email = $username = $password = $confirm_password = "";

                $email_err = $username_err = $password_err = $confirm_password_err = "";

        3. 一旦用户提交信息,需要跟数据库比对来决定是否可以创建新的用户。这里可以用emai或者username等具有唯一性的变量来判断。其他变量的访问与存储类似。这里只列出一个例子:

————————————————————————————————

if ($_SERVER["REQUEST_METHOD"] == "POST") {

  if (empty(trim($_POST["email"]))) {

    $email_err = "Please enter an email address.";

  }

  else {

    $sql = "SELECT id FROM users WHERE email = ?";

    if ($stmt = mysqli_prepare($link, $sql)) {

      mysqli_stmt_bind_param($stmt, "s", $param_email);

      $param_email = trim($_POST["email"]);

      if (mysqli_stmt_execute($stmt)) {

        mysqli_stmt_store_result($stmt);

        if (mysqli_stmt_num_rows($stmt) == 1) {

          $email_err = "error: this email address is already taken.";

        }

       else {

          $email = trim($_POST["email"]);

       }

    }

    else {

      echo "Something was wrong! Please try again later.";

     }

    mysqli_stmt_close($stmt);

  }

}

———————————————————————————————

        当然,还可以根据需要,添加相应的功能,比如验证是否为有效的email,以及字符串长度等。用户填写的信息,基本上可以分为三类:

                (i).信息不符合要求:提醒重新注册

                (ii).用户已经存在:可以导向登录页面

                (iii).可以注册新用户:添加信息到数据库,并导向登录页面

        这里只针对(iii)给出一个例子:

—————————————————————————————————

if (empty($email_err) && empty($username_err) && empty($password_err) && empty($confirm_password_err)) {

  $sql = "INSERT INTO users (email, username, password) VALUES (?, ?, ?)";

  if ($stmt = mysqli_prepare($link, $sql)) {

    mysqli_stmt_bind_param($stmt, "sss", $param_email, $param_username, $param_password);

    $param_email = $email;

    $param_username = $username;

    $param_password = password_hash($password, PASSWORD_DEFAULT);

    if(mysqli_stmt_execute($stmt)){

       header("location: login.php");

    }

    else{

       echo "Something was wrong! Please try again later.”;

    }

    mysqli_stmt_close($stmt);

  }

——————————————————————————————————

        4. 接下来就是html网页本身的内容。这里主要是指显示可以让用户填写信息的表格,其具体形式可以通过css来实现。这里以email为例,其他类似。

——————————————————————————————————————

" method="post">

    ">

         

         

         

    

—————————————————————————————————————

        登录页面可以参考上面的注册页面创建。完整的登录系统会涉及更多的功能,比如忘记密码,密码重置,欢迎页面等,其创建方法类似。这些PHP文件创建完成之后,可以在远程电脑或者手机上,通过相应的IP 地址和Port信息,进行访问和测试。具体可以参考“设置VirtualBox上的Ubuntu Server来Host网站”。比如对应的web server的IP为1.2.3.4, port为2222,则可以访问位于/var/www/html下面的public_html的signup.php:

                http://1.2.3.4:2222/signup.php

如果添加了PHP错误提示,会给出具体的错误类型和位置。对应的注册和登录PHP文件,也可以通过href镶嵌到其他html文件中。

你可能感兴趣的:(网站添加注册/登录界面)