表单提交成功后如何在 div 中创建成功消息?
Posted
技术标签:
【中文标题】表单提交成功后如何在 div 中创建成功消息?【英文标题】:How to create a success message within a div upon successful form submission? 【发布时间】:2012-05-10 18:07:27 【问题描述】:以下表单每次在浏览器中启动页面时都会在逻辑上显示成功消息,但表单只有在提交成功后才会显示成功消息。
$editFormAction = $_SERVER['php_SELF'];
if (isset($_SERVER['QUERY_STRING']))
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
$message = "Record has been updated successfully.";
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1"))
$updateSQL = sprintf("UPDATE table SET name=%s, email=%s,
GetSQLValueString($_POST['name'], "text"),
GetSQLValueString($_POST['email'], "text"),
mysql_select_db($database_test, $test);
$Result1 = mysql_query($updateSQL, $test) or die(mysql_error());
$updateGoTo = "test.php";
if (isset($_SERVER['QUERY_STRING']))
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
header(sprintf("Location: %s", $updateGoTo));
表单的html部分如下:
<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
<table align="center" class="test_table">
<tr valign="baseline">
<td align="right" nowrap="nowrap" class="table-title">Name:</td>
<td class="table-content"><input type="text" name="name" value="<?php echo htmlentities($row_user['name'], ENT_COMPAT, 'utf-8'); ?>" size="32" /></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap="nowrap" class="table-title">E-mail:</td>
<td class="table-content"><input type="text" name="email" value="<?php echo htmlentities($row_user['email'], ENT_COMPAT, 'utf-8'); ?>" size="32" /></td>
</tr>
</table>
<input type="hidden" name="MM_update" value="form1" />
<input type="hidden" name="id" value="<?php echo $row_user['id']; ?>" />
<input class="submit" name="UpdateRecord" type="submit" id="UpdateRecord" value="Update Record" /></form>
这是成功消息在页面 div 中的显示方式:
<p> <?php
if (!empty($message))
echo "<div class=\"successmessage\">" . $message . "</div>";
?></p>
我在这里做错了什么?
【问题讨论】:
这个div和form在同一个页面吗? 是的,成功消息 div 在同一页面上。 【参考方案1】:我创建了两个函数来显示消息
function addMessageStack($message,$type='success')
$_SESSION['sess_MessageStack'][] = array($type,$message);
function showMessageStack()
$str = '';
if(count($_SESSION['sess_MessageStack']) > 0)
for($i=0;$i<count($_SESSION['sess_MessageStack']);$i++)
$str.="<div class='".$_SESSION['sess_MessageStack'][$i][0]."Message left'>".$_SESSION['sess_MessageStack'][$i][1]."</div>";
unset($_SESSION['sess_MessageStack']);
return $str;
在您的示例中使用如下
addMessageStack('Record has been updated successfully.');
header(sprintf("Location: %s", $updateGoTo));
exit;
对于显示消息,确保有 session_start();
<?php echo showMessageStack(); ?>
它只会在表单提交后显示您的消息
【讨论】:
好吧,我无法理解为什么要为单个表单操作引起的单个消息创建一个数组?建议的语法不会在成功提交表单时打印任何输出。此外,这样就不可能在页面的任何地方调用和打印 div。还是谢谢。 它的一般功能对于在 time 显示 multipal 消息很有用,在您的情况下删除数组没有问题并将 session_start() 放在顶部并放置 exit();重定向网址后,我编辑我的答案 现在成功消息在表单提交后显示,但它不能显示在预定义和样式化的 div 中,因为没有可用的选项来用现有代码包装所需的 div。我尝试用showMessageStack();
以下列方式包装div successmessage
<?php echo "<div class=\"successmessage\">" .showMessageStack(). "</div>"; ?>
但页面始终显示包装的div,尽管成功消息在表单提交后正确显示在该div 上。谢谢。
你可以通过在 showMessageStack() 中自定义来添加你的代码。你也可以 addMessageStack('your message','error');所以它会生成类似“错误”、“信息”、“成功”的类型【参考方案2】:
hRaval,非常感谢您从一开始和最后的提示就提供了宝贵的指导。
addMessageStack 的以下补充终于解决了这个问题。
$message = "Record Has Been Updated Successfully";
addMessageStack("<div class=\"successmessage\">" . $message . "</div>");
亲切的问候,
【讨论】:
感谢您对您的问题 +1 :)【参考方案3】:在执行查询并计算行数后,将成功消息存储在选定的变量或数组或会话中,而不需要编写冗长的函数,可以更简单地完成。
// 最简单的方法
mysql_select_db($database_test, $test);
$Result1 = mysql_query($updateSQL, $test) or die(mysql_error());
$Row_Count = mysql_num_rows($Result1);
if ($Row_Count > 0)
$successmessage = "Edited Successfully";
或
// 如果您想将所有其他成功消息(包括此消息)存储在一个数组中。
mysql_select_db($database_test, $test);
$Result1 = mysql_query($updateSQL, $test) or die(mysql_error());
$Row_Count = mysql_num_rows($Result1);
if ($Row_Count > 0)
$successmessage[] = "Edited Successfully";
或
//如果要在成功执行后定义一个header位置。
mysql_select_db($database_test, $test);
$Result1 = mysql_query($updateSQL, $test) or die(mysql_error());
$Row_Count = mysql_num_rows($Result1);
if ($Row_Count > 0)
$_SESSION['successmessage'] = "Edited Successfully";
然后在上述所有情况下,您可以通过检查变量是否已设置或不为空,在您想要的文档中的任何位置调用成功消息。我在下面给出一个例子,说明上面解释的最简单的方法。
if(isset($successmessage))
echo "<div id=\"MyDesiredDiv\">" .$successmessage. "</div>";
或
if(!empty($successmessage))
echo "<div id=\"MyDesiredDiv\">" .$successmessage. "</div>";
重要提示:MySql 早就被弃用了。尝试使用 MySqli 或 PDO 并按照上述方法。
【讨论】:
以上是关于表单提交成功后如何在 div 中创建成功消息?的主要内容,如果未能解决你的问题,请参考以下文章