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>

私がここで間違っていることは何ですか?

4

3 に答える 3

5

メッセージを表示する2つの関数を作成しました

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

フォームの送信後にのみメッセージが表示されます

于 2012-05-01T05:34:36.410 に答える
0

hRaval さん、最初から最後のヒントまで貴重なガイドラインをありがとうございました。

addMessageStack への次の追加により、最終的に問題が解決されます。

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

敬具、

于 2012-05-01T15:37:19.450 に答える