10/10/2018, 11:17

Hỏi về giỏ hàng ASP

Mình đang làm một cái giỏ hàng bằng ASP .....nhưng kẹt ở chỗ thống kê giỏ hàng . Ví dụ : ông A lần đầu chọn mặt hàng thứ 1 , thông tin được lưu vào ( vd như số lượng , số tiền ) , sau đó ông ta tiếp tục chọn các mặt hàng khác ..cuối cùng ông ta quay trở lại mặt hàng 1 và chọn lần nữa .....Như vậy trong bảng thống kê giỏ hàng hiện tới hai lần mặt hàng 1 .Vậy cho hỏi có cách nào lưu lại trong section để khi ông này chọn hai lần mặt hàng 1 nhưng trong thống kê chỉ có hiển thị một lần thôi và được cộng dồn về số lượng và số tiền
White_Rose viết 13:25 ngày 10/10/2018
Bạn sử dụng key đi.
Chẳng hạn:
If Len(Request.Cookies("giohang")("a"))=0 then
'chưa có hàng, tạo mwói
else
'có hàng rồi -> tăng lên
end if
blackface viết 13:30 ngày 10/10/2018
hề hề, làm giỏ hàng đâu cần tới ASP, làm Javascript lưu vào cookies có nhanh hơn không?
artnet viết 13:28 ngày 10/10/2018
Xin gợi ý một giải thuật khác:

Bạn chạy một câu Query dò tìm xem mặt hàng đã có trong giỏ hàng chưa???
Nếu mặt hàng chưa có trong giỏ hàng -> create new recordset
Nếu mặt hàng đã có trong giỏ hàng -> edit recordset và chỉ sửa chữa phần số lượng (số lượng + 1)

chúc bạn thành công
--=[artnet]=--
DTB viết 13:33 ngày 10/10/2018
Thay vì liệt kê đơn giản thì hãy dùng câu lệnh SQL để SUM số luợng :

SELECT SUM(soluong),.... FROM.... WHERE.... GROUP BY ma_hang
Emotion viết 13:26 ngày 10/10/2018
mình lấy dữ liệu từ access mà . ASP thì chỉ biết sơ sơ thôi ...có bạn nào giúp mình bằng cách sử dụng section không ?
White_Rose viết 13:33 ngày 10/10/2018
Mình nghĩ buộc phải dùng cookie bởi vì người chọn không hẳn đã là thành viên. Mà nhiều người có thể chọn ở 1 thời điểm. Nếu không dùng cookie thì cũng phải lưu lại IP, nếu không thì ai biết đồ nào là của ai?

Nếu bạn dùng biến Session (không phải là section) thì cũng như cookie thôi. chẳng hạn lựa chọn lấy được thông qua Request.Form("mathang") thì:

