Klanto Aguntuk
Klanto Aguntuk

Reputation: 719

How to create a success message within a div upon successful form submission?

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?

Upvotes: 6

Views: 4850

Answers (3)

Klanto Aguntuk
Klanto Aguntuk

Reputation: 719

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.

Upvotes: 0

Klanto Aguntuk
Klanto Aguntuk

Reputation: 719

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,

Upvotes: 0

Hardik Raval
Hardik Raval

Reputation: 1940

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

Upvotes: 5

Related Questions