我在尝试提交按钮以在提交数据后重定向到“查看”页面。
我的代码似乎是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" />
<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());
}
?>
答案 0 :(得分:3)
当您提交普通表单时,浏览器会将数据POST到action
中给出的URL,然后呈现服务器响应的文档。但是,如果您将onsubmit
与return 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
}