logo-dich-vu-thiet-ke-website-gia-re-webcode24h
Dùng thử free

ĐĂNG KÝ LIÊN HỆ

Vui lòng cung cấp thông tin. Chúng tôi sẻ liên hệ lại bạn để hoàn tất đăng ký này

Safe and Secure

Fast Shipping

Order History

Gửi Form HTML đến Google Sheet lưu data và gửi thông báo email, không cần server mới nhất 2023

Google Sheet là một trong những hãng siêu to khổng lồ, với hạ tầng siêu mạnh họ cung cấp nhiều dịch vụ miễn phí cho cộng đồng. Google Sheet là một trong đó, tuy người dùng tường sử dụng EXCEL cho công việc hơn nhưng để lưu trữ thì sheet là một nơi để lưu các data đang tin cậy và dễ dàng thao tác sửa chữa cập nhật. Tính năng của Google Sheet không chỉ là một công cụ giúp lưu trữ dữ liệu, tính toán, thông qua trình chỉnh sửa tập lệnh sheet còn có thể tạo ra các ứng dụng thú vị và hữu ích. Nếu bạn có một Form thu thập dữ liệu trên website chắc hẳn bạn cũng muốn dữ liệu đó được truyền đến Google Sheet. Trong bài viết này mình sẽ hướng dẫn bạn tạo ra một Form HTML có thể truyền dữ liệu đến Google Sheet một cách tức thì mà không dùng đến Google Forms. Đồng thời cũng có thể gửi thư thông báo về email của bạn.

Đã có nhiều hướng dẫn trên mạng nhưng đa phần cũ và lỗi thời. Nhiều mã chạy một phần và không hỗ trợ nữa. Nay do nhu cầu bẩn thân sử dụng nên mình tìm hiểu và tổng hợp một code đầy đủ tại đây. Đảm bảo chạy ngon lành luôn.

Chỉ cần dán mã vào HTML và App script là chạy luôn chứ không cần quan tâm tạo tiêu đề cho bảng. Vì tất cả đều tự động hết.

Form mình để nhiều loại trường khác nhau cho nhu cầu của các bạn, nếu không cần dùng thì cứ xóa. Mình có thêm 3 trường đầu tiên ẩn (name, email và phone) dùng để lọc spam Bot (thêm code tạo Captcha dạng đơn giản đảm bảo lọc bot không kém recaptcha). các trường này nên giữ lại nha còn lại bạn tùy ý xóa hay giữ các trường khách tùy. Lần gửi form đầu tiên Tiêu đề sẻ tự động tạo và lưu data vào Sheet, đồng thời có một email thông báo đến email được chỉ định.

Ngoài ra bạn có thể sử dụng một vài dịch vụ bên thứ 3 như form2channel.com rất hay và miễn phí 100% nhưng sheet của bạn chỉ ở dạng được chia sẻ, nhưng cũng là quá đủ nếu người dùng bình thường

Các bước thực hiện cụ thể

Bước 1:

1a. Tạo một bảng tính mới tinh. Đổi tên nếu muốn

1b. Mở Trình chỉnh sửa tập lệnh App script của google sheet

Mở trình chỉnh sửa Apps Script bằng cách nhấp vào " Tiện ích mở rộng " > " Apps Script "

1c. Tạo một bảng tính mới. Đổi tên nếu muốn

Copy và dán đoạn code dưới thay thế code mặt định

CODE APP SCRIPT:

function doPost(e) {

var sheet = SpreadsheetApp.getActiveSheet(); // mở sheet hiện tại

// Giả sử e.parameter là một đối tượng có các khóa và giá trị

var keys = Object.keys(e.parameter).filter(key => key != "captcha"); // lấy một mảng các khóa, sau dó lọc bỏ khóa capcha

if (sheet.getRange(1, 1).getValues() == "") {

// Nếu chưa có header, thêm header vào hàng đầu tiên của sheet

keys.unshift("Date"); // thêm trường thời gian vào đầu mảng khóa

sheet.getRange(1, 1, 1, keys.length).setValues([keys]);

}

// Tạo một mảng các giá trị tham số

var values = [];// Khai báo một mảng để lưu trữ các giá trị

var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];

// Lặp qua các trường từ 1 đến cuối

for (var i = 1; i < headers.length; i++) {

var key = headers[i];

var value = e.parameters[key][0];// Lấy giá trị của trường từ e.parameters

if (Array.isArray(value)) {

// Nếu là mảng, nối các phần tử thành một chuỗi

value = value.join();

}

values.push(value);// Thêm giá trị vào mảng

}

values.unshift(new Date());// Thêm time đầu mảng

var lastRow = sheet.getLastRow();// Lấy vị trí của hàng cuối cùng trong sheet

// Ghi nhiều hàng cùng lúc vào sheet

