Cách xử lý biểu mẫu trên cùng một trang so với sử dụng trang quy trình riêng. Ngay bây giờ cho đăng ký, gửi bình luận, vv Tôi sử dụng một trang thứ hai để xác minh dữ liệu và sau đó gửi và các tuyến đường trở về home.php. Làm thế nào tôi có thể làm cho nó để gửi, bản thân trang xác minh hơn là sử dụng một trang thứ hai.Xử lý trang giống nhau
Trả lời
Bạn có thể yêu cầu biểu mẫu gửi tới bản thân PHP, sau đó kiểm tra các biến số $_POST
để xử lý biểu mẫu. Phương pháp này rất tốt để kiểm tra lỗi khi bạn có thể đặt lỗi và sau đó tải lại biểu mẫu với bất kỳ thông tin nào mà người dùng đã gửi trước đây của bạn vẫn còn nguyên vẹn (nghĩa là họ không bị mất nội dung gửi của họ).
Khi nút "gửi" được nhấp, nút này sẽ BẬT thông tin đến cùng một trang, chạy mã PHP ở trên cùng. Nếu một lỗi xảy ra (dựa trên kiểm tra của bạn), biểu mẫu sẽ tải lại cho người dùng với các lỗi được hiển thị và bất kỳ thông tin nào mà người dùng đã cung cấp vẫn còn trong các trường. Nếu một lỗi không xảy ra, bạn sẽ hiển thị một trang xác nhận thay vì biểu mẫu.
<?php
//Form submitted
if(isset($_POST['submit'])) {
//Error checking
if(!$_POST['yourname']) {
$error['yourname'] = "<p>Please supply your name.</p>\n";
}
if(!$_POST['address']) {
$error['address'] = "<p>Please supply your address.</p>\n";
}
//No errors, process
if(!is_array($error)) {
//Process your form
//Display confirmation page
echo "<p>Thank you for your submission.</p>\n";
//Require or include any page footer you might have
//here as well so the style of your page isn't broken.
//Then exit the script.
exit;
}
}
?>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
<?=$error['yourname']?>
<p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p>
<?=$error['address']?>
<p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p>
<p><input type="submit" name="submit" value="Submit" /></p>
</form>
Cảm ơn Michael. Chỉ là điều tôi đang tìm kiếm. Tuy nhiên, thay vì nói cảm ơn bạn đã gửi, làm cách nào tôi có thể làm mới trang đó để trang có thể tải thông tin mới. Không thể làm Ajax vào thời điểm này, mới cho trò chơi lập trình! – AAA
Nếu bạn xử lý biểu mẫu trước khi tìm nạp dữ liệu (Như tôi đã đề xuất), dữ liệu mới sẽ được tự động tính đến. – Jonas
@AAA Tôi không hiểu câu hỏi của bạn. Phương pháp trên là mô hình chính xác tôi sử dụng trong 90% biểu mẫu của mình và là một ví dụ mở rộng về những gì @NeqO đã cung cấp. Bạn đang cố gắng hoàn thành điều gì trong việc "làm mới" trang? –
Việc xây dựng đơn giản nhất là để phát hiện xem các mảng $_POST
là không có sản phẩm nào
if(isset($_POST['myVarInTheForm'])) {
// Process the form
}
// do the regular job
bạn có thể kiểm tra xem nó là POST yêu cầu bên trong mã của trang và sau đó kiểm tra dữ liệu. Nếu đó là yêu cầu GET - chỉ cần hiển thị biểu mẫu. Tuy nhiên, hãy nhớ rằng thực tiễn tốt là hiển thị kết quả gửi biểu mẫu thành công trên một trang khác được phân phát qua yêu cầu GET, tức là mọi biểu mẫu POST thành công sẽ được trả lời với chuyển hướng đến trang thành công.
Tại sao bạn đề xuất quy trình này là tốt? – diagonalbatman
vì khi bạn hiển thị trang thông thường để trả lời POST, dữ liệu sẽ được gửi lại khi làm mới trang. Hầu hết các trình duyệt sẽ cảnh báo người dùng về điều đó (và hầu hết người dùng sẽ thực sự nhầm lẫn với cảnh báo này), một số, giống như Opera, sẽ lặng lẽ gửi lại tất cả dữ liệu POST. Trong mọi trường hợp, điều đó có lẽ sẽ không phải là hành vi mong muốn. Đó là lý do tại sao tôi khuyên bạn nên chuyển hướng đến trang kết quả nếu yêu cầu thành công. Đó là OK mặc dù để hiển thị kết quả xác nhận ngay sau khi POST, nếu có bất cứ điều gì sai với dữ liệu và yêu cầu người dùng sửa chữa đầu vào của nó. –
:-) Lý do duy nhất tôi hỏi là bởi vì khi bạn đang học nó thường là hữu ích để hiểu tại sao một bình luận cụ thể được thực hiện. – diagonalbatman
Tất nhiên bạn có thể khám phá các yêu cầu AJAX, nơi bạn sẽ thực hiện cuộc gọi không đồng bộ với tập lệnh xử lý của mình, sau đó cập nhật rồi cập nhật trang gửi với thông báo thành công. Điều này mang lại ấn tượng về "Xử lý trang giống nhau" tức là trang không phải làm mới.
Nó thực sự phụ thuộc vào hiệu quả bạn đang cố gắng đạt được.
Cảm ơn Andy. Đã thử triển khai Ajax. Không thể có được đầu của tôi aroudn nó. – AAA
Có rất nhiều tài nguyên trực tuyến tốt, một trang web tôi khuyên bạn nên http://net.tutsplus.com - tải các hướng dẫn video để giúp bạn. – diagonalbatman
@ Michael Irigoyen: Nó hoạt động tốt, nhưng trên rn đầu tiên/tải, nó cho thấy:
"Thông báo: Không xác định biến: Lỗi trong C: \ xampp \ htdocs \ same_page.php trên đường dây 28 "
Cách xử lý thông báo này?
Đã nhận ngay bây giờ: "Đã sử dụng đồng nghĩa, @ v.v ... để chặn các lỗi ..." "Hoạt động như một sự quyến rũ !!!" "Bây giờ tôi sẽ thử trên mã của tôi ..."
Tôi đã lưu thư cảm ơn và làm mới bằng các biến phiên.
if(!is_array($error)){
$_SESSION['message'] = 'Thank You!';
header('Location: yourpage.php');
exit();
}
và sau đó sử dụng này trong top có dạng:
if(isset($_SESSION['message'])){
echo $_SESSION['message'];
unset($_SESSION['message'];
}
này nên làm mới trang và hiển thị thông báo và sau đó nếu họ làm mới trang biến phiên rỗng nên cảm ơn bạn sẽ không hiển thị. Đây được gọi là tin nhắn flash.
- 1. Các trình xử lý sự kiện khởi động này có giống nhau không?
- 2. Tại sao SQL Server 2000 xử lý kiểm tra SELECT. * Và SELECT t.est. * Giống nhau?
- 3. Làm cách nào để ống dẫn stdout và stderr của quá trình xử lý giống nhau?
- 4. Tại sao MySQL xử lý é giống như e?
- 5. Các cookie iframe miền giống nhau
- 6. Lệnh xử lý ở đầu trang
- 7. Xử lý 404 trong trang web Azure
- 8. Xử lý xác thựcResult từ các nhà cung cấp khác nhau trong cùng một trang
- 9. Xử lý các trang tự làm mới từ selen
- 10. Cách xử lý các bản địa hóa trang động?
- 11. Sử dụng đa xử lý python với các hạt giống ngẫu nhiên khác nhau cho mỗi quá trình
- 12. Công cụ addEventListener có giống nhau không?
- 13. Danh sách và bộ xử lý hoạt động khác nhau
- 14. Xử lý các tập hợp lồng nhau trong DDD
- 15. Sử dụng cách xử lý các đối tượng lồng nhau
- 16. OpenMP xử lý các vòng lồng nhau như thế nào?
- 17. xử lý giống đa hình các tham số - OO đơn giản?
- 18. Cách xử lý phân trang PDF trong PhantomJS
- 19. Cách xử lý hình ảnh nhiều trang trong PythonMagick?
- 20. Jekyll dường như đã ngừng xử lý các trang
- 21. Xử lý sự kiện trang làm mới với javascript
- 22. jsdom không xử lý tập lệnh bên trong trang web
- 23. Cách xử lý lỗi thay đổi trang trong jQuery Mobile
- 24. Bình xử lý PDF dưới dạng trang riêng của mình
- 25. Cách xử lý tham chiếu 'này' trong kiểu trang trí
- 26. Tài liệu xử lý trang trí bằng Python
- 27. #DEBUG Các câu lệnh tiền xử lý trong trang ASPX
- 28. Tại sao sử dụng Trình xử lý trong khi runOnUiThread cũng giống vậy?
- 29. Bất kỳ thư viện C/C++ giống như OpenCV nào để xử lý Âm thanh?
- 30. Đối tượng xử lý Giống như từ điển thuộc tính trong C#
tại sao không chỉ bao gồm trang thứ hai đó? –
loại công việc lộn xộn của nó, không 'bạn nghĩ sao? Nó sẽ trông gọn gàng nếu nó trên cùng một trang. – AAA