主頁 > 後端開發 > 利用會話控制實作頁面登錄與注銷功能(高顏值許愿墻實體原始碼)

利用會話控制實作頁面登錄與注銷功能(高顏值許愿墻實體原始碼)

2020-09-20 06:43:51 後端開發

首先是一個普通的登陸頁面實作

登錄頁面login.php

<!DOCTYPE html>
<html>
    <head>
        <title>登陸頁</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    </head>
    <body>
        <div class="container">
            <div class="card col-12 mt-5">
                <div class="card-body">
                    <h4 class="card-title">
                        用戶登錄
                    </h4>
                    <div class="col-12 mt-4 d-flex justify-content-center">
                        <form class="col-8" method="post" action="action.php">
                            <input type="hidden" name="action" value="login">
                            <div class="form-group">
                                <label for="username">用戶名</label>
                                <input type="text"
                                       class="form-control"
                                       id="username"
                                       name="username"
                                       placeholder="請輸入用戶名">
                            </div>
                            <div class="form-group">
                                <label for="password">密碼</label>
                                <input type="password"
                                       class="form-control"
                                       id="password"
                                       name="password"
                                       placeholder="請輸入密碼">
                            </div>
                            <div class="form-group form-check">
                                <input type="checkbox"
                                       class="form-check-input"
                                       id="remember"
                                       name="remember">
                                <label class="form-check-label"
                                       for="remember">
                                    在這臺電腦上記住我的登錄狀態
                                </label>
                            </div>
                            <button type="submit"
                                    class="btn btn-primary">
                                登錄
                            </button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>

登錄功能實作action.php

    <?php
    session_start();

    switch ($_REQUEST['action']) {
        case 'login':
            $username = $_POST['username'];
            $password = $_POST['password'];
            $remember = $_POST['remember'];

            $user = getUser();

            if ($username != $user['username']) {
                // 登錄失敗
                sendLoginFailedResponse();
            }

            if ($password != $user['password']) {
                // 登錄失敗
                sendLoginFailedResponse();
            }

            if ($remember) {
                rememberLogin($username);
            }

            $_SESSION['username'] = $username;
            header("location:index.php");

            break;

        case 'logout':
            session_unset();
            setcookie("username", "", time() - 1);
            header("location:login.php");
            break;
    }


    function getUser() {
        return array(
            "username" => "cyy",
            "password" => "123456"
        );
    }

    function sendLoginFailedResponse() {
        $response = "<script>
    alert('用戶名或密碼錯誤!');
    window.location='login.php';
    </script>";
        echo $response;
        die;
    }

    function rememberLogin($username) {
        setcookie("username", $username, time() + 7 * 24 * 3600);
    }

