以下表单在浏览器中每次启动页面时都会显示成功消息,但表单只有在成功提交后才会显示成功消息。
$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>
我在这里做错了什么?
答案 0 :(得分:5)
我创建了两个显示消息的功能
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(); ?>
仅在表单提交后显示您的消息
答案 1 :(得分:0)
hRaval,非常感谢您从一开始和最后的提示中获得的宝贵指导。
addMessageStack的以下添加最终解决了这个问题。
$message = "Record Has Been Updated Successfully";
addMessageStack("<div class=\"successmessage\">" . $message . "</div>");
亲切的问候,
答案 2 :(得分:0)
可以通过在执行查询并在不编写冗长函数的情况下对行进行计数之后将成功消息存储在选定的变量,数组或会话中来简化操作。
//最简单的方法
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";
}
OR
//如果要将所有其他成功消息(包括此成功消息)存储在数组中。
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";
}
OR
//如果要在成功执行后定义标题位置。
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>";
}
OR
if(!empty($successmessage)){
echo "<div id=\"MyDesiredDiv\">" .$successmessage. "</div>";
}
重要说明:不建议使用MySql。尝试使用MySqli或 PDO并遵循上述方法。