Reputation: 719
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
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
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
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