sheet.getRange(lastRow + 1, 1, 1, values.length).setValues([values]);

// Gửi một thông báo đến email

MailApp.sendEmail("mailcuaban@gmail.com", "Data saved successfully ", "Your data has been saved to the sheet.");

// Trả về một chuỗi thông báo thành công

return ContentService.createTextOutput("Data saved successfully");

}

1d. Lưu các thay đổi vào Tập lệnh của bạn

Sau khi thực hiện bất kỳ thay đổi mã nào, trước tiên bạn phải lưu chúng trong trình chỉnh sửa bằng biểu tượng lưu.

1e. Xuất bản Tập lệnh đã cập nhật dưới dạng Ứng dụng web

⚠️Lưu ý: Bạn phải chọn Anyonetùy chọn cho trình đơn thả xuống 'Người có quyền truy cập', nếu không các câu trả lời của biểu mẫu sẽ không được thông qua!⚠️

1f. Cho phép tập lệnh gửi email

Sau khi cấp quyền sẽ có cảnh báo như vậy thì chả sao đâu, bạn sẽ cần nhấp vào "Nâng cao" và "Chuyển đến ... (không an toàn)" để cấp quyền cho ứng dụng này.

1g. Sao chép URL của ứng dụng web vào bảng kẹp/bảng ghi chú của bạn. Sau đó nhấp vào "OK".

Lưu vào đâu đó lát nữa cần dùng

Bước 2

. Tạo Biểu mẫu HTML cơ bản của bạn

Copy và dán form HTML mẫu bên dưới, bạn cũng có thể tự dùng mẫu của chính mình, đổi action URL thành link đã có ở bước 1g

Lưu ý:

  • Mỗi thành phần biểu mẫu của bạn phải có một name
  • Hãy nhớ thay đổi action URL biểu mẫu thành URL bạn đã sao chép ở bước trước:

FORM HTML:

<form id="form2sheet" action="https://script.google.com/.............................../exec" method="POST" >

<input type="text" name="Name" placeholder="Name" autocomplete="false" value="" class="ch3ch-b0t">

<input type="text" name="Email" placeholder="Email" autocomplete="false" value="" class="ch3ch-b0t">

<input type="text" name="Phone" placeholder="Phone" autocomplete="false" value="" class="ch3ch-b0t">

<input type="text" name="Field" placeholder="Text" value="">

<input type="text" name="Field1" placeholder="Your name here" required value="">

<input type="tel" name="Field2" placeholder="Phone number" required value="" maxlength="15" >

<input type="email" name="Field3" placeholder="Your email here" required value="" maxlength="50">

<textarea name="Field4" placeholder="TextArea text"></textarea>


<p>DropDown:</p>

<div class="w-full wtr-group">

<select name="DropDown1">

<option value="Option 1">Option 1</option>

<option value="Option 2">Option 2</option>

</select>

<select name="DropDown2">

<option>Option Text</option>

</select>

<select name="DropDown3">

<option></option>

<option>Option</option>

</select>

</div>


<p>Multiselect DropDown:</p>

<select name="DropDown_multiselect" size="3">

<option value="Option 1" selected>Option 1</option>

<option value="Option 2">Option 2</option>

<option value="Option 3">Option 3</option>

<option value="Option 4">Option 4</option>

</select>


<p>Checkboxes:</p>

<div>

<label><input type="checkbox" name="CheckBox" value="Chọn 1" checked> CheckBox 1</label>

<label><input type="checkbox" name="CheckBox" value="Chọn 2"> CheckBox 2</label>

<label><input type="checkbox" name="CheckBox" value="Chọn 3"> CheckBox 3</label>

</div>


<p>RadioButton1:</p>

<div>

<label><input type="radio" name="Radio1" value="RadioButton a" checked> Checked</label>

<label><input type="radio" name="Radio1" value="RadioButton b"> Unchecked</label>

</div>

<p>RadioButton2:</p>

<div>

<label class="block"><input type="radio" name="Radio2" value="RadioButton a" checked> Checked</label>

<label class="block"><input type="radio" name="Radio2" value="RadioButton b"> Unchecked</label>

</div>

<div class="loading hidden"></div><!-- icon loading submit -->

<p>Kết quả phép toán: (vd: Hai + 3 = 5)</p>

<div class="wtr-group">

<input type="number" name="captcha" placeholder="" required value="">

<button type="Submit">SEND</button>

</div>

</form>

Bước 3. Thêm đoạn javascript này để form hoạt động (tùy chọn)

⚠️Lưu ý: Nếu bạn tự dùng form của mình thì đoạn javascript này có thể không cần thiết

Ý nghía đoạn code này là nhằm mục đích tạo một lệnh chặn form nếu bot điều vào 3 trường đầu tiên (vì form không có recaptcha thì rất dể bị đối thủ hoặc bot spam)

