如何在表单成功提交后在div中创建一个成功消息?

6
以下表单在浏览器逻辑上每次页面加载时都显示成功消息,但是应该只有在成功提交后才显示成功消息。
$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 和表单在同一页上吗? - user1231969
是的,成功消息 div 位于同一页上。 - Klanto Aguntuk
3个回答

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(); ?>

仅在表单提交后显示您的消息


好吧,我无法理解为什么针对单个表单操作引起的单个消息需要创建数组?建议的语法在成功提交表单后不会打印任何输出。此外,这种方式无法在页面上调用和打印div。无论如何,还是谢谢。 - Klanto Aguntuk
这是一个通用的函数,可以同时显示多个消息,在您的情况下,删除数组没有问题,并将session_start()放在顶部,在重定向URL之后放置exit(); 我编辑了我的答案。 - Hardik Raval
现在,表单提交后会显示成功消息,但无法在预定义和样式化的div中显示,因为没有可用的选项将所需的div与现有代码包装起来。我尝试以以下方式使用showMessageStack();包装successmessage div:<?php echo "<div class=\"successmessage\">" .showMessageStack(). "</div>"; ?>,但页面始终保持显示已包装的div,尽管成功消息在表单提交后正确地显示在该div上。谢谢。 - Klanto Aguntuk
你可以通过自定义showMessageStack()函数来添加你的代码。你也可以使用addMessageStack('你的信息','错误')来生成不同类型的信息,如“错误”,“信息”和“成功”。 - Hardik Raval

0

以下对addMessageStack的补充最终解决了这个问题。

$message = "Record Has Been Updated Successfully";
addMessageStack("<div class=\"successmessage\">" . $message . "</div>");

此致敬礼,


谢谢你对问题的支持,给你一个赞 :) - Hardik Raval

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"; 
}

// 如果您想将所有其他成功消息(包括此消息)存储在数组中。

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){
$_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,并遵循上述方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接