PHP 表单 - 提交时停留在同一页面上
Posted
技术标签:
【中文标题】PHP 表单 - 提交时停留在同一页面上【英文标题】:PHP form - on submit stay on same page 【发布时间】:2013-06-24 09:48:23 【问题描述】:我有一个 php 表单,它位于文件 contact.html
。
表单从文件processForm.php
处理。
当用户填写表单并点击提交时,
processForm.php
发送电子邮件并将用户定向到 - processForm.php
在该页面上显示一条消息“成功!您的消息已发送。”
我对 PHP 了解不多,但我知道需要这样做的操作是:
// Die with a success message
die("<span class='success'>Success! Your message has been sent.</span>");
如何将消息保留在表单 div 中而不重定向到
processForm.php
页面?
如果需要,我可以发布整个processForm.php
,但它很长。
【问题讨论】:
ajax 或发布到同一页面。我更喜欢发布到同一页面。header('contact.html?result=success');
phptutorialforbeginners.com/2013/01/…
与以下类似的问题(有一些调整):[php,提交后使用同一页面的表单][1] [1]:***.com/questions/15130493/…
在contact.html或processForm.php中我应该把标题放在哪里?
【参考方案1】:
有两种方法:
提交表单到同一页面:使用PHP脚本处理提交的表单。 (这可以通过将表单action
设置为当前页面 URL 来完成。)
if(isset($_POST['submit']))
// Enter the code you want to execute after the form has been submitted
// Display Success or Failure message (if any)
else
// Display the Form and the Submit Button
使用 AJAX 表单提交,这对于初学者来说比方法 #1 稍微困难一些。
【讨论】:
是的,至少部分有效。您不会停留在同一个页面上——因为结果显示在一个新页面中——但它会好得多,因为你必须返回到第一页,从而避免堆积浏览器历史中相同 PHP 的副本。 @Apostolos - 如果action
(在 <form>
标记内设置为当前页面的 URL(或简称为 #
),则重新加载同一页面。(不是新窗口。 )【参考方案2】:
你必须使用类似这样的代码:
echo "<div id='divwithform'>";
if(isset($_POST['submit'])) // if form was submitted (if you came here with form data)
echo "Success";
else // if form was not submitted (if you came here without form data)
echo "<form> ... </form>";
echo "</div>";
像这样的带有if
的代码对于许多页面来说是典型的,但是这非常简化。
通常,您必须在第一个“if”中验证一些数据(检查表单字段是否为空等)。
请访问www.thenewboston.org 或phpacademy.org。有很不错的PHP视频教程,包括表格。
【讨论】:
【参考方案3】:保持在同一页面上的最佳方式是发布到同一页面:
<form method="post" action="<?=$_SERVER['PHP_SELF'];?>">
【讨论】:
需要注意的是这个方法没有通过W3 Validator的HTML验证检查,因为它说“Bad value for attribute action on element form: Must be non-empty." 虽然它确实有效,但 HTML 打印是这样的,这会导致错误:<form name="frmContactUs" action="" method="post">
html-form-guide.com/php-form/php-form-action-self.html有一个代码示例
这当然可以理解,而且它不会改变任何东西,因为它与上面已经提到的 action="" 相同。
当心,你应该使用 htmlspecialchars($_SERVER['PHP_SELF'])。否则如果有人把JS放在一个url中就会受到xss攻击。
这与将其留空完全相同,但增加了 XSS 安全风险。坏主意。【参考方案4】:
为了在提交时停留在同一页面上,您可以将操作留空 (action=""
) 到表单标记中,或者完全不使用它。
对于消息,创建一个变量 ($message = "Success! You entered: ".$input;"
),然后在页面中您希望消息出现的位置以 <?php echo $message; ?>
回显该变量。
像这样:
<?php
$message = "";
if(isset($_POST['SubmitButton'])) //check if form was submitted
$input = $_POST['inputText']; //get input text
$message = "Success! You entered: ".$input;
?>
<html>
<body>
<form action="" method="post">
<?php echo $message; ?>
<input type="text" name="inputText"/>
<input type="submit" name="SubmitButton"/>
</form>
</body>
</html>
【讨论】:
您检查过您的代码吗? 1)在第一次运行时,在提交之前,你会得到“未定义的变量消息”(当然!) 2)然后在每次提交时,都会加载一个新的表单来显示消息,并且它们都建立在浏览器的历史记录中!为什么你们在发布代码之前不检查代码??? @Apostolos 那么我将如何正确地使用这个例子呢?需要改变什么? 我不记得了。大约一年前我就不再使用 PHP,而且我目前没有可用的 Apachi 服务器进行测试。对不起。但据我记得,我设法使用“include”留在同一页面(即 PHP 文件)... 在echo $message;
周围添加if(isset($message))...
以确保不再出现“注意:未定义变量消息”。
using #
instead 怎么样?利弊?【参考方案5】:
您可以在表单操作中使用#
操作:
<?php
if(isset($_POST['SubmitButton'])) // Check if form was submitted
$input = $_POST['inputText']; // Get input text
$message = "Success! You entered: " . $input;
?>
<html>
<body>
<form action="#" method="post">
<?php echo $message; ?>
<input type="text" name="inputText"/>
<input type="submit" name="SubmitButton"/>
</form>
</body>
</html>
【讨论】:
【参考方案6】:试试这个...对我有用
<form action="submit.php" method="post">
<input type="text" name="input">
<input type="submit">
</form>
------提交.php ------
<?php header("Location: ../index.php"); ?>
【讨论】:
这将刷新页面。【参考方案7】:朋友。使用这种方式,不会有“未定义的变量消息”,并且可以正常工作。
<?php
if(isset($_POST['SubmitButton']))
$price = $_POST["price"];
$qty = $_POST["qty"];
$message = $price*$qty;
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="#" method="post">
<input type="number" name="price"> <br>
<input type="number" name="qty"><br>
<input type="submit" name="SubmitButton">
</form>
<?php echo "The Answer is" .$message; ?>
</body>
</html>
【讨论】:
【参考方案8】:我希望页面在出现错误时在提交后保留...所以我希望重新加载页面:
($_SERVER["PHP_SELF"])
虽然我从单独的文件中包含了脚本,例如
include_once "test.php";
我也在某处读到过
if(isset($_POST['submit']))
是一种初学者旧式的表单发布方式,并且
if ($_SERVER['REQUEST_METHOD'] == 'POST')
应该使用(不是我的话,在某处阅读)
【讨论】:
【参考方案9】:同一页面上的表单操作可以查看以下示例
<form action="" method="post">
<table border="1px">
<tr><td>Name: <input type="text" name="user_name" ></td></tr>
<tr><td align="right"> <input type="submit" value="submit" name="btn">
</td></tr>
</table>
</form>
<?php
if(isset($_POST['btn']))
$name=$_POST['user_name'];
echo 'Welcome '. $name;
?>
【讨论】:
【参考方案10】:简单的只是忽略 action 属性并在 php 中使用 !empty(非空)。
<form method="post">
<input type="name" name="name">
<input type="submit">
</form>
<?PHP
if(!empty($_POST['name']))
echo $_POST['name'];
?>
【讨论】:
以上是关于PHP 表单 - 提交时停留在同一页面上的主要内容,如果未能解决你的问题,请参考以下文章