2012-05-01 58 views
7

以下表格每次在逻辑上在浏览器中启动页面时都会显示成功消息,但只有在成功提交后,表单才会显示成功消息。如何在成功提交表单时在div内创建成功消息?

$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

是这个div的同一网页形式? – anuragsn7

+0

是的成功消息div在同一页上。 –

回答

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; 

对于dispaly消息,确保有在session_start();

<?php echo showMessageStack(); ?> 

它会显示你的邮件表单只提交

+0

那么,我无法了解为什么一个数组应该由单个表单动作引起的单个消息创建?建议的语法不会在成功的表单提交上打印任何输出。此外,这种方式无法在页面上的任何位置调用和打印div。不管怎么说,还是要谢谢你。 –

+0

它的一般功能有用的时间显示multipal消息,在你的情况下,删除数组没有问题,并将session_start()放在顶部,并把退出();重定向url后我编辑我的答案 –

+0

现在成功的消息显示在表单提交后,但它不能显示在预定义和样式的div内,因为没有可用的选项来包装所需的div与现有的代码。我尝试用'showMessageStack();'将div'successmessage'封装为'<?php echo“

" .showMessageStack(). "
”; ?>'但是页面始终保持显示包装的div,尽管在提交表单后正确显示了该div的成功信息。谢谢。 –

0

hRaval后,非常感谢从一开始和最后提示您的宝贵指导。

下面加入addMessageStack最终解决了这个问题。

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

亲切的问候,

+0

谢谢+1你的问题:) –