方法如何在PHP中发布进程/异常

方法如何在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

我正在构建一个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="text" name="textinput" />
  <input type="submit" name="submit" value="submit" />
  <input type="submit" name="clear" value="clear" />
</form>

所以根据我的理解,如果我没有错的话。 当我单击提交/清除按钮时。PHP文件首先重新加载self页面,然后再将其重定向到页眉位置

如果我是对的。在处理大型PHP文件时,是否有其他方法可以避免多次重定向。当我有多个提交按钮


提前感谢您

多个重定向没有问题:这就是传统web的工作方式

不过,使用AJAX调用可能会减少重定向的数量

关于伪代码的一些注意事项:

  • Location
    header之前回显任何内容都是无用的:没有人应该阅读消息。更不用说在头之前不允许输出
  • http://
    仅在完全限定URI的情况下才允许位于地址前面
所以,代码实际上必须是

<?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();