Browse Source

完成基础功能

Moeyuuko 2 years ago
parent
commit
803b496b58
16 changed files with 908 additions and 98 deletions
  1. 2 1
      .gitignore
  2. 56 69
      Read.php
  3. 102 0
      Write.php
  4. 5 0
      index.php
  5. 402 0
      js/md5.js
  6. 0 0
      js/md5.min.js
  7. 0 0
      js/md5.min.js.map
  8. 22 0
      login.php
  9. 20 0
      logout.php
  10. 49 2
      sql/Inventory.sql
  11. 54 0
      src/Check.php
  12. 37 0
      src/Read.html.php
  13. 43 0
      src/Write.html.php
  14. 33 26
      src/_index.html.php
  15. 47 0
      src/login.html.php
  16. 36 0
      src/login_info.php

+ 2 - 1
.gitignore

@@ -1 +1,2 @@
-.key.php
+.*.php
+test/

+ 56 - 69
Read.php

@@ -1,88 +1,75 @@
 <?php
-	foreach($_GET as $key=>$val) {            // read get request from web
-		$SN = $val;
-	}
-//$servername = "";                //connect db
-//$username = "";
-//$password = "*";
-//$dbname = "";
-include(".key.php");
+session_start();
+foreach($_GET as $key=>$val) {            // read get request from web
+	$SN = $val;
+}
+
+include(".Config.php");
+include("src/login_info.php");
 
 // Create connection
-$conn = new mysqli($servername, $username, $password, $dbname);
+$conn = new mysqli($servername, $db_username_Readonly, $db_password_Readonly, $dbname);
 // Check connection
 if ($conn->connect_error) {
 	die("Connection failed: " . $conn->connect_error);
 }
-$SN = mysqli_real_escape_string($conn,$SN);
-$sql = "SELECT * FROM `device` WHERE `SN` = '$SN'";
-//echo ($sql."<br>".strlen($SN)."<br>");
 mysqli_query($conn, 'set names utf8');