首頁index.php

    <?php
    session_start();

    if (rememberedLogin()) {
        $_SESSION['username'] = $_COOKIE['username'];
    }

    if (!hasLoggedIn()) {
        header("location:login.php");
        die;
    }

    function hasLoggedIn() {
        return isset($_SESSION['username']) && validateUsername($_SESSION['username']);
    }

    function validateUsername($username) {
        return $username == "cyy";
    }

    function rememberedLogin() {
        return isset($_COOKIE['username']) && validateUsername($_COOKIE['username']);
    }
    ?>

    <!DOCTYPE html>
    <html>
        <head>
            <title>主頁</title>
            <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
        </head>
        <body>
            <div class="container">
                <nav class="navbar navbar-light bg-light">
                    <a class="navbar-brand">
                        使用 Cookie 和 Session 實作會話控制
                    </a>
                    <a href="action.php?action=logout">
                        <button class="btn btn-outline-danger my-2 my-sm-0"
                                type="button">
                            注銷
                        </button>
                    </a>
                </nav>
                <div class="d-flex justify-content-around mt-5">
                    <div class="card col-5">
                        <div class="card-body">
                            <h5 class="card-title">
                                會話控制實戰內容一
                            </h5>
                            <h6 class="card-subtitle mb-2 text-muted">
                                SESSION 部分
                            </h6>
                            <p class="card-text">
                                實作用戶認證功能,用戶登錄、退出與身份識別
                            </p>
                        </div>
                    </div>
                    <div class="card col-5">
                        <div class="card-body">
                            <h5 class="card-title">
                                會話控制實戰內容二
                            </h5>
                            <h6 class="card-subtitle mb-2 text-muted">
                                COOKIE 部分
                            </h6>
                            <p class="card-text">
                                實作登錄記住用戶功能,七天免登錄認證
                            </p>
                        </div>
                    </div>
                </div>
                <div class="d-flex justify-content-around mt-4">
                    <div class="card col-5">
                        <div class="card-body">
                            <h5 class="card-title">
                                會話控制實戰內容一
                            </h5>
                            <h6 class="card-subtitle mb-2 text-muted">
                                SESSION 部分
                            </h6>
                            <p class="card-text">
                                實作用戶認證功能,用戶登錄、退出與身份識別
                            </p>
                        </div>
                    </div>
                    <div class="card col-5">
                        <div class="card-body">
                            <h5 class="card-title">
                                會話控制實戰內容二
                            </h5>
                            <h6 class="card-subtitle mb-2 text-muted">
                                COOKIE 部分
                            </h6>
                            <p class="card-text">
                                實作登錄記住用戶功能,七天免登錄認證
                            </p>
                        </div>
                    </div>
                </div>
            </div>
        </body>
    </html>

接下來是會話控制實體:許愿墻原始碼

許愿墻首頁index.php

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title>許愿墻</title>
        <link rel="stylesheet" href="Css/index.css" />
        <script type="text/javascript" src='Js/jquery-1.7.2.min.js'></script>
        <script type="text/javascript" src='Js/index.js'></script>
    </head>
    <body>
        <div id='top'>
            <a href="wish.php"><span id='send'></span></a>
        </div>
        <div id='main'>
            <?php
            //連接資料庫
            $connection=mysqli_connect('127.0.0.1','root','123456');
            if(mysqli_connect_error()){
                die(mysqli_connect_error());
            }
            mysqli_select_db($connection,'wall');
            mysqli_set_charset($connection,'utf8');
            $sql="SELECT * FROM wall";
            $result=mysqli_query($connection,$sql);
            //顯示留言
            while($row=mysqli_fetch_assoc($result)){
                $wish_time=$row['wish_time'];
                $time=date('Y-m-d H:i:s',$wish_time);
                $id=$row['id'];
                //判斷留言板顏色
                switch($row['color']){
                    case 'a1':
                        echo "<dl class='paper a1'>";
                        break;
                    case 'a2':
                        echo "<dl class='paper a2'>";
                        break;
                    case 'a3':
                        echo "<dl class='paper a3'>";
                        break;
                    case 'a4':
                        echo "<dl class='paper a4'>";
                        break;
                    case 'a5':
                        echo "<dl class='paper a5'>";
                        break;
                    default:
                        echo "<dl class='paper a1'>";
                        break;
                }
                echo "<dt>";
                echo "<span class='username'>{$row['name']}</span>";
                echo "<span class='num'>No.{$row['id']}</span>";
                echo "</dt>";
                echo "<dd class='content'>{$row['content']}</dd>";
                echo "<dd class='bottom'>";
                echo "<span class='time'>{$time}</span>";
                echo "<a href=https://www.cnblogs.com/"delete.php?num={$id}\" class='close'></a>";
                echo "</dd>";
                echo "</dl>";
            }
            mysqli_close($connection);
            ?>
        </div>
        
    <!--[if IE 6]>
        <script type="text/javascript" src="https://www.cnblogs.com/chenyingying0/p/Js/iepng.js"></script>
        <script type="text/javascript">
            DD_belatedPNG.fix('#send,#close,.close','background');
        </script>
    <![endif]-->
    </body>
    </html>

