使用 PHP 无需重定向的 POST

问题描述 投票:0回答:10

我在 http://www.notonebit.com/projects/mailing-list/

找到了一个简单的邮件列表表格

问题是,当我单击提交时,我想要它做的就是在当前表单下显示一条消息,显示“感谢订阅”,而不进行任何重定向。相反,它会将我引导到一个全新的页面。

<form method="POST" action="mlml/process.php"> 
    <input type="text" name="address" id="email" maxlength="30" size="23"> 
    <input type="submit" value="" id="submit"name="submit"  >
</form>     
php post redirect
10个回答
5
投票

您将需要 AJAX 将数据发布到您的服务器。最好的解决方案是实施定期发布,这样至少会起作用。然后,您可以使用 Javascript 来连接它。这样,当有人没有 Javascript 时,发帖就可以工作(刷新)。

如果找到一篇关于使用 JQuery 通过 AJAX 发布表单的好文章 .

此外,您可以选择将数据发布到同一网址。 JQuery 库将添加

HTTP_X_REQUESTED_WITH
标头,您可以在服务器端脚本中检查其中的值。这将允许您发布到相同的 url,但返回不同的值(整个页面,或只是一个特定的响应,具体取决于是否是 AJAX 请求)。 因此,您实际上可以从表单中获取 url,而无需在 Javascript 中对其进行编码。这使您可以编写更易于维护的脚本,甚至可能会产生通用的表单处理方法,您可以将其重用于要使用 Ajax 发布的所有表单。


5
投票

使用 jQuery 非常简单:

<form id="mail_subscribe"> 
  <input type="text" name="address" id="email" maxlength="30" size="23">
  <input type="hidden" name="action" value="subscribe" />
  <input type="submit" value="" id="submit"name="submit"  >
</form>

<p style="display: none;" id="notification">Thank You!</p>

<script>
$('#mail_subscribe').submit(function() {
  var post_data = $('#mail_subscribe').serialize();
  $.post('mlml/process.php', post_data, function(data) {
    $('#notification').show();
  });
});

</script>

在你的process.php中:

<?php

if(isset($_POST['action'])) {

switch($_POST['action']) {
  case 'subscribe' :
  $email_address = $_POST['address'];

  //do some db stuff...
  //if you echo out something, it will be available in the data-argument of the
  //ajax-post-callback-function and can be displayed on the html-site
  break;
}

}

?>

3
投票

由于您的

action
属性,它会重定向到不同的页面。

尝试:

    <form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>"> 
        <input type="text" name="address" id="email" maxlength="30" size="23" /> 
        <input type="submit" value="" id="submit" name="submit" />
    </form> 

<?php if (isset($_POST['submit'])) : ?>
   <p>Thank you for subscribing!</p>
<?php endif; ?>

用户点击您的提交按钮后,页面将显示您的“谢谢”消息。

此外,由于我不知道代码所在页面的名称,因此我插入了一个超级全局变量,该变量将插入当前执行脚本的文件名,相对于文档根目录。因此,该页面将自行提交。


2
投票

在 php 中不可能发送表单请求而不重定向,但有一种方法可以解决它。

<form method="post" action="http://yoururl.com/recv.php" target="_self">
<input type="text" name="somedata" id="somedata" />
<input type="submit" name="submit" value="Submit!" />
</form>

然后发送 php 页面让它做一些事情,但不要回显结果,而是简单地使用重定向

header( 'Location: http://yourotherurl.com/formpage' );

如果您希望它发回成功消息,只需这样做

$success = "true";
header( 'Location: http://yourotherurl.com/formpage?success='.$success);

并在表单页面上添加

$成功 = $_GET['成功'];

if($success == "true"){ echo '您的成功消息'; } 其他 { 回显 “你的失败消息”;


2
投票

返回并打印当前页面上另一页的内容。

index.php

<html>
<body>
<p>index.php</p>  
<form name="form1" method="post" action="">
  Name: <input type="text" name="search">
  <input type="submit">
</form>
 
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $_POST['search'];
  include 'test.php';
}
?>
    
</body>
</html> 

测试.php

<?php
   echo 'test.php <br/>';
   echo 'data posted is: ' . $_POST['search'];
?>

结果:

Result:


1
投票

你必须使用AJAX。但这需要 JavaScript 在用户 Brwoser 处处于活动状态。 在我看来,这是无需重定向的唯一方法。


0
投票

假设您无法控制要发布到的页面,这只是一个可能对您有用的想法:

创建您自己的“代理 php 目标”以进行操作,然后回复您想要的消息。然后可以使用 http_post_data 转发发布到 php 文件的数据(使用预编码数据执行 POST 请求)。您可能需要稍微解析一下。


0
投票

英文版

似乎没有人解决这个问题没有javascript或ajax

您还可以执行以下操作。

保存包含函数的 php 文件,然后将它们发送到页面的索引

示例

索引.PHP

<div>
<?php include 'tools/edit.php';?>
<form method="post">
<input type="submit" name="disable" value="Disable" />
<input type="submit" name="enable" value="Enable" />
</form>
</div>

Tools.php(可以是任何名称,注意它保存在lametools文件夹中)

<?php
if(isset($_POST['enable'])) { 
echo "Enable";
} else {
}

if(isset($_POST['disable'])) { 
echo "Disable";
} else {
}
?>

0
投票

我很惊讶没有人提到这一点,因为已经过去 12 年半了,但你可以这样做:

index.php

<form method="post" action="<?php include 'form-action.php';?>" enctype="multipart/form-data">
      <input type="text" name="input1" placeholder="Enter text...">
      <input type="text" name="input2" placeholder="Enter more text...">
      <input type="submit" value="submit" name="submit">
</form>

表单动作.php

<?php
    $input1 = $_POST['input1'];
    $input2 = $_POST['input2'];

    //Do stuff with your inputs

?>

您可以直接在文件中执行此操作,无需包含,但包含只会使代码变得更容易,并允许您使用要提交到的页面。


-2
投票

使用


  

form onsubmit="takeActions();return false;"

function takeAction(){
  var value1 = document.getElementById('name').innerHTML;
  // make an AJAX call and send all the values to it
  // Once , you are done with AJAX, time to say Thanks :)
  document.getElementById('reqDiv').innerHTML = "Thank You for subscribing";
  }

© www.soinside.com 2019 - 2024. All rights reserved.