+
 if(strlen($SN)<=12){
-	if(!mysqli_query($conn, $sql))
-	{
-		die('Error : ' . mysqli_error($conn));
-	}
+	$SN = mysqli_real_escape_string($conn,$SN);
+	$sql = "SELECT * FROM `device` WHERE `SN` = '$SN'";
+	//echo ($sql."<br>".strlen($SN)."<br>");
+	if(!mysqli_query($conn, $sql)){die('Error : ' . mysqli_error($conn));}
 	$result = $conn->query($sql);
+	$conn->close();
+
 	if ($result->num_rows > 0) {
-		// output db
 			while($row = $result->fetch_assoc()) {
-				$TAG = $row["TAG"];
-				$TIME = $row["TIME"];
-				$NOTE = $row["NOTE"];
-				$N1 = $row["N1"];
-				$N2= $row["N2"];
-				header('Content-Type:text/html; charset=UTF-8; lang=zh-CN;');
-				echo"<html lang=\"zh-CN\"><body>";
-				echo"<div style='text-align: center'>";
-				echo"<h1>";
-				print ("库存系统");
-				echo"</h1>";
-				echo"</br>";
-				echo"<div style='border: 5px solid;'>";
-				echo"<p style='font-size: 5vw; text-align: left; margin-left: 10%; width:80%;'>";
-				print ("SN:".$SN);
-				echo"</br>";
-				print ("TAG:".$TAG);
-				echo"</br>";
-				if($TIME != NULL){
-					print ("Date:".$TIME);
-				}else{
-					print ("Date:Unknow");
+				$Security = $row["Security"]; //安全等级 0公开 1私密 2半公开隐藏NOTE,N1,N2
+				
+				switch ($Security){
+					case 0:
+						$SN = $row["SN"];
+						$TAG = $row["TAG"];
+						$TIME = $row["TIME"];
+						$NOTE = $row["NOTE"];
+						$N1 = $row["N1"];
+						$N2= $row["N2"];
+						break;
+					case 1:
+						if (empty ( $_SESSION ['user'] )){
+							header ( "location:login.php?req_url=" . $_SERVER ['REQUEST_URI'] );
+							exit();
+						}
+						$SN = $row["SN"];
+						$TAG = $row["TAG"];
+						$TIME = $row["TIME"];
+						$NOTE = $row["NOTE"];
+						$N1 = nl2br($row["N1"]);
+						$N2= $row["N2"];
+						break;
+					case 2:
+						$SN = $row["SN"];
+						$TAG = $row["TAG"];
+						$TIME = $row["TIME"];
+						if (!empty ( $_SESSION ['user'] )){
+							$NOTE = $row["NOTE"];
+							$N1 = nl2br($row["N1"]);
+							$N2= $row["N2"];
+						}
+						break;
+					default:
+						$SN = "安全级别错误";
+						$TAG = "安全级别错误";
+						$TIME = "安全级别错误";
 				}
-
-				if($NOTE != NULL){
-					echo"</br>";
-					print ("INFO:");
-					echo"<p style='font-size: 4vw; text-align: left; margin-left: 10%; width:80%; height: 30%; border: 5px inset;'>";
-					print ($NOTE);
-					echo"</p>";
-				}else{
-				}
-				if($N1 != NULL){
-					echo"</br>";
-					echo"<p style='font-size: 3vw; text-align: left; margin-left: 10%; width:80%; border: 5px inset;'>";
-					print ($N1);
-					echo"</p>";
-				}else{
-				}
-				if($N2 != NULL){
-					echo"</br>";
-					echo"<p style='font-size: 3vw; text-align: left; margin-left: 10%; width:80%; border: 5px inset;'>";
-					print ($N2);
-					echo"</p>";
-				}else{
-				}
-			echo"</p>";
-			echo"</div>";
-			echo"</div>";
-			echo"</body></html>";
+				include ('src/Read.html.php');
 			}
 	} else {
-		echo "Not Found";
+		echo "<p style='font-size: 9vw; text-align: left; width:100%;'>Not Found.</p>";
 	}
 } else {
-	echo "SN too lonnnnnng";
+	echo "<p style='font-size: 9vw; text-align: left; width:100%;'>SN too lonnnnnng.</p>";
 }
-$conn->close();
+
 ?>

+ 102 - 0
Write.php

@@ -0,0 +1,102 @@
+<?php
+session_start();
+include(".Config.php");
+include("src/login_info.php");
+
+if (empty ( $_SESSION ['user'] )){
+	header ( "location:login.php?req_url=" . $_SERVER ['REQUEST_URI'] );
+	exit();
+}
+function db_connection($servername, $db_username, $db_password, $dbname){
+	global $conn;
+	$conn = new mysqli($servername, $db_username, $db_password, $dbname);
+	if ($conn->connect_error) {
+		die("Connection failed: " . $conn->connect_error);
+	}
+	mysqli_query($conn, 'set names utf8');
+}
+
+function db_query_row($sql){
+	global $conn;
+	if(!mysqli_query($conn, $sql)){
+		die('Error : ' . mysqli_error($conn));
+	}
+	$result = $conn->query($sql);
+	if ($result->num_rows > 0) {
+		$row = $result->fetch_assoc();
+		return $row;
+	}else{
+		return TRUE;
+	}
+}
+
+function db_INSERT($sql){
+	global $conn;
+	if ($conn->query($sql) === TRUE) {
+		return TRUE;
+	} else {
+		die ("Error: " . $sql . "<br>" . $conn->error);
+	}
+}
+
+function db_MAXID(){
+	$sql = "SELECT MAX(ID) FROM `device` WHERE 1";
+	$row = db_query_row($sql);
+	if (empty($row["MAX(ID)"])){
+		return 0;
+	}else{
+		return $row["MAX(ID)"];  //print_r(); 调试输出用
+	}
+	
+}
+
+function createRandomStr($length){
+	$str = array_merge(range(0,9),range('a','z'),range('A','Z'));
+	shuffle($str);
+	$str = implode('',array_slice($str,0,$length));
+	return $str;
+}
+
+function Give_post($postname){
+	global $conn;
+	if(!empty ($_POST[$postname])){
+		return "'".mysqli_real_escape_string($conn,$_POST[$postname])."'";
+	}else{
+		return "NULL";
+	}
+}
+
+//==这才刚刚开始===============================//
+
+if(isset($_POST['button'])){
+	db_connection($servername, $db_username, $db_password, $dbname);
+
+	$Security = $_POST["Security"]; //安全等级 0公开 1私密 2半公开隐藏NOTE,N1,N2
+	if ($Security != 0 xor $Security != 1 xor $Security != 2){
+			die("安全级别错误");
+	}
+
+	$TAG = Give_post("TAG");
+	$TIME = Give_post("TIME");
+	$NOTE = Give_post("NOTE");
+	$N1 = Give_post("N1");
+	$N2 = Give_post("N2");
+
+	$MAXIDadd1 = db_MAXID() + 1;
+	$SN_ = "m".$MAXIDadd1.createRandomStr(4);
+	$SN = "'".$SN_."'";
+	
+	$sql = "INSERT INTO `device` (`ID`, `SN`, `TAG`, `TIME`, `NOTE`, `N1`, `N2`) VALUES (NULL, ".$SN.", ".$TAG.", ".$TIME.", ".$NOTE.", ".$N1.", ".$N2.");";
+	db_INSERT($sql);
+	$conn->close();
+	header ( "location:Read.php?key=" . $SN_ );
+}else{
+	include('src/Write.html.php');
+	
+}
+
+
+	//INSERT INTO `device` (`ID`, `SN`, `TAG`, `TIME`, `NOTE`, `N1`, `N2`) VALUES (NULL, 'SNSNSN', 'TAGTAG', 'TTT', 'NNNN', '1111', '2222');
+	//SELECT LAST_INSERT_ID();
+	//UPDATE `device` SET `TAG` = '标签机' WHERE `device`.`ID` = 7
+?>

+ 5 - 0
index.php

@@ -0,0 +1,5 @@
+<?php 
+session_start();
+include('src/login_info.php');
+include('src/_index.html.php');
+?>

+ 402 - 0
js/md5.js

@@ -0,0 +1,402 @@
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/* global define */
+
+/* eslint-disable strict */
+
+;(function ($) {
+  'use strict'
+
+  /**
+   * Add integers, wrapping at 2^32.
+   * This uses 16-bit operations internally to work around bugs in interpreters.
+   *
+   * @param {number} x First integer
+   * @param {number} y Second integer
+   * @returns {number} Sum
+   */
+  function safeAdd(x, y) {
+    var lsw = (x & 0xffff) + (y & 0xffff)
+    var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
+    return (msw << 16) | (lsw & 0xffff)
+  }
+
+  /**
+   * Bitwise rotate a 32-bit number to the left.
+   *
+   * @param {number} num 32-bit number
+   * @param {number} cnt Rotation count
+   * @returns {number} Rotated number
+   */
+  function bitRotateLeft(num, cnt) {
+    return (num << cnt) | (num >>> (32 - cnt))
+  }
+
+  /**
+   * Basic operation the algorithm uses.
+   *
+   * @param {number} q q
+   * @param {number} a a
+   * @param {number} b b
+   * @param {number} x x
+   * @param {number} s s
+   * @param {number} t t
+   * @returns {number} Result
+   */
+  function md5cmn(q, a, b, x, s, t) {
+    return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)
+  }
+  /**
+   * Basic operation the algorithm uses.
+   *
+   * @param {number} a a
+   * @param {number} b b
+   * @param {number} c c
+   * @param {number} d d
+   * @param {number} x x
+   * @param {number} s s
+   * @param {number} t t
+   * @returns {number} Result
+   */
+  function md5ff(a, b, c, d, x, s, t) {
+    return md5cmn((b & c) | (~b & d), a, b, x, s, t)
+  }
+  /**
+   * Basic operation the algorithm uses.
+   *
+   * @param {number} a a
+   * @param {number} b b
+   * @param {number} c c
+   * @param {number} d d
+   * @param {number} x x
+   * @param {number} s s
+   * @param {number} t t
+   * @returns {number} Result
+   */
+  function md5gg(a, b, c, d, x, s, t) {
+    return md5cmn((b & d) | (c & ~d), a, b, x, s, t)
+  }
+  /**
+   * Basic operation the algorithm uses.
+   *
+   * @param {number} a a
+   * @param {number} b b
+   * @param {number} c c
+   * @param {number} d d
+   * @param {number} x x
+   * @param {number} s s
+   * @param {number} t t
+   * @returns {number} Result
+   */
+  function md5hh(a, b, c, d, x, s, t) {
+    return md5cmn(b ^ c ^ d, a, b, x, s, t)
+  }
+  /**
+   * Basic operation the algorithm uses.
+   *
+   * @param {number} a a
+   * @param {number} b b
+   * @param {number} c c
+   * @param {number} d d
+   * @param {number} x x
+   * @param {number} s s
+   * @param {number} t t
+   * @returns {number} Result
+   */
+  function md5ii(a, b, c, d, x, s, t) {
+    return md5cmn(c ^ (b | ~d), a, b, x, s, t)
+  }
+
+  /**
+   * Calculate the MD5 of an array of little-endian words, and a bit length.
+   *
+   * @param {Array} x Array of little-endian words
+   * @param {number} len Bit length
+   * @returns {Array<number>} MD5 Array
+   */
+  function binlMD5(x, len) {
+    /* append padding */
+    x[len >> 5] |= 0x80 << len % 32
+    x[(((len + 64) >>> 9) << 4) + 14] = len
+
+    var i
+    var olda
+    var oldb
+    var oldc
+    var oldd
+    var a = 1732584193
+    var b = -271733879
+    var c = -1732584194
+    var d = 271733878
+
+    for (i = 0; i < x.length; i += 16) {
+      olda = a
+      oldb = b
+      oldc = c
+      oldd = d
+
+      a = md5ff(a, b, c, d, x[i], 7, -680876936)
+      d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)
+      c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)
+      b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)
+      a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)
+      d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)
+      c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)
+      b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)
+      a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)
+      d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)
+      c = md5ff(c, d, a, b, x[i + 10], 17, -42063)
+      b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)
+      a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)
+      d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)
+      c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)
+      b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)
+
+      a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)
+      d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)
+      c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)
+      b = md5gg(b, c, d, a, x[i], 20, -373897302)
+      a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)
+      d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)
+      c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)
+      b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)
+      a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)
+      d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)
+      c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)
+      b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)
+      a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)
+      d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)
+      c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)
+      b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)
+
+      a = md5hh(a, b, c, d, x[i + 5], 4, -378558)
+      d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)
+      c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)
+      b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)
+      a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)
+      d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)
+      c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)
+      b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)
+      a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)
+      d = md5hh(d, a, b, c, x[i], 11, -358537222)
+      c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)
+      b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)
+      a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)
+      d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)
+      c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)
+      b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)
+
+      a = md5ii(a, b, c, d, x[i], 6, -198630844)
+      d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)
+      c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)
+      b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)
+      a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)
+      d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)
+      c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)
+      b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)
+      a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)
+      d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)
+      c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)
+      b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)
+      a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)
+      d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)
+      c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)
+      b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)
+
+      a = safeAdd(a, olda)
+      b = safeAdd(b, oldb)
+      c = safeAdd(c, oldc)
+      d = safeAdd(d, oldd)
+    }
+    return [a, b, c, d]
+  }
+
+  /**
+   * Convert an array of little-endian words to a string
+   *
+   * @param {Array<number>} input MD5 Array
+   * @returns {string} MD5 string
+   */
+  function binl2rstr(input) {
+    var i
+    var output = ''
+    var length32 = input.length * 32
+    for (i = 0; i < length32; i += 8) {
+      output += String.fromCharCode((input[i >> 5] >>> i % 32) & 0xff)
+    }
+    return output
+  }
+
+  /**
+   * Convert a raw string to an array of little-endian words
+   * Characters >255 have their high-byte silently ignored.
+   *
+   * @param {string} input Raw input string
+   * @returns {Array<number>} Array of little-endian words
+   */
+  function rstr2binl(input) {
+    var i
+    var output = []
+    output[(input.length >> 2) - 1] = undefined
+    for (i = 0; i < output.length; i += 1) {
+      output[i] = 0
+    }
+    var length8 = input.length * 8
+    for (i = 0; i < length8; i += 8) {
+      output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32
+    }
+    return output
+  }
+
+  /**
+   * Calculate the MD5 of a raw string
+   *
+   * @param {string} s Input string
+   * @returns {string} Raw MD5 string
+   */
+  function rstrMD5(s) {
+    return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))
+  }
+
+  /**
+   * Calculates the HMAC-MD5 of a key and some data (raw strings)
+   *
+   * @param {string} key HMAC key
+   * @param {string} data Raw input string
+   * @returns {string} Raw MD5 string
+   */
+  function rstrHMACMD5(key, data) {
+    var i
+    var bkey = rstr2binl(key)
+    var ipad = []
+    var opad = []
+    var hash
+    ipad[15] = opad[15] = undefined
+    if (bkey.length > 16) {
+      bkey = binlMD5(bkey, key.length * 8)
+    }
+    for (i = 0; i < 16; i += 1) {
+      ipad[i] = bkey[i] ^ 0x36363636
+      opad[i] = bkey[i] ^ 0x5c5c5c5c
+    }
+    hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)
+    return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))
+  }
+
+  /**
+   * Convert a raw string to a hex string
+   *
+   * @param {string} input Raw input string
+   * @returns {string} Hex encoded string
+   */
+  function rstr2hex(input) {
+    var hexTab = '0123456789abcdef'
+    var output = ''
+    var x
+    var i
+    for (i = 0; i < input.length; i += 1) {
+      x = input.charCodeAt(i)
+      output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)
+    }
+    return output
+  }
+
+  /**
+   * Encode a string as UTF-8
+   *
+   * @param {string} input Input string
+   * @returns {string} UTF8 string
+   */
+  function str2rstrUTF8(input) {
+    return unescape(encodeURIComponent(input))
+  }
+
+  /**
+   * Encodes input string as raw MD5 string
+   *
+   * @param {string} s Input string
+   * @returns {string} Raw MD5 string
+   */
+  function rawMD5(s) {
+    return rstrMD5(str2rstrUTF8(s))
+  }
+  /**
+   * Encodes input string as Hex encoded string
+   *
+   * @param {string} s Input string
+   * @returns {string} Hex encoded string
+   */
+  function hexMD5(s) {
+    return rstr2hex(rawMD5(s))
+  }
+  /**
+   * Calculates the raw HMAC-MD5 for the given key and data
+   *
+   * @param {string} k HMAC key
+   * @param {string} d Input string
+   * @returns {string} Raw MD5 string
+   */
+  function rawHMACMD5(k, d) {
+    return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))
+  }
+  /**
+   * Calculates the Hex encoded HMAC-MD5 for the given key and data
+   *
+   * @param {string} k HMAC key
+   * @param {string} d Input string
+   * @returns {string} Raw MD5 string
+   */
+  function hexHMACMD5(k, d) {
+    return rstr2hex(rawHMACMD5(k, d))
+  }
+
+  /**
+   * Calculates MD5 value for a given string.
+   * If a key is provided, calculates the HMAC-MD5 value.
+   * Returns a Hex encoded string unless the raw argument is given.
+   *
+   * @param {string} string Input string
+   * @param {string} [key] HMAC key
+   * @param {boolean} [raw] Raw output switch
+   * @returns {string} MD5 output
+   */
+  function md5(string, key, raw) {
+    if (!key) {
+      if (!raw) {
+        return hexMD5(string)
+      }
+      return rawMD5(string)
+    }
+    if (!raw) {
+      return hexHMACMD5(key, string)
+    }
+    return rawHMACMD5(key, string)
+  }
+
+  if (typeof define === 'function' && define.amd) {
+    define(function () {
+      return md5
+    })
+  } else if (typeof module === 'object' && module.exports) {
+    module.exports = md5
+  } else {
+    $.md5 = md5
+  }
+})(this)

