我在 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>
您将需要 AJAX 将数据发布到您的服务器。最好的解决方案是实施定期发布,这样至少会起作用。然后,您可以使用 Javascript 来连接它。这样,当有人没有 Javascript 时,发帖就可以工作(刷新)。
如果找到一篇关于使用 JQuery 通过 AJAX 发布表单的好文章 .
此外,您可以选择将数据发布到同一网址。 JQuery 库将添加
HTTP_X_REQUESTED_WITH
标头,您可以在服务器端脚本中检查其中的值。这将允许您发布到相同的 url,但返回不同的值(整个页面,或只是一个特定的响应,具体取决于是否是 AJAX 请求)。
因此,您实际上可以从表单中获取 url,而无需在 Javascript 中对其进行编码。这使您可以编写更易于维护的脚本,甚至可能会产生通用的表单处理方法,您可以将其重用于要使用 Ajax 发布的所有表单。
使用 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;
}
}
?>
由于您的
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; ?>
用户点击您的提交按钮后,页面将显示您的“谢谢”消息。
此外,由于我不知道代码所在页面的名称,因此我插入了一个超级全局变量,该变量将插入当前执行脚本的文件名,相对于文档根目录。因此,该页面将自行提交。
在 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 '您的成功消息'; } 其他 { 回显 “你的失败消息”;
返回并打印当前页面上另一页的内容。
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'];
?>
结果:
你必须使用AJAX。但这需要 JavaScript 在用户 Brwoser 处处于活动状态。 在我看来,这是无需重定向的唯一方法。
假设您无法控制要发布到的页面,这只是一个可能对您有用的想法:
创建您自己的“代理 php 目标”以进行操作,然后回复您想要的消息。然后可以使用 http_post_data 转发发布到 php 文件的数据(使用预编码数据执行 POST 请求)。您可能需要稍微解析一下。
英文版
似乎没有人解决这个问题没有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 {
}
?>
我很惊讶没有人提到这一点,因为已经过去 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
?>
您可以直接在文件中执行此操作,无需包含,但包含只会使代码变得更容易,并允许您使用要提交到的页面。
使用
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";
}