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

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

问题描述:

The following form displays the success message every time on page launch in the browser logically but the form should display the success message only after it is submitted successfully.

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

The html part of the form is as following:

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

This is how the success message is displayed within a div on the page:

<p> <?php 
  if (!empty($message)) {
  echo "<div class=\"successmessage\">" . $message . "</div>";
  } 
  ?></p>

What I'm doing wrong here?

I have created two function to show message

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

In your example use like below

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

For dispaly message ,make sure there is session_start();

<?php echo showMessageStack(); ?>

It will display your message after form submit only

hRaval, thanks a lot for your valued guideline from the very beginning and final hint.

The following addition to the addMessageStack solves the problem finally.

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

Kind regards,

It can be done more simply by storing the success message in a chosen variable or array or session after executing the query and counting the row without writing a lengthy function.

// Simplest method

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

OR

// If you want to store all other success messages including this one in an array.

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

OR

// If you want to define a header location after successful execution.

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

Then in all the cases above you can call the success message anywhere in your document you want by checking if the variable is set or not empty. I'm giving an example below for the simplest method explained above.

if(isset($successmessage)){
echo "<div id=\"MyDesiredDiv\">" .$successmessage. "</div>";
}

OR

if(!empty($successmessage)){
echo "<div id=\"MyDesiredDiv\">" .$successmessage. "</div>";
}

Important Note: MySql is deprecated long back. Try to use MySqli or PDO and follow the above method.