方法如何在PHP中发布进程/异常
我正在构建一个web应用程序,当我使用POST方法时,我有很多困惑 假设我有下面的代码方法如何在PHP中发布进程/异常,php,forms,post,redirect,header,Php,Forms,Post,Redirect,Header,我正在构建一个web应用程序,当我使用POST方法时,我有很多困惑 假设我有下面的代码 <?php $abc = 'abc'; if(some condition){ $abc = 'xyz'; } if(isset($_POST['submit'])){ header("Location:http://someexample.php/$abc"); die(); } ?> <form method="POST"> <input type="t
<?php
$abc = 'abc';
if(some condition){
$abc = 'xyz';
}
if(isset($_POST['submit'])){
header("Location:http://someexample.php/$abc");
die();
}
?>
<form method="POST">
<input type="text" name="textinput" />
<input type="submit" name="submit" value="submit" />
<input type="submit" name="clear" value="clear" />
</form>
所以根据我的理解,如果我没有错的话。
当我单击提交/清除按钮时。PHP文件首先重新加载self页面,然后再将其重定向到页眉位置
如果我是对的。在处理大型PHP文件时,是否有其他方法可以避免多次重定向。当我有多个提交按钮
提前感谢您多个重定向没有问题:这就是传统web的工作方式 不过,使用AJAX调用可能会减少重定向的数量 关于伪代码的一些注意事项:
- 在
header之前回显任何内容都是无用的:没有人应该阅读消息。更不用说在头之前不允许输出Location
仅在完全限定URI的情况下才允许位于地址前面李>http://
<?php
if(isset($_POST['submit'])){
header("Location: someexample.php");
die();
}
?>
表单始终发布到其中的“操作”属性。如果您不想将其发布到self,请将表单开始标记设置为
。结果将是POST数据被发送到someexample.php
,而不是表单所在的页面
<form method="POST" action="yourexample.php" id="myForm">
<input type="text" name="textinput" />
<input type="submit" name="submit" value="submit" />
<input type="submit" name="clear" value="clear" />
</form>
如果您在一个页面上查看多个表单选项而不进行重定向,请查看AJAX提交
想法是将表单发送到接收文件,处理POST数据,并返回您希望从该过程返回的任何内容。例如:
$("form").submit( function(event) {
event.preventDefault(); //prevent the file submitting
var formData = $(this).serialize(); //process the form into an array for submission
$.ajax({
url: "receiver.php", //the url of the receiving file
type: "post", //setting method to post
data: formData, //set the data being sent to the form contents
success: function(response) {
$("div").html(response); //set the receiving div to the html you echo'd in the php document
}
});
});
您的receiver.php
文件看起来可能与接收POST数据的普通php文档完全相同,因此
仍将完全按照您的预期工作,而无需页面重定向!不过,这个解决方案确实需要
编辑:
要处理if(criteria){$abc='xyz';}
的更新问题,有几个建议
要保持异步方法,请使用$\u SESSION
变量。您可以使用receiver.php
设置它们,并在开始文档中处理它们
要返回到同一文档的标准提交方法,请将多个选项拆分为单选输入、复选框或单独的表单
因此:
PHP:
<?php
if(isset($_POST['submit'])) {
//do something
} elseif(isset($_POST['clear'])) {
//do something else
}
您基本上是将请求重定向到另一个页面。您应该使用表单的action属性,而不是使用header重定向页面
<form method="POST" action="yourexample.php" id="myForm">
<input type="text" name="textinput" />
<input type="submit" name="submit" value="submit" />
<input type="submit" name="clear" value="clear" />
</form>
url将是要将用户重定向到的页面的名称。
数据将成为您的表单。可以使用.serialize()方法获取表单数据
var data = $("myForm").serialize();
在success中,您可以定义一个函数,说明在结果成功的情况下应该做什么。这个方法有什么问题吗?我几乎有6个输入提交。每一个都重定向到同一页,然后找到下一页。似乎每次加载两个页面时都会出现这种情况。如前所述,在调用header()
之前执行输出时,此代码不会重定向。您可以为每个表单定义单独的操作,这样更易于处理……当然,Fred会记住这一点。谢谢你的时间。另外,在一次POST呼叫后你应该重定向的主要原因是,用户不会反复发送表单,以防他出于任何原因试图重新加载页面;您的代码如何与OP的表单一起实际工作?我搞不懂,还是只有我?(它不断地抛出错误)好吧,我明白了为什么你的代码会向我抛出错误。你忘了把结束语)
包含在if(isset($\u POST['submit']){
中,它应该读到if(isset($\u POST['submit']){
-“即使是专业人士也会偶尔犯错。”;-)
<?php
if(isset($_POST['submit'])) {
//do something
} elseif(isset($_POST['clear'])) {
//do something else
}
<form method="POST" action="yourexample.php" id="myForm">
<input type="text" name="textinput" />
<input type="submit" name="submit" value="submit" />
<input type="submit" name="clear" value="clear" />
</form>
$("#myForm").submit(function(event) {
event.preventDefault();
$.ajax({
type: "POST",
url: url,
data: data,
success: success,
dataType: dataType
});
});
var data = $("myForm").serialize();