File diff suppressed because it is too large
+ 0 - 0
js/md5.min.js


File diff suppressed because it is too large
+ 0 - 0
js/md5.min.js.map


+ 22 - 0
login.php

@@ -0,0 +1,22 @@
+<?php
+session_start();
+include(".Config.php");
+include("src/Check.php");
+if (!empty($_POST['remember'])){$remember = 1;}else{$remember = 0;}
+
+if(isset($_POST['button'])){
+	login($_POST['username'],$_POST['password'],$remember);
+}else{
+	if (empty ( $_SESSION ['user'] )){
+		if (empty ( $_COOKIE ['username'] ) || empty ( $_COOKIE ['password'] )) {
+			$login_info = '<a class="login_info" href="'.$ROOT_DIR.'">主页</a>';
+			include ("src/login.html.php");
+		}else{
+			login($_COOKIE ['username'],$_COOKIE ['password'],1);
+		}
+	}else{
+		$login_info = '<a id="login_info" class="login_info">'.$_SESSION['user'].' 已经登录了<br><a class="login_info" href="logout.php?req_url='.$_SERVER ['REQUEST_URI'].'">登出</a></a>';
+		include ("src/login.html.php");
+	}
+}
+?>

+ 20 - 0
logout.php

@@ -0,0 +1,20 @@
+<?php
+session_start();
+include(".Config.php");
+function logout() {
+    unset ( $_SESSION ['user'] );
+    if (! empty ( $_COOKIE ['username'] ) || ! empty ( $_COOKIE ['password'] )) 
+    {
+        setcookie ( "username", null, time () - 3600 * 24 * 365 );
+        setcookie ( "password", null, time () - 3600 * 24 * 365 );
+    }
+}
+
+logout();
+
+if (isset($_GET['req_url'])){
+    header ( "location:" . $_GET['req_url'] );
+} else {
+    header ( "location:" . $ROOT_DIR );
+}
+?>