添加愿望頁面wish.php

    <!DOCTYPE  >
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title>許愿墻</title>
        <link rel="stylesheet" href="Css/index.css" />
        <script type="text/javascript" src='Js/jquery-1.7.2.min.js'></script>
        <script type="text/javascript" src='Js/index.js'></script>
        <style type="text/css">
            #content {
                width: 638px;
                height:650px;
                margin:0 auto;
                margin-top:100px;
                /*background-color:#F0FAFF;
                border:2px solid #C9F;*/
            }
            #content .c-top{
                width: 638px;
                height: 80px;
                background: url(./Images/content_top.jpg) no-repeat;
            }
            #content .c-bottom{
                width: 638px;
                height: 50px;
                background: url(./Images/content_bottom.jpg) no-repeat;
            }
            .c-content{
                width: 638px;
                height: 470px;
                background: url(./Images/content_bg.jpg) repeat;
            }
            .papercolor{
                width:588px;
                height: 60px;
                margin-left: 35px;
                padding-top:15px;
            }
            .p-left{
                float: left;
                width: 120px;
                line-height: 27px;
            }p-left
            .p-right{
                float: left;            
            }
            .color330{
                float: left;
                margin-left: 20px;
                border-right: #404040 1px solid; 
                border-top: #404040 1px solid;  
                border-left:#404040 1px solid;
                width: 25px;
                cursor: pointer;
                border-bottom: #404040 1px solid;
                height: 25px;
            }
            .papercontent{
                width: 588px;
                height: 210px;
                margin-left: 35px;
            }
            .left{
                width: 294px;
                height:100px;
                float: left;
            }
            .right{
                width: 294px;
                height:100px;
                float: left;
            }
            .left-top{
                margin-bottom: 10px;
            }
            .left-bottom{

            }
            .right-top{
                margin-bottom: 10px;
            }
            .right-bottom{
                width:200px;
                height:150px;
                border: 1px solid orange;
                margin-left:20px;
                background-color:#E8DEFF;
            }
            .name{
                clear: both;
                width: 588px;
                height: 50px;
                margin-left: 35px;
                margin-top:10px;
            }
            .name-left{
                width:60px;
                height: 26px;
                line-height: 26px;
                float: left;
            }
            .name-right{
                float: left;
            }
            .name-right input{
                width: 200px;
                height: 26px;
            }
            .code{
                clear: both;
                width: 588px;
                height: 50px;
                margin-left: 35px;
                margin-top:10px;
            }
            .code-left{
                width:50px;
                height: 26px;
                line-height: 26px;
                float: left;
            }
            .code-content{
                width:100px;
                float: left;
            }
            .code-content input{
                width: 100px;
                height: 26px;
            }
            .code-right{
                float:left;
                margin-left: 10px;
            }
            .code-right input{
                width: 40px;
                height: 26px;
                background-color: pink;
            }
            .submit{
                width:174px;
                height:38px;
                background: url(./Images/pic_submit.gif) no-repeat;
                margin-left:217px;
            }
            .shuname{
                width:80px;
                height:25px;
                margin-left: 120px;
            }
            span{
                font-size: 13px;
                font-family: "微軟雅黑";
            }
        </style>
        
    </head>
    <body>
        <div id='top'></div>
        <div id="content">
            <div class="c-top"></div>
            <form action="add.php" method="post" id="myfrom">
                <div class="c-content">
                    <div class="papercolor">
                        <div class="p-left">
                            <span>請選擇紙條顏色:</span>
                        </div>
                        <div class="p-right">
                            <div class="color330" id="a1" style="background:#FFDFFF"></div>
                              <div class="color330" id="a2" style="background:#C3FEC0"></div>
                              <div class="color330" id="a3" style="background:#FFE3b8"></div>
                              <div class="color330" id="a4" style="background:#CEECFF"></div>
                             <div class="color330" id="a5" style="background:#E8DEFF"></div>
                             <input type="hidden" value="" name="idvalue" id="idvalue">                   
                        </div>
                    </div>
                    <div class="papercontent">
                        <div class="left">
                            <div class="left-top">
                                <span>輸入你的祝福紙條內容:</span>
                            </div>
                            <div class="left-bottom">
                                <textarea cols="25" rows="8" id="textfont" name="textfont"></textarea>
                            </div>
                        </div>
                        <div class="right">
                            <div class="right-top">
                                <span>紙條效果預覽:</span>
                            </div>
                            <div class="right-bottom">
                                <div style="height:15px"><span>第x條</span><br/></div>
                                 <div style="height:100px;margin-top:10px"><span id="font"></span></div>
                                 <div class="shuname"><span id="name">署名:</span></div>            
                            </div>
                        </div>
                    </div>
                    <div class="name">
                        <div class="name-left">
                            <span>您的署名:</span>
                        </div>
                        <div class="name-right">
                            <input id="nameright" type="text" name="name" value="">
                        </div>
                    </div>
                    <div class="code">
                        <div class="code-left">
                            <span>驗證碼:</span>
                        </div>
                        <div class="code-content">
                            <input id="codeone" type="text" name="recode" value=""><span></span>
                        </div>
                        <div class="code-right">
                            <input id="codetwo" type="text" name="code" value="<?php echo mt_rand(1000,9999); ?>" readonly>
                        </div>                
                    </div>
                    <!--<div ><button type="submit" style="width:174px;height:38px"></button></div>-->
                    <input style="BORDER-RIGHT: #f33b78 1px outset; BORDER-TOP: #f33b78 1px outset; FONT-WEIGHT: bold; BORDER-LEFT: #f33b78 1px outset; COLOR: #ffffff; BORDER-BOTTOM: #f33b78 1px outset; BACKGROUND-COLOR: #70ae0b;margin-left: 225px" type="submit" value="→ 開始貼許愿小紙條 ←" name="submit" id="submit">
                    
                        <a href="index.php"><input class="input" type="button" name="Submit2" value="回傳"></a>    
                </div>
            </form>
            <hr/ style="color:orange;width:550">
            <div class="c-bottom"></div>
        </div>
    <!--[if IE 6]>
        <script type="text/javascript" src="https://www.cnblogs.com/chenyingying0/p/Js/iepng.js"></script>
        <script type="text/javascript">
            DD_belatedPNG.fix('#send,#close,.close','background');
        </script>
    <![endif]-->
        <script type="text/javascript">
            //改變顏色
            $(".color330").click(function(){            
                var value=$(this).css("background-color");
                var idvalue=$(this).attr("id");
                console.log(idvalue);
                $("#idvalue").attr("value",idvalue);
                $(".right-bottom").css("background-color",value);
            })

            //改變值觸發的事件
            var textfont = document.getElementById('textfont');
            var font = document.getElementById('font');
            textfont.onchange=function(){
                font.innerHTML=textfont.value;            
            }

            //改變值觸發的事件
            var nameright = document.getElementById('nameright');
            nameright.onchange=function(){
                document.getElementById("name").innerText="署名: "+nameright.value;    
            }
            
            //在填寫完畢驗證碼之后驗證是否一致
            var codeone = document.getElementById('codeone');
            var codetwo = document.getElementById('codetwo');
            //表單時區焦點事件
            codeone.onblur=function(){
                //驗證兩次驗證碼是否一致
                if(codeone.value != codetwo.value){
                    this.nextSibling.innerHTML='驗證碼不一致!'
                    this.nextSibling.style.color='red';
                }
            }

            $( '#submit' ).click( function () {
                window.location.href="add.php"; 
            } );
                
        </script>
    </body>
    </html>

