以 HTML 格式提交表单后重定向到页面

Posted

技术标签:

【中文标题】以 HTML 格式提交表单后重定向到页面【英文标题】:Redirecting to a page after submitting form in HTML 【发布时间】:2017-10-28 12:13:03 【问题描述】:

我对 html 编码还很陌生。在互联网上搜索了几个小时的方法后,我失败了,所以我在这里。我在这里设置了一个 CSRF 概念证明页面,我希望它重定向到另一个页面,该页面将执行 CSRF 已实现的有效负载。

<html>
  <body>
    <form action="https://website.com/action.php?" method="POST">
      <input type="hidden" name="fullname" value="john" />
      <input type="hidden" name="address" value="street 2, 32 ave" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

所以在使用这个表单提交之后,它所做的就是重定向到这个页面

但我希望它重定向到另一个 URL 并提交该表单。

【问题讨论】:

在您的操作中,我不确定您是否需要 ?。为什么不直接去 action.php 做你想做的事,然后从那里重定向到你想要的 url 我愿意,但该网站不归我所有,正如我所说,这是我向公司报告的 CSRF(跨站点请求伪造)概念证明。 【参考方案1】:

对于其他遇到同样问题的人,我自己解决了。

    <html>
      <body>
        <form target="_blank" action="https://website.com/action.php" method="POST">
          <input type="hidden" name="fullname" value="Sam" />
          <input type="hidden" name="city" value="Dubai&#32;" />
          <input onclick="window.location.href = 'https://website.com/my-account';" type="submit" value="Submit request" />
        </form>
      </body>
    </html>

我所要做的就是将 target="_blank" 属性添加到表单的内联中,以在新页面中打开响应并使用提交按钮上的 onclick 重定向另一个页面。

【讨论】:

我很好奇 _blank 中的新页面在代码中的哪个位置关闭,然后仅将第一页重定向到我想要的任何页面? @Ons Ali 我确实和你有同样的问题。并试图用你的回答解决我的问题。当我单击按钮时,页面正在重定向。但是表单中的数据没有保存在 API 中。你能看到我的吗,这是链接***.com/questions/62019718/… 是的,这个答案不正确。表单不向 API 提交数据。【参考方案2】:

您需要使用 jQuery AJAX 或 XMLHttpRequest() 将数据发布到服务器。发布数据后,您可以通过window.location.href 将您的页面重定向到另一个页面。

例子:

 var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() 
    if (this.readyState == 4 && this.status == 200) 
      window.location.href = 'https://website.com/my-account';
    
  ;
  xhttp.open("POST", "demo_post.asp", true);
  xhttp.send();

【讨论】:

【参考方案3】:

您可以做的是,验证值,例如:

如果fullanme的输入值大于某个值长度,如果address的输入值大于某个值长度则重定向到新页面,否则显示输入错误。

// We access to the inputs by their id's
let fullname = document.getElementById("fullname");
let address = document.getElementById("address");

// Error messages
let errorElement = document.getElementById("name_error");
let errorElementAddress = document.getElementById("address_error");

// Form
let contactForm = document.getElementById("form");

// Event listener
contactForm.addEventListener("submit", function (e) 
  let messageName = [];
  let messageAddress = [];
  
    if (fullname.value === "" || fullname.value === null) 
    messageName.push("* This field is required");
  

  if (address.value === "" || address.value === null) 
    messageAddress.push("* This field is required");
  

  // Statement to shows the errors
  if (messageName.length || messageAddress.length > 0) 
    e.preventDefault();
    errorElement.innerText = messageName;
    errorElementAddress.innerText = messageAddress;
  
  
   // if the values length is filled and it's greater than 2 then redirect to this page
    if (
    (fullname.value.length > 2,
    address.value.length > 2)
  ) 
    e.preventDefault();
    window.location.assign("https://www.google.com");
  

);
.error 
  color: #000;


.input-container 
  display: flex;
  flex-direction: column;
  margin: 1rem auto;
<html>
  <body>
    <form id="form" method="POST">
    <div class="input-container">
    <label>Full name:</label>
      <input type="text" id="fullname" name="fullname">
      <div class="error" id="name_error"></div>
      </div>
      
      <div class="input-container">
      <label>Address:</label>
      <input type="text" id="address" name="address">
      <div class="error" id="address_error"></div>
      </div>
      <button type="submit" id="submit_button" value="Submit request" >Submit</button>
    </form>
  </body>
</html>

【讨论】:

以上是关于以 HTML 格式提交表单后重定向到页面的主要内容,如果未能解决你的问题,请参考以下文章

表单提交后重定向

在 CodeIgniter 4 中提交表单后重定向页面无法工作

提交表单 Laravel 后重定向到不同的路由

表单提交后重定向的正确方法

使用纯javascript提交表单后重定向

输出表单提交成功到页面而不是重定向