如何在提交表单时刷新包含提交表单的页面,等待提交数据的结果并显示结果。
例如,我有一个带有表单的页面:
<form action="" method="post">
<input type="name" value="" name="name" placeholder="Your Name" />
<input type="button" name="submit" value="submit form "/>
</form>
处理表单的引擎是外部的,但在页面中需要:
require_once 'form_engine.php';
form_engine.php检查输入,
$success = "true";
$errorMessage = " ";
$name = $_POST['name'];
if ( $name == '') {
$errorMessage = 'Please enter your name';
$success = false;
}
else (if $success = true) {
// do something with the data
}
表单页面包含结果:
<form action="" method="post">
<input type="name" value="" name="name" placeholder="Your Name" />
<input type="button" name="submit" value="submit form "/>
</form>
<p><?php echo $errorMessage; ?></p>
表单提交错误后是否会显示错误消息?或者我是否必须使用会话来存储它?
答案 0 :(得分:4)
你需要这样的东西:
if (!isset($_POST['name']))
而不是
if ( $name == 'name')
<强>更新强>
试试这个,它应该给你一个想法:
<?php
$errorMessage = false;
if (isset($_POST['submit'])) {
if (!isset($_POST['name']) || $_POST['name']=='') {
$errorMessage = 'Please enter your name';
}
else {
// do something with the data
echo "Success!!";
}
}
?>
<form method="post">
<input type="name" value="" name="name" placeholder="Your Name" />
<input type="submit" name="submit" />
</form>
<p><?php if ($errorMessage) echo $errorMessage; ?></p>
注意:省略action
属性只会将表单提交到当前页面
注意2:这里的PHP很可能存储在另一个页面中。使用require()
与将代码直接放入页面相同。
答案 1 :(得分:3)
您可以在php端使用重定向:
header('Location: www.mysite.com/index.php');
答案 2 :(得分:2)
对于在呈现页面方面发生的确切过程,您似乎有些困惑,就像其中一些评论一样。您不需要使用会话来解决此问题。没有必要在页面请求之间存储任何服务器端,因为用户的浏览器会保留您需要的所有内容,至少在这种情况下如此。我的猜测是其他人带你提到一个外部引擎&#34;并认为该表格将提交到不同的网站/页面。
下面是一个显示典型表单请求循环的图表:
您不必这样做,因为编码与其他任何事情的个人偏好一样多,但通常人们会设计他们的表单以提交回生成它的相同URI - 正如您在示例中所做的那样,将action属性留空。通过这样做,只要您在表单中嵌入要传递回服务器端的所有内容 - 每次用户提交时 - 该信息将重新发送并以PHP格式提供。
显然,您需要警惕哪些信息可能构成敏感信息,因为如果您的请求受HTTPS / SSL保护,则此数据只能写入标记。您还应该过滤/转义任何用户输入,以防止将标记注入您的站点。您可以使用htmlentities来防止出现许多问题,但这可能会导致问题,具体取决于您尝试从用户捕获的值。因为您使用的是双引号HTML属性(正确的方法;)我没有设置ENT_QUOTES
选项。
因此,在上面的循环中,用户将首次显示表单,并且在任何后续提交之后,这意味着每次PHP注意到有错误时,您只需将消息添加到页面流中。这种系统的技巧就是在表单完全完成后你会做什么。为了摆脱循环,大多数人将使用标题位置调用:
<?php
require_once 'form_engine.php';
$name = !empty($_POST['name']) ? trim($_POST['name']) : '';
$name = htmlentities($name);
if ( $success ) {
header('location: next-step.php');
exit;
}
?>
<form action="" method="post">
<input type="name" value="<?php echo $name; ?>" name="name" placeholder="Your Name" />
<input type="button" name="submit" value="submit form "/>
</form>
<?php
if ( $errorMessage ) {
echo "<p>$errorMessage</p>";
}
?>
你应该根据我上面的评论和Shekhar Joshi的回答纠正你的form_engine.php
,尽管我会将标题代码保留在你的引擎逻辑之外,并将该决定留给需要的代码引擎 - 如上所述。
答案 3 :(得分:1)
$success = true;
$errorMessage = " ";
$name = $_POST['name'];
if(isset($_POST['name'])) {
if ( $_POST['name'] == '') {
$errorMessage = 'Please enter your name';
$success = false;
header('Location: www.something.com/some.php');
}
else if ($success == true) {
// do something with the data
}
}