新增愿望實作add.php

    <?php

    // 獲取表單提交資料
    $name=$_POST['name'];
    $textfont=$_POST['textfont'];
    $wish_time=time();
    $color=$_POST['idvalue'];

    // 資料庫操作
    $connection=mysqli_connect('127.0.0.1','root','123456');
    if(mysqli_connect_error()){
        die(mysqli_connect_error());
    }
    mysqli_select_db($connection,'wall');
    mysqli_set_charset($connection,'utf8');
    $sql="INSERT INTO wall(content,name,wish_time,color) VALUES('$textfont','$name',$wish_time,'$color')";
    $result=mysqli_query($connection,$sql);
    if($result){
        echo '<script>alert("發布成功!");document.location = "index.php";</script>';
    }else{
        echo '<script>alert("發布失敗!");document.location = "index.php";</script>';
    }
    mysqli_close($connection);

    ?>

洗掉愿望delete.php

    <?php

    //接受要洗掉的留言id
    $num=$_GET['num'];

    // 資料庫操作
    $connection=mysqli_connect('127.0.0.1','root','123456');
    if(mysqli_connect_error()){
        die(mysqli_connect_error());
    }
    mysqli_select_db($connection,'wall');
    mysqli_set_charset($connection,'utf8');
    $sql="DELETE FROM wall WHERE id=$num";
    $result=mysqli_query($connection,$sql);
    if($result){
        echo '<script>alert("洗掉成功!");document.location = "index.php";</script>';

    }else{
        echo '<script>alert("洗掉失敗!");document.location = "index.php";</script>';
    }
    mysqli_close($connection);

    ?>

