2012-05-01 100 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你的問題:) –