2012-05-01 21 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

私はのsession_startが(そこにあることを確認し、dispalyメッセージについて

addMessageStack('Record has been updated successfully.');  
header(sprintf("Location: %s", $updateGoTo)); 
exit; 

以下のように使用し、あなたの例では、メッセージ

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

を表示するために2つの関数を作成しています)。フォームのみ

+0

まあ、単一のフォームアクションによって引き起こされる単一のメッセージに対して配列を作成する理由を知ることができませんでしたか?提案された構文は、フォームの送信が成功した場合は出力を出力しません。さらに、この方法では、ページの任意の場所にdivを呼び出して印刷することはできません。とにかくありがとう。 –

+0

それは一般的に便利な機能です。マルチプルメッセージを表示するには、あなたのケースで配列を削除しても問題はなく、session_start()を一番上に置き、exit()を実行します。リダイレクトURLの後に私の回答を編集 –

+0

成功メッセージはフォーム提出の後に表示されますが、既存のコードで目的のdivをラップするオプションがないので、定義済みのスタイル付きdiv内に表示することはできません。私は次のように 'showMessageStack();'を使ってdivの 'successmessage'をラップしようとしました' <?php echo "

" .showMessageStack(). "
"; ?> 'しかし、フォームの送信後に成功メッセージがそのdivに正しく表示されているにもかかわらず、ページは常にラップされたdivを表示し続けます。ありがとう。 –

0

hRaval提出後

<?php echo showMessageStack(); ?> 

それは非常に最初と最後のヒントから、あなたの大切な指針のためのおかげで、多くのことをあなたのメッセージを表示します。

次のaddMessageStackへの追加は、問題を最終的に解決します。

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

敬具、

+0

あなたの質問に+1ありがとうございます:) –

関連する問題