需要检查登录用户名和密码,然后带来以前条目的数据



遵循我之前问过的问题(需要从Google Apps Script查询Google Sheet中的特定数据)。

我创建了一个web应用程序来跟踪我公司员工的工作时间,这个web应用程序很简单,它首先要求他们提供他们的用户名和密码,然后允许他们注册他们的进入时间和离开时间。现在,我需要找到一种方法来检查用户名和密码之间的匹配(在数据库中),如果这是真的,将有关该员工最后提交到web应用程序的信息,这个最后提交的数据是在另一个从web应用程序接收数据的工作表上找到的。

这里是一个最小的可复制的例子,它只是要求一个名字和一个密码,如果正确,显示另一个显示,在那里它把用户最后一次提交的时间戳带到web应用程序。

var name="";
function doGet(e) {
return HtmlService.createHtmlOutputFromFile('Form');
}
function AddRecord(Name) {

// get spreadsheet details
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0';
//Paste URL of GOOGLE SHEET
var ss1= SpreadsheetApp.openByUrl(url);
var webAppSheet1 = ss1.getActiveSheet();
const Lrow = webAppSheet1.getLastRow();
const data = [Name, new Date ()];
webAppSheet1.getRange(Lrow+1,1, 1, data.length).setValues([data])       
}
function checklogin(Name,Password) {
var url = 'https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit#gid=0'; //Paste URL of GOOGLE SHEET
var ss2= SpreadsheetApp.openByUrl(url);
var webAppSheet2 = ss2.getSheetByName("DataBase");
var checkuser = webAppSheet2.getRange(2, 1, webAppSheet2.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findNext();
var obj = {checkuser: checkuser ? 'TRUE' : 'FALSE'};
var sheet = ss2.getSheetByName("ReceivedData");
var ranges = sheet.getRange(2, 1, sheet.getLastRow(), 1).createTextFinder(Name).matchEntireCell(true).findAll();
if (ranges.length > 0) {
obj.lastTimestamp = ranges.pop().offset(0, 1, 1, 1).getDisplayValue();
return obj;
}
return obj;
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<style>
#LastR{
display: inline-block;
}
</style>
<script>
function AddRow()
{
var Name = document.getElementById("Name").value;  
google.script.run.AddRecord(Name);
document.getElementById("Name").value = '';
}    
function LoginUser() {
var Name = document.getElementById("Name").value;
var Password = document.getElementById("Password").value;
google.script.run.withSuccessHandler(function({checkuser, lastTimestamp}) {
if(checkuser == 'TRUE') {
document.getElementById("loginDisplay").style.display = "none";
document.getElementById("dataDisplay").style.display = "block";
document.getElementById("lastTimestamp").innerHTML = lastTimestamp;
} else if(checkuser == 'FALSE') {
document.getElementById("errorMessage").innerHTML = "Name not found";
}
}).checklogin(Name,Password);
}
</script>
</head>
<body>
<div id="loginDisplay">
<div> 
<label>Name</label><br>
<input type="text" id="Name" />
</div>
<div> 
<label>Password</label><br>
<input type="text" id="Password" />
</div>
<div class="btn">
<input value="Login" onclick="LoginUser()"
type="button">
<span id="errorMessage"></span>
</div> 
</div>
<div style="display:none"  id="dataDisplay">
<div>
<label>Last Registration</label>
<br><br>
<div class="LastR" id="lastTimestamp"></div>
<button type="button" value="Add" onclick="AddRow()">Send</button>
</div>
</div>
</body>
</html>

这里有一张表格,你可以从那里工作或复制信息。https://docs.google.com/spreadsheets/d/1CJoPuq3sHE5L31GwlvS4Zygm1sL3M0HGC7MgW3rCq3g/edit gid = 0

我相信你的目标如下。

  • 您要在电子表格中搜索DataBase表中NamePassword的输入值。
  • 您希望通过搜索DataBase表中的输入值来显示从ReceivedData表中检索到的最后时间戳。

在这种情况下,我想建议修改checklogin函数的var obj = {checkuser: checkuser ? 'TRUE' : 'FALSE'};,以实现您的目标,如下所示。

:

var obj = {checkuser: checkuser ? 'TRUE' : 'FALSE'};

:

var obj = {checkuser: checkuser && checkuser.offset(0, 1).getValue() == Password ? 'TRUE' : 'FALSE'};
  • 在本次修改中,先从第1列查找输入的Name的值,然后从第1列查找的同一行的第2列查找Password的值。当两个值相同时,返回TRUE
  • 参考:

  • 抵消(rowOffset columnOffset)

最新更新