+ 49 - 2
sql/device.sql → sql/Inventory.sql

@@ -3,7 +3,7 @@
 -- https://www.phpmyadmin.net/
 --
 -- 主机: localhost
--- 生成日期: 2021-09-30 01:04:54
+-- 生成日期: 2021-10-02 21:38:49
 -- 服务器版本: 5.7.34
 -- PHP 版本: 7.3.27-1~deb10u1
 
@@ -38,10 +38,32 @@ CREATE TABLE `device` (
   `N2` mediumtext
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `Error_login`
+--
+
+CREATE TABLE `Error_login` (
+  `ID` bigint(20) NOT NULL,
+  `IP` varchar(255) NOT NULL,
+  `Count` bigint(20) NOT NULL,
+  `Last_Time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `s1` int(11) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- --------------------------------------------------------
+
 --
--- 转存表中的数据 `device`
+-- 表的结构 `Users`
 --
 
+CREATE TABLE `Users` (
+  `ID` bigint(11) NOT NULL,
+  `User` varchar(60) NOT NULL,
+  `Password` varchar(255) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
 --
 -- 转储表的索引
 --
@@ -53,6 +75,19 @@ ALTER TABLE `device`
   ADD PRIMARY KEY (`ID`),
   ADD UNIQUE KEY `SN` (`SN`);
 
+--
+-- 表的索引 `Error_login`
+--
+ALTER TABLE `Error_login`
+  ADD PRIMARY KEY (`ID`);
+
+--
+-- 表的索引 `Users`
+--
+ALTER TABLE `Users`
+  ADD PRIMARY KEY (`ID`),
+  ADD UNIQUE KEY `User` (`User`) USING BTREE;
+
 --
 -- 在导出的表使用AUTO_INCREMENT
 --
@@ -62,6 +97,18 @@ ALTER TABLE `device`
 --
 ALTER TABLE `device`
   MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT;
+
+--
+-- 使用表AUTO_INCREMENT `Error_login`
+--
+ALTER TABLE `Error_login`
+  MODIFY `ID` bigint(20) NOT NULL AUTO_INCREMENT;
+
+--
+-- 使用表AUTO_INCREMENT `Users`
+--
+ALTER TABLE `Users`
+  MODIFY `ID` bigint(11) NOT NULL AUTO_INCREMENT;
 COMMIT;
 
 /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

+ 54 - 0
src/Check.php

@@ -0,0 +1,54 @@
+<?php
+include(".Config.php");
+
+function Check($username,$password){
+	global $servername, $db_username_Readonly, $db_password_Readonly, $dbname;
+	// Create connection
+	$conn = new mysqli($servername, $db_username_Readonly, $db_password_Readonly, $dbname);
+	// Check connection
+	if ($conn->connect_error) {
+		die("Connection failed: " . $conn->connect_error);
+	}
+	mysqli_query($conn, 'set names utf8');
+
+
+	$password = sha1(md5($password));
+	$username = mysqli_real_escape_string($conn,$username);
+	$sql = "SELECT *  FROM `Users` WHERE `User` = '" . $username . "' AND `Password` = '" . $password . "'";
+
+	if(!mysqli_query($conn, $sql))
+	{
+		die('Error : ' . mysqli_error($conn));
+	}
+	$result = $conn->query($sql);
+	$conn->close();
+	if ($result->num_rows > 0) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+}
+
+function login($username,$password,$remember){
+	if(Check($username,$password)){
+		global $ROOT_DIR;
+		$_SESSION['user'] = $username;
+		if ($remember>0){
+			setcookie ( "username", $username, time () + 3600 * 24 * 365 );
+			setcookie ( "password", $password, time () + 3600 * 24 * 365 );
+		}
+		if (isset($_GET['req_url'])){
+			header ( "location:" . $_GET['req_url'] );
+		} else {
+			header ( "location:" . $ROOT_DIR );
+		}
+	}else{
+		if (! empty ( $_COOKIE ['username'] ) || ! empty ( $_COOKIE ['password'] )) 
+		{
+			setcookie ( "username", null, time () - 3600 * 24 * 365 );
+			setcookie ( "password", null, time () - 3600 * 24 * 365 );
+		}
+		echo "<p style='font-size: 20vw; text-align: left; width:100%;'>Error.</p><br>";
+	}
+}
+?>

+ 37 - 0
src/Read.html.php

@@ -0,0 +1,37 @@
+<html lang="zh-CN">
+	<head>
+		<title>信息-库存系统</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<style>
+			body { font-family: Helvetica, Arial, sans-serif; font-size:16px; color: #000; font-weight:normal;}
+			.div_1{font-size: 5vw; text-align: left; margin-left: 5%;}
+			.p_1{font-size: 4vw; text-align: left; width:94%; min-height: 20%; margin-bottom: 5%; margin-top: 0%; border: 3px inset;}
+			.p_2{font-size: 4vw; text-align: left; width:94%; min-height: 5%; margin-bottom: 5%; margin-top: 0%; border: 3px inset;}
+		</style>
+	</head>
+	<body>
+		<div style='text-align: center;'>
+			<h1 id=title style='font-size: 5vw;'>库存信息</h1>
+			<div style='border: 5px solid;'>
+				<p style='font-size: 5vw; text-align: left; margin-left: 5%; width:95%;'>
+					<a id="SN">SN: <?php echo $SN?></a>
+					<br><a id="TAG">TAG <?php echo $TAG?></a>
+					<br><a id="TIME">TIME: <?php echo $TIME?></a>
+					<?php
+					if (!empty($NOTE)){
+						echo "<div id=\"NOTE_div\" class=\"div_1\" >NOTE: <p id=\"NOTE\" class=\"p_1\">".$NOTE."</p></div>";
+					}
+					if (!empty($N1)){
+						echo "<div id=\"N1_div\" class=\"div_1\" >N1: <p id=\"N1\" class=\"p_2\">".$N1."</p></div>";
+					}
+					if (!empty($N2)){
+						echo "<div id=\"N2_div\" class=\"div_1\" >N2: <p id=\"N2\" class=\"p_2\">".$N2."</p></div>";
+					}
+					?>
+				</p>
+			</div>
+			<a id="login_info" class="login_info"><?php echo login_info();?></a>
+		</div>
+		<footer><br><br><a style='color:#000000; position:absolute; font-size: 2vw;' href="" target="_blank" >©2021 Moeyuuko. All rights reserved.</a></footer>
+	</body>
+</html>

+ 43 - 0
src/Write.html.php

@@ -0,0 +1,43 @@
+<html lang="zh-CN">
+	<head>
+		<title>写-库存系统</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<style>
+			body { font-family: Helvetica, Arial, sans-serif; font-size:16px; color: #000; font-weight:normal;}
+			.button {
+				-webkit-appearance:none;
+				height: 1.8em;
+				width: 5.3em;
+			}
+		</style>
+	</head>
+	<body>
+		<div style='text-align: center;'>
+			<h1 style='font-size: 5vw;'>录入</h1>
+			<div style='border: 5px solid;'>
+				<p style='font-size: 5vw;'>
+					<form name="input" action="" method="POST" style='font-size: 5vw; text-align: center; width:100%;'>
+						<p style='margin:0px;'>--TAG--</p>
+						<input type="text" name="TAG" required="required" style='font-size: 5vw; width:95%;'>
+						<p style='margin:0px;'>--TIME--</p>
+						<input type="text" name="TIME" required="required" style='font-size: 5vw; width:95%;' value='<?php echo date("Y/m/d H:i",time());?>'>
+						<p style='margin:0px;'>--NOTE--</p>
+						<textarea name="NOTE" style='font-size: 5vw; width:95%;'></textarea>
+						<p style='margin:0px;'>--N1--</p>
+						<textarea name="N1" style='font-size: 5vw; width:95%;'></textarea>
+						<p style='margin:0px;'>--N2--</p>
+						<textarea name="N2" style='font-size: 5vw; width:95%;'></textarea><br><br>
+						<input type="radio" name="Security" style="zoom:250%"; value="1" checked="true">私密 
+						<input type="radio" name="Security" style="zoom:250%"; value="0">公开 
+						<input type="radio" name="Security" style="zoom:250%"; value="2">半公开
+						<br><br><br>
+						<input type="submit" name="button" value="Submit" style='font-size: 5vw;' class="button"><br><br>
+
+					</form>
+				</p>
+			</div>
+			<a id="login_info" class="login_info"><?php echo login_info();?></a>
+		</div>
+		<footer><a style='color:#000000; position:absolute; font-size: 2vw;' href="" target="_blank" >©2021 Moeyuuko. All rights reserved.</a></footer>
+	</body>
+</html>

+ 33 - 26
index.html → src/_index.html.php

@@ -1,27 +1,34 @@
-<html lang="zh-CN">
-	<head>
-		<title>库存系统-搜索</title>
-		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-		<style>
-			body { font-family: Helvetica, Arial, sans-serif; font-size:16px; color: #000; font-weight:normal;}
-			.button {
-				-webkit-appearance:none;
-				height: 1.8em;
-				width: 5.3em;
-			}
-		</style>
-	</head>
-	<body>
-		<div style='text-align: center'>
-			<div style='border: 5px solid;'>
-				<p style='font-size: 5vw;'>
-					<form name="input" action="Read.php" method="get" style='font-size: 5vw; text-align: left; width:100%;'>
-						SN: 
-						<input type="text" name="key" required="required" style='font-size: 5vw; width:60%;'>
-						<input type="submit" value="Submit" style='font-size: 5vw;' class="button">
-					</form>
-				</p>
-			</div>
-		</div>
-	</body>
+<html lang="zh-CN">
+	<head>
+		<title>搜索-库存系统</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<style>
+			body { 
+				font-family: Helvetica, Arial, sans-serif; 
+				font-size:16px; color: #000; 
+				font-weight:normal;
+			}
+			.button {
+				-webkit-appearance:none;
+				height: 1.8em;
+				width: 5.3em;
+			}
+		</style>
+	</head>
+	<body>
+		<div style='text-align: center; height: 95%;'>
+			<h1 id=title style='font-size: 5vw;'>库存系统</h1>
+			<div style='border: 5px solid;'>
+				<p style='font-size: 5vw;'>
+					<form name="input" action="Read.php" method="get" style='font-size: 5vw; text-align: left; width:100%;'>
+						SN: 
+						<input type="text" name="key" required="required" style='font-size: 5vw; width:60%;'>
+						<input type="submit" value="Submit" style='font-size: 5vw;' class="button">
+					</form>
+				</p>
+			</div>
+			<a id="login_info" class="login_info"><?php echo login_info();?></a>
+		</div>
+		<footer><a style='color:#000000; position:absolute; font-size: 2vw;' href="" target="_blank" >©2021 Moeyuuko. All rights reserved.</a></footer>
+	</body>
 </html>

+ 47 - 0
src/login.html.php

@@ -0,0 +1,47 @@
+<html lang="zh-CN">
+	<head>
+		<title>登录-库存系统</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<style>
+			body { font-family: Helvetica, Arial, sans-serif; font-size:16px; color: #000; font-weight:normal;}
+			.button {
+				-webkit-appearance:none;
+				height: 1.8em;
+				width: 5.3em;
+			}
+			.login_info {
+				font-size: 5vw;
+				text-align: center;
+			}
+		</style>
+		<script src="js/md5.min.js"></script>
+	</head>
+	<body>
+		<div style='text-align: center'>
+			<h1 style='font-size: 5vw;'>登录</h1>
+			<div style='border: 5px solid;'>
+				<p style='font-size: 5vw;'>
+					<form id="form1" name="form1" method="post" action="" onsubmit="return checkForm()" style='font-size: 5vw; text-align: center; width:100%;'>
+						<p style='margin:0px;'>--用户名--</p>
+						<input type="text" name="username" required="required" id="username" value="" style='font-size: 5vw; width:95%;'/>
+						<p style='margin:0px;'>--密码--</p>
+						<input type="password" required="required" id="password" value="" style='font-size: 5vw; width:95%;'/>
+						<input type="hidden" name="password" id="password_md5">
+						<br><br><input type="submit" name="button" id="button" value="登录" style='font-size: 5vw;' class="button"/><br>
+						<br><input type="checkbox" name="remember" value="1" checked="true" style="zoom:200%;">记住密码
+					</form>
+				</p>
+			</div>
+			<?php echo $login_info?>
+		</div>
+		<footer><a style='color:#000000; position:absolute; font-size: 2vw;' href="" target="_blank" >©2021 Moeyuuko. All rights reserved.</a></footer>
+		<script>
+			function checkForm() {
+				var pwd = document.getElementById('password');
+				var pwd_md5 = document.getElementById('password_md5');
+				pwd_md5.value = md5(pwd.value);
+				return true;
+			}
+		</script>
+	</body>
+</html>

+ 36 - 0
src/login_info.php

@@ -0,0 +1,36 @@
+<?php
+include(".Config.php");
+function login_info(){
+	global $ROOT_DIR;
+	$html = <<<EOF
+<style>
+	.login_info {
+		font-size: 5vw;
+		text-align: center;
+	}
+</style>
+EOF;
+	echo $html;
+	$gohome = '<a class="login_info" href='.$ROOT_DIR.'>主页</a>';
+	$goWrite = '<a class="login_info" href='.$ROOT_DIR.'Write.php>录入</a>';
+	if (!empty ( $_SESSION ['user'] )){
+		$re = $_SESSION['user'].'<br><a class="login_info" href=logout.php?req_url='.$_SERVER ['REQUEST_URI'].'>登出</a>';
+		switch ($_SERVER ['REQUEST_URI']){
+			case $ROOT_DIR: //主页
+				return $re.'&nbsp;&nbsp;&nbsp;&nbsp;'.$goWrite;
+			case $ROOT_DIR.'Write.php': //录入
+				return $re.'&nbsp;&nbsp;&nbsp;&nbsp;'.$gohome;
+			default:
+				return $re.'&nbsp;&nbsp;&nbsp;&nbsp;'.$gohome.'&nbsp;&nbsp;&nbsp;&nbsp;'.$goWrite;
+		}
+	}else{
+		$re = '<a class="login_info" href=login.php?req_url='.$_SERVER ['REQUEST_URI'].'>登录</a>';
+		switch ($_SERVER ['REQUEST_URI']){
+			case $ROOT_DIR:
+				return $re;
+			default:
+				return $re.'&nbsp;&nbsp;&nbsp;&nbsp;'.$gohome;
+		}
+	}
+}
+?>

Some files were not shown because too many files changed in this diff