2017-08-31 15 views
6

Mục tiêu của mã là chèn các tham số vào biểu mẫu rồi gửi biểu mẫu để lần lượt nhập dữ liệu vào cơ sở dữ liệu MySQL. Vấn đề là phương thức không đăng dữ liệu. Tôi không chắc mình đang làm gì sai, tôi đã xem xét rất nhiều câu hỏi về vấn đề này nhưng dường như không có gì hiệu quả.Không thể gửi biểu mẫu bài đăng trong Java

Đây là biểu mẫu.

<form action="http://localhost/Documents/dataadded.php" method="post"> 

<b>Add a New Data</b> 

<p>Email Address: 
<input type="text" name="email_address" size="30" value="" /> 
</p> 

<p>Email Pass: 
<input type="text" name="email_pass" size="30" value="" /> 
</p> 

<p> 
<input type="submit" name="submit" value="Send" /> 
</p> 

</form> 

Đây là mã Java.

public static void main(String[] args) { 


    String key1 = "email_address"; 
    String key2 = "email_pass"; 
    String key3 = "submit"; 

    String param1 = "[email protected]"; 
    String param2 = "password123"; 
    String param3 = "Send"; 
    try { 
     URL website = new URL("http://localhost/Documents/added.php"); 

     Map<String,String> arguments = new LinkedHashMap<>(); 
     arguments.put(key1, param1); 
     arguments.put(key2, param2); 
     arguments.put(key3, param3); 

     StringJoiner sj = new StringJoiner("&"); 
     for(Map.Entry<String,String> entry : arguments.entrySet()) 
      sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "=" 
       + URLEncoder.encode(entry.getValue(), "UTF-8")); 
     byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8); 
     int length = out.length; 

     HttpURLConnection connection = (HttpURLConnection) website.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.setFixedLengthStreamingMode(length); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
     connection.setDoOutput(true); 
     connection.getOutputStream().write(out); 


     System.out.println(sj.toString()); 

     InputStream response = connection.getInputStream(); 

     @SuppressWarnings("resource") 
     Scanner scan = new Scanner(response); 
     String responsebody = scan.useDelimiter("\\A").next(); 
     System.out.println(responsebody); 



    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

} 

Nếu ai đó có thể làm sáng tỏ điều gì sai với mã, nó sẽ được đánh giá cao.

+1

PHP tham gia như thế nào? –

+0

Khi biểu mẫu được gửi, dữ liệu được chuyển tới http: //localhost/Documents/dataadded.php có mã PHP xử lý dữ liệu và thêm nó vào cơ sở dữ liệu. –

+1

@ C.Trant Nhưng thực sự có liên quan đến câu hỏi của bạn không? Cách bạn xử lý dữ liệu có vẻ không liên quan, vấn đề của bạn là truyền dữ liệu – GrumpyCrouton

Trả lời

0

Bạn phải xóa OutputStream trước khi có thể mở InputStream. Dưới đây là phương pháp tôi đã tạo để thực hiện các yêu cầu POST.

private String doPost(String urlString, LinkedHashMap<String, String> params) throws Exception { 
    //...make the content 
    StringBuilder content = new StringBuilder(); 
    //...append params 
    boolean first = true; 
    for (Map.Entry<String, String> entry : params.entrySet()) { 
     if (!first) { 
      content.append("&"); 
     } else { 
      first = false; 
     } 
     content.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), charset)); 
    } 
    //... send POST request 
    URL url = new URL(urlString); 
    HttpURLConnection con; 
    con = (HttpURLConnection) url.openConnection(); 
    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setUseCaches(false); 
    try (OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream(), charset)) { 
     writer.write(content.toString()); 
     writer.flush(); 
    } 
    //...get response 
    try (Scanner s = new Scanner(con.getInputStream(), charset)) { 
     String resp = s.useDelimiter("\\A").hasNext() ? s.next() : ""; 
     return resp; 
    } 
} 
+0

Đây là mã Java 7, vì vậy hãy tha thứ cho vòng lặp cũ. –

+0

Các try-với-nguồn lực đóng dòng đầu ra, và đóng dòng đầu ra tuôn ra nó, và bạn chắc chắn không nên tuôn ra bên trong vòng .. – EJP

+0

Câu trả lời của bạn nói rằng bạn phải tuôn ra. Bạn không. – EJP

Các vấn đề liên quan