Ngoài ra thêm một trường câu hỏi bảo mật đơn giản để tạo thêm một lớp bảo vệ hạn chế thêm bot nếu nó đủ thông minh để không điền các trường 1,2,3

CODE SCRIPT:

<script>

//-- captcha ---

var chuArray = ["Một", "Hai", "Ba", "Bốn", "Năm", "Sáu", "Bảy", "Tám", "Chín", "Mười"];

var soArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var myArray = [].concat(chuArray, soArray);

var my2Array = [].concat(soArray, soArray);

var rand1 = "Một";

var rand2 = "2";

var num1 = 0;

var num2 = 0;

var tong = 0;


function captcha() {

rand1 = myArray[(Math.random() * myArray.length) | 0];

rand2 = myArray[(Math.random() * myArray.length) | 0];

num1 = my2Array[myArray.indexOf(rand1)];

num2 = my2Array[myArray.indexOf(rand2)];

tong = num1 + num2;

document.querySelector("#form2sheet input[name='captcha']").placeholder = rand1 + " + " + rand2 + " = ?";

}

//-----end code captcha-----

window.addEventListener("load", function() {

captcha();

const form = document.getElementById('form2sheet');

form.addEventListener("submit", function(e) {

e.preventDefault();

//----- checkbok------

var checkBox = document.querySelectorAll('input[type="checkbox"]');

// mảng value mặt định checkbox

var arrValueDefault = [];

// tạo mảng name trường checkbox

var arrName = [];

for (let i = 0; i < checkBox.length; i++) {

let name = checkBox[i].getAttribute("name");

arrName.push(name);

let value = checkBox[i].value;

arrValueDefault.push(value);

}

var groupName = Array.from(new Set(arrName)); // lọc giá trị trùng

arrValue();


function arrValue() {

for (let i = 0; i < groupName.length; i++) {

let arrNameGroup = document.querySelectorAll('input[name="' + groupName[i] + '"]');

let arrIndex = [];

let arrValue = [];

for (let j = 0; j < arrNameGroup.length; j++) {

if (arrNameGroup[j].checked) {

let value = arrNameGroup[j].value;

arrIndex.push(j);

arrValue.push(value);

}

}

if (arrIndex.length !== 0) {

arrNameGroup[arrIndex[0]].value = arrValue.join("; ");

} else {

arrNameGroup[0].checked = true;

arrNameGroup[0].value = "-/-";

}

}

}

//-----end checkbox-----

if (document.querySelectorAll('input.ch3ch-b0t')[0].value + document.querySelectorAll('input.ch3ch-b0t')[1].value + document.querySelectorAll('input.ch3ch-b0t')[2].value == "" && document.querySelector("#form2sheet input[name='captcha']").value == tong) {

document.querySelector("#form2sheet .loading").classList.remove("hidden");

const data = new FormData(form);

const action = e.target.action;

fetch(action, {

method: 'POST',

body: data,

})

.then(() => {

document.querySelector("#form2sheet .loading").classList.add("hidden");

captcha();

form.reset();

alert("Submit Success!");

});

} else {

captcha();

form.reset();

alert("Không thành công!\nNhập sai CAPTCHA");

}

//----reset value về mặt định--

for (let i = 0; i < checkBox.length; i++) {

checkBox[i].value = arrValueDefault[i];

}

});

});

</script>

OK hết rồi. thử điền form và xem thành quả

Bài viết sau mình sẻ hướng dẫn tạo Mẫu email để làm cho thông báo Email chuyên nghiệp hơn, cũng có thể gửi email phản hổi đến người đã gửi form tự động theo mẫu.

Cảnh báo: API của Google có giới hạn về số lượng email có thể gửi trong một ngày.

Form demo:

DropDown:

Multiselect DropDown:

Checkboxes:

RadioButton1:

RadioButton2:

Kết quả phép toán: (vd: Hai + 3 = 5)

Nội dung bài viết "Gửi Form HTML đến Google Sheet lưu data và gửi thông báo email, không cần server mới nhất 2023". Bài viết sẽ được chúng tôi thường xuyên cập nhật và sẽ hiển thị trong 24 giờ tới. Webcode24h luôn cập nhật các bài viết của mình để nó trở nên hữu ích với bạn đọc.

Cảm ơn bạn đã đọc hết bài viết, bạn cũng có thể truy cập danh mục "Lập trình Web, Hướng dẫn, Hỏi đáp code" dưới để xem các bài viết khác cùng chủ đề trên website của chúng tôi nhé.

Vui lòng để link nguồn bài viết này nếu bạn copy nội dung này

☞ Tài nguyên free

Pass: 'webcode24h.com' nếu có