2013-06-27 32 views
20

Tôi có một hình thức php mà nằm trên contact.htmldạng php - trên nộp nghỉ trên cùng một trang

Các mẫu được chế biến từ processForm.php

Khi một người dùng điền vào biểu mẫu và nhấp chuột vào gửi, processForm.php gửi email và hướng người dùng đến - processForm.php với thông báo trên trang đó "Thành công! Thư của bạn đã được gửi".

Tôi không biết nhiều về php, nhưng tôi biết rằng hành động đó đang kêu gọi này là:

// Die with a success message 
die("<span class='success'>Success! Your message has been sent.</span>"); 

Câu hỏi của tôi là, làm thế nào tôi có thể giữ được thông báo bên trong các hình thức div mà không cần chuyển hướng đến trang processForm.php?

Tôi có thể đăng toàn bộ processForm.php nếu cần, nhưng nó dài.

Cảm ơn

+5

ajax hoặc đăng lên cùng một trang. Tôi thích đăng lên cùng một trang. –

+0

'tiêu đề ('contact.html? Result = success');' – BlitZ

+0

http://www.phptutorialforbeginners.com/2013/01/jquery-ajax-tutorial-and-example-of.html – underscore

Trả lời

11

Có hai cách để làm việc đó:

  1. Bằng việc gửi mẫu đơn đến cùng một trang. (Điều này có thể được thực hiện bằng cách đặt hành động biểu mẫu cho cùng một URL) trong trường hợp đó bạn phải xử lý biểu mẫu đã gửi bằng cách sử dụng tập lệnh PHP.
if(isset($_POST['submit'])) 
{ 
    // Enter the Code you want to execute after the form has been submitted 

    // Dispaly Success or failure Message if any 
} 
else    
{ 
    // Display the Form and the Submit Button 
} 

2.Using AJAX Mẫu thông đó là một chút khó khăn hơn mà phương pháp đầu tiên cho người mới bắt đầu.

+0

Có, công trình này, ít nhất một phần. Bạn không ở trên cùng một oage - vì kết quả được hiển thị trong một trang mới - nhưng nó tốt hơn nhiều, vì bạn * có * để quay lại trang đầu tiên, do đó tránh làm phồng lên các bản sao của cùng một PHP trong lịch sử của trình duyệt. – Apostolos

1

Bạn cần phải sử dụng mã tương tự như sau:

echo "<div id='divwithform'>"; 

if(isset($_POST['submit'])) // if form was submitted (if you came here with form data) 
{ 
    echo "Success"; 
} 
else    // if form was not submitted (if you came here without form data) 
{ 
    echo "<form> ... </form>"; 
} 

echo "</div>"; 

Mã với if như thế này là điển hình cho nhiều trang, tuy nhiên điều này là rất đơn giản.

Thông thường, bạn phải xác thực một số dữ liệu trong "if" đầu tiên (hãy kiểm tra xem các trường biểu mẫu có trống không vv).

Vui lòng truy cập www.thenewboston.org hoặc phpacademy.org. Có rất nhiều video hướng dẫn bằng PHP, bao gồm các biểu mẫu.

12

Cách tốt nhất để ở trên cùng một trang là đăng lên cùng một trang.

<form method="post" action="<?=$_SERVER['PHP_SELF'];?>"> 
+0

Cần lưu ý rằng phương pháp này không vượt qua kiểm tra xác thực HTML tại [Trình xác thực W3] (http://validator.w3.org), vì nó nói "** Giá trị không hợp lệ cho hành động thuộc tính trên biểu mẫu phần tử: Phải là không -empty. ** "Mặc dù nó chắc chắn hoạt động, HTML in như thế này, gây ra lỗi:'

' –

+0

Có một ví dụ về điều này tại http://www.html-form-guide.com/php-form/php-form-action-self.html – Mawg

+0

Điều này tất nhiên được hiểu cộng với nó không thay đổi bất cứ điều gì, vì nó giống với action = "" , đã được đề cập ở trên. – Apostolos

17

Để giữ trên cùng một trang trên trình bạn có thể để hành động rỗng (action="") vào thẻ hình thức, hoặc để nó ra hoàn toàn.

Đối với thư, hãy tạo biến ($message = "Success! You entered: ".$input;") và sau đó lặp lại biến tại vị trí trong trang nơi bạn muốn thông báo xuất hiện với <?php echo $message; ?>.

Như thế này:

<?php  
if(isset($_POST['SubmitButton'])){ //check if form was submitted 
    $input = $_POST['inputText']; //get input text 
    $message = "Success! You entered: ".$input; 
}  
?> 

<html> 
<body>  
<form action="" method="post"> 
<?php echo $message; ?> 
    <input type="text" name="inputText"/> 
    <input type="submit" name="SubmitButton"/> 
</form>  
</body> 
</html> 
+0

Bạn đã kiểm tra mã của mình chưa? 1) Trong lần chạy đầu tiên, trước khi gửi, bạn sẽ nhận được "Thông báo biến không xác định" (tất nhiên!) 2) Sau đó, mỗi lần gửi biểu mẫu mới được tải hiển thị thông báo và tất cả đều được xây dựng trong lịch sử của trình duyệt! Tại sao bạn không kiểm tra mã của mình trước khi đăng? – Apostolos

1

Bạn có thể sử dụng # hành động trong hành động hình thức

<?php  
if(isset($_POST['SubmitButton'])){ //check if form was submitted 
    $input = $_POST['inputText']; //get input text 
    $message = "Success! You entered: ".$input; 
}  
?> 

<html> 
<body>  
<form action="#" method="post"> 
<?php echo $message; ?> 
    <input type="text" name="inputText"/> 
    <input type="submit" name="SubmitButton"/> 
</form>  
</body> 
</html> 
1

Hãy thử này ...làm việc cho tôi

<form action="submit.php" method="post"> 
<input type="text" name="input"> 
<input type="submit"> 
</form> 

------ submit.php ------

<?php header("Location: ../index.php"); ?> 
+0

Thao tác này sẽ làm mới trang. –

0

bè. Sử dụng cách này, Sẽ không có "thông báo biến không xác định" và nó sẽ hoạt động tốt.

<?php 
    if(isset($_POST['SubmitButton'])){ 
     $price = $_POST["price"]; 
     $qty = $_POST["qty"]; 
     $message = $price*$qty; 
    } 

     ?> 

    <!DOCTYPE html> 
    <html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <form action="#" method="post"> 
      <input type="number" name="price"> <br> 
      <input type="number" name="qty"><br> 
      <input type="submit" name="SubmitButton"> 
     </form> 
     <?php echo "The Answer is" .$message; ?> 

    </body> 
    </html> 
Các vấn đề liên quan