附上資料庫結構wall.sql

-- phpMyAdmin SQL Dump
-- version 4.8.5
-- https://www.phpmyadmin.net/
--
-- 主機: localhost
-- 生成日期: 2019-08-18 22:08:38
-- 服務器版本: 8.0.12
-- PHP 版本: 7.3.4

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- 資料庫: `wall`
--

-- --------------------------------------------------------

--
-- 表的結構 `wall`
--

CREATE TABLE `wall` (
  `id` tinyint(4) NOT NULL COMMENT '留言編號',
  `content` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '留言內容',
  `name` varchar(20) NOT NULL DEFAULT '匿名的寶寶' COMMENT '署名',
  `wish_time` int(11) NOT NULL COMMENT '留言時間',
  `color` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '留言背景色'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 轉存表中的資料 `wall`
--

INSERT INTO `wall` (`id`, `content`, `name`, `wish_time`, `color`) VALUES
(17, '111', '111', 1566136880, 'a1'),
(19, '333', '333', 1566136894, 'a3'),
(21, '555', '555', 1566136911, 'a5'),
(24, '9999', '9999', 1566137235, 'a4');

--
-- 轉儲表的索引
--

--
-- 表的索引 `wall`
--
ALTER TABLE `wall`
  ADD PRIMARY KEY (`id`);

--
-- 在匯出的表使用AUTO_INCREMENT
--

--
-- 使用表AUTO_INCREMENT `wall`
--
ALTER TABLE `wall`
  MODIFY `id` tinyint(4) NOT NULL AUTO_INCREMENT COMMENT '留言編號', AUTO_INCREMENT=26;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

 

知識點補充:

【使用 COOKIE 實作會話控制】
用于存盤用戶關鍵資訊
保存在客戶端(瀏覽器)
通過 HTTP 請求/回應頭傳輸

【COOKIE 失效】
COOKIE過期
用戶手動洗掉 COOKIE
服務器清除 COOKIE 的有效性


 

【使用 SESSION 實作會話控制】
用于存盤用戶相關資訊
保存在服務端
通過保存在客戶端的 SESSION ID 來定位 SESSION 內容

【SESSION 失效/清除】
COOKIE過期(關閉瀏覽器)
用戶手動洗掉 COOKIE
服務端洗掉 SESSION 檔案或清空 SESSION 內容

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/86747.html

標籤:PHP

上一篇:怎么從一名碼農成為架構師的必看知識點:目錄大全(不定期更新)

下一篇:電子商城專案開發(后臺功能模塊開發)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more