onsubmit:表单重定向时不提交数据

时间:2014-07-08 15:43:05

标签: javascript php html redirect

我在尝试提交按钮以在提交数据后重定向到“查看”页面。

我的代码似乎是a)提交数据或b)重定向到页面。

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="window.location.href='viewPost.php?id=<?= $lastId ?>'; return false;">

^这样,它只重定向;但是,当我在结尾删除“return false”时,它会正确提交,但根本不会重定向。

我已经尝试通过我在这个网站和其他网站上阅读的JavaScript函数和onClick事件重定向,但这是它因某种原因正确重定向的唯一方法。

如何确保发送数据以及将表单重定向到查看页面?

更新:表单的其余部分看起来像这样......

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="window.location.href='viewPost.php?id=<?= $last$
<span id="postContent">
<textarea name="postText" autofocus></textarea>
</span>
<div align="center" style="margin-top: 1%">
<input name="read" type="submit" value="Read" class="read" /> &nbsp;
<input name="submit" type="submit" value="Save" class="save" />
</div>
</form>

更新2:这是我发送数据的方式,这是我的index.php:

<?php
if ($_POST['submit']) {
$postName = $_POST['title'];
$id = $_POST['id'];
mysql_connect ("localhost", "myuser", "mypassword") or die ('Error: ' . mysql_error());
mysql_select_db("notes") or die ('Data error:' . mysql_error());
$text = mysql_real_escape_string($_POST['postText']);
$query="INSERT INTO notes (title,text) VALUES ('$postName','$text')";
mysql_query($query) or die ('Error updating database' . mysql_error());
}
?>

3 个答案:

答案 0 :(得分:3)

当您提交普通表单时,浏览器会将数据POST到action中给出的URL,然后呈现服务器响应的文档。但是,如果您将onsubmitreturn false一起使用,则会取消默认行为,并且不会提交表单。

解决此问题的最简单方法是在处理POSTed数据后修改PHP脚本以重定向浏览器(使用header("Location: ..."))。如果您想使此选项成为可选项,则可以在表单中使用隐藏的input

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <input type="hidden" name="redirect_to"
    value="viewPost.php?id=<?php echo $lastId ?>"/>

  <!-- ...the rest of your form... -->
</form>

然后在PHP:

<?php
  // ...process the POSTed data...

  if( in_array('redirect_to', $_POST) ) {
    header("Location: " . $_POST['redirect_to']);
  }
?>

我的PHP有点生疏,但希望你明白了。使用Location标头要求PHP脚本不发送任何输出(HTML,echo等),但如果您正在重定向用户,则无论如何都不应发送任何输出。 (如果您仍想在某些情况下发送输出,则应在else之后的if分支中执行此操作。)您根本不需要JavaScript。

答案 1 :(得分:1)

您可以直接从处理数据的php文件重定向。 你的表格打电话

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

PHP代码

   //YOUR PROCESSSING CODE HERE
   header('Location: viewPost.php?id=' . $lastId );

重要的是要记住,如果你没有使用html标签,print,echo或任何其他在使用之前写入DOM的函数,必须使用标头,否则你将收到错误

答案 2 :(得分:0)

当您使用window.location.href时,您重定向整个页面,表单中的数据不会传递给URL。

您可以在表单中使用操作值,或者您可以创建一个将数据附加到网址的函数,然后执行window.location.href

示例:

HTML:

 <form ... onsubmit="doStuff()" data-url="viewPost.php?id=<?= $lastId ?>">

使用Javascript:

    function doStuff(){
        var url = $("form").attr("data-url");
        url += '&field1='+$("form [name='field1']").val();
        ...
        window.location.href = url
    }