【问题标题】:window.location.href doesn't work with a form submit buttonwindow.location.href 不适用于表单提交按钮
【发布时间】:2021-01-25 03:05:25
【问题描述】:

我正在尝试创建一个投票指南针,我正在尝试提交表单并将答案插入数据库,然后将用户带到结果页面。当我有一个提交按钮时,我能够成功存储答案,但页面只是刷新而不是将它们带到结果页面。

但是,如果我将提交按钮更改为以下内容:

<img src="../pics/process.png" style="border:none; " onclick="Sort();">

我可以成功地将用户带到结果页面,但表单的答案没有存储到我的数据库中。

我被卡住了,不知道如何解决这个问题,我们将不胜感激。

这是生成结果的代码

`<script type="text/javascript">
    function Sort() {
        //australia
        var party1= 0;
        var party2= 0;

        if (compass.q1[0].checked == true) {
            party1 += 1;
        } else if (compass.q1[1].checked == true) {
            party2 += 1;
        } else {
            alert("Please answer question 1.");
            return;
        }

        if (compass.q2[0].checked == true) {

            party1 += 1;
        } else if (compass.q2[1].checked == true) {
            party2 += 1;
        } else {
            alert("Please answer question 2.");
            return;
        }

        window.location.href = "./australiacompassresult.php?" + party1+ "&" + party2;
    } 

`

这是我可以成功提交表单但无法加载结果页面时的表单标题和提交按钮

<form id="compassform" name="compass" method="post">
<input type="submit" value="Submit">

这是将表单中的数据插入我的数据库的 php 代码

    $link = mysqli_connect("localhost","username","password", "database");

        if (mysqli_connect_error()) {
    
            die ("There was an error connecting to the database");
    
        }    
            $query = "INSERT INTO `users` (`q1`, `q2`, `q3`, `q4`, `q5`, `q6`, `q7`, `q8`) VALUES ('".mysqli_real_escape_string($link, $_POST['q1'])."', '".mysqli_real_escape_string($link, $_POST['q2'])."','".mysqli_real_escape_string($link, $_POST['q3'])."','".mysqli_real_escape_string($link, $_POST['q4'])."','".mysqli_real_escape_string($link, $_POST['q5'])."','".mysqli_real_escape_string($link, $_POST['q7'])."','".mysqli_real_escape_string($link, $_POST['q7'])."','".mysqli_real_escape_string($link, $_POST['q8'])."')";
            
            if (mysqli_query($link, $query)) {
                
                echo "";
            }

?>

【问题讨论】:

  • 能否请您显示 Javascript 和 PHP 代码
  • 正确的方法是让表单直接提交到结果页面:&lt;form action="australiacompassresult.php"&gt; 并为您的复选框提供您要提交的名称和值。
  • 防止默认提交操作。
  • 您的 url 中有错误:window.location.href = "./australiacompassresult.php?" + party1+ "&amp;" + party2; 使用此:window.location.href = "./australiacompassresult.php?" + "party1=" + party1+ "&amp;party2=" + party2; 在请求的页面上获取 get 参数。
  • 这里是提交成功或失败后如何重定向到所需页面的教程:bluehost.com/help/article/php-redirect

标签: javascript php html forms


【解决方案1】:

首先,将submit 事件侦听器附加到表单。在此调用之后检索event 对象并调用preventDefault() 方法以防止表单提交的默认行为。在此之后调用window.location.href 将用户引导到相关页面。

例如:

document.getElementById("form").addEventListener("submit",(e) => {
        e.preventDefault()
        window.location.href = "./australiacompassresult.php?" + party1+ "&" + party2;
});

【讨论】:

  • 此答案中未定义变量
  • 谢谢。当我添加这个时,我似乎能够生成结果,但它们没有被插入到数据库中。如果我删除 e.preventDefault(),那么我可以将结果插入到我的数据库中,但它不会将用户带到结果页面。我已经包含了 PHP,用于将我的答案从表单插入到数据库中。
  • 页面是否进入结果页面,然后重新加载回表单页面?
  • 不,它似乎只是重新加载页面而没有得到结果。
  • 另外,这应该包含在我的排序函数中,还是作为单独的 javascript 代码包含在我的表单下面?
猜你喜欢
  • 1970-01-01
  • 2018-07-28
  • 2015-08-02
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多