Select case Request.Form("mathang")
case "hangA":
If Len(Session("hangA")=0 then
'chưa có hàng, tạo mới
Session("hangA")=1
else
'có hàng rồi -> tăng lên
Session("hangA") = Session("hangA") + 1
end if
case "hangB":
If Len(Session("hangB")=0 then
Session("hangB")=1
else
Session("hangB") = Session("hangB") + 1
end if
end select
DTB viết 13:18 ngày 10/10/2018
White_Rose có những diểm không đúng là:

Khi người ta mua hàng, dù người đó có là thành viên hay không, thì ta cần phải biết họ tên, địa chỉ, số tài khoản ... của người đó (chứ không phải là cần biết IP). Sau đó, khi người ta đã chuyển tiền cho mình thì mình sẽ mang hàng đi giao. Nếu tiền đã chuyển mà địa chỉ không tìm ra để giao hàng (hóa đơn chưa được ký nhận hàng) thì số tiền đó là khỏan nợ mà sau này ta phải chuyển trả lại cho người ta. Biết IP cũng đâu có tìm ra địa chỉ.

Cookie thường dùng để lưu lại các thông tin như: người đó thường vào mục nào, lần gần nhất họ ghé qua trang web của ta là khi nào, lần đàu tiên là khi nào...Còn Session dùng để lưu các thông tin qua nhiều trang ASP nhưng là trong cùng 1 phiên làm việc. Trường hợp giỏ hàng hoặc login thì dùng Session là thích hợp hơn.

Không dùng Select Case trong truờng hợp này được. Vì như đoạn code của White_Rose thì có nghĩa là: mỗi lần chọn 1 mặt hàng thì tăng số lượng của nó lên 1 đơn vị -----> thường thì ta dùng 1 Form cho phép người mua chọn mỗi lần 5-10 mặt hàng và với số lượng không hạn chế.

Không dùng Select Case được vì nếu đây là siêu thị với vài chục ngàn mặt hàng thì làm sao liệt kê ra trong 1 file ASP được. Đoạn code của White_Rose chỉ có 2 mặt hàng thôi. Ngoài ra các mặt hàng chắc chắn sẽ thay đổi, nhất là linh kiện máy tính và thời trang phụ nữ. Cho dù có liệt kê ra được thì cũng phải thường xuyên viết lại và upload lên server lại.

Tóm lại: nguyên do là tại Emotion không trình bày kỹ ý tưởng của mình, đã làm tới đâu, đã làm như thế nào ...

Lẽ ra Emotion nên trình bày thế này:

Giả sử 1 siêu thị được chia thành nhiều quầy hàng, mỗi quầy có khoảng 10-15 mặt hàng (để thuận tiện download thông tin về tính năng kỹ thuật, giá cả, hình ảnh ... của các mặt hàng đó). Người mua vào 1 trang web (tương ứng với 1 quầy hàng) và có thể chọn mua 1 hoặc vài mặt hàng. Lưu ý là thực ra chỉ có 1 trang ASP, giống như forum này, khi có nhiều bài viết thì nó được chia ra nhiều trang, mỗi trang 15 bài viết. Trên trang web có 1 Form để người mua chọn...

Theo tôi thì:

Có 2 cách thiết kế:

- Chia trang web thành 2 Frame, frame chính dặt cái Form, frame phụ hiển thị thông tin về các mặt hàng mà khi người mua click vào sẽ dùng 1 đoạn cilent script ghi lại mã hàng và số lượng cho cái Form ở frame chính.

- Không chia frame mà mỗi trang đều có form để có thể chọn mua 1 hoặc vài mặt hàng. Khi chọn xong ở nhóm mặt hàng đó (1 quầy hàng) thì sẽ gửi lên server mã hàng và số lượng để cộng dồn vào các chọn lựa trước đó.

Trường hợp thứ nhất: xử lý việc cộng dồn bằng cilent script.

Trường hợp thứ hai: Có thể có các cách: nối tất cả các mã hàng và số lượng của tất cả các lần chọn vào thành 1 chuỗi ký tự và gán vào biến Session (sau đó sẽ xử lý chuỗi để cộng các mặt hàng giống nhau), hoặc là đặt một mảng (array) vào biến Session để lưu lại các mã hàng và số lượng, hoặc là ghi mã hàng và số lượng vào 1 table như là các record.

Việc xử lý chuỗi khá phức tạp vì ta cần dùng các biến tạm thời và duyệt qua chúng nhiều lần để cộng các mặt hàng trùng nhau.

Xử lý mảng trong Session còn phức tạp hơn vì mỗi lần thay đổi giá trị hoặc số phần tử của mảng phải nhớ gán ngược lại cho Session (ASP là như vậy đấy!!!).

Ghi vào table thì phải xử lý xóa đi sau khi người ta đặt mua hàng xong, Việc này không dễ, chẳng hạn khi người ta bị cúp điện ngang xương hoặc disconnect mà hông thèm logout ...

Hổng lẽ tui phải trình bày chi tiết của các cách khác nhau?

Hãy cho biết trang web của bạn nó ra làm sao, cái form nó như thế nào, thống kê giỏ hàng bằng lệnh cụ thể gì....có như vậy may ra mới biết được tại sao bạn không cộng dồn các mặt hàng lại được.
Emotion viết 13:30 ngày 10/10/2018
Trong trang Web có 1 form chỉ khách hàng lựa chọn , nhưng chỉ là phần đăng kí để xác nhận là mình mua . Tất cả các mặt hàng mà khách đã lựa chọn đều được lưu vào 1 trang ASP ( trang này không hiển thị trong I.E ) . Khi thống kê giỏ hàng thì dữ liệu được lấy từ trang này mà ra . Mình không làm cái vụ thành viên , nên cần phải quan tâm đến nó . Data được lấy ra hiển thị trong IE dưới dạng table , khi thống kê giỏ hàng cũng vậy , nên mới có chuyện 2 mặt hàng cùng chọn nhưng trong 2 dòng thống kê lại có một mặt hàng giống nhau . Ý của mình là muốn gộp 2 dòng đó lại thàng một và được cộng dồn về số tiền và số lượng
DTB viết 13:26 ngày 10/10/2018
.... Tất cả các mặt hàng mà khách đã lựa chọn đều được lưu vào 1 trang ASP ( trang này không hiển thị trong I.E ) . Khi thống kê giỏ hàng thì dữ liệu được lấy từ trang này mà ra ......

Hông hiểu gì cả!
Làm sao mà lưu vào trang ASP được.
Lưu vào biến nhớ, mảng, collection hay là lưu vào file .txt hay là lưu vào database ?

Tốt hơn hết bạn hãy gửi kèm lên đây đoạn code mà bạn cho là không cộng được đó.
Bài liên quan
0