网站添加注册/登录界面

        这里的网站是基于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 <databaseName> ;

                SHOW TABLES;

        或者

                SHOW TABLES FROM <databaseName>;

        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。

———————————

<?php

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为例,其他类似。

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

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">

    <div class="form-group <?php echo (!empty($email_err)) ? 'has-error' : ''; ?>">

         <label>Email</label>

         <input type="text" name="email" class="form-control" value="<?php echo

$email; ?>">

         <span class="help-block"><?php echo $email_err; ?></span>

    </div>

</form>

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

        登录页面可以参考上面的注册页面创建。完整的登录系统会涉及更多的功能,比如忘记密码,密码重置,欢迎页面等,其创建方法类似。这些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文件中。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Welcome 目前网络上充斥着大量的陈旧信息,让PHP新手误入歧途,传播着错误的实践和糟糕的代码,这必须得到纠正...
    layjoy阅读 21,655评论 7 118
  • 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才...
    Java小铺阅读 288评论 0 1
  • 关于LNMP知识: 1.LNMP的介绍: 在2010年以前,互联网最常用的经典Web服务环境组合就是 LAMP(...
    你好树洞先生阅读 454评论 0 1
  • 夜莺2517阅读 127,709评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,876评论 1 6