RE: [PHP] EXAMPLE: Redirect upon execution of script...
| From: | Jason G. | Date: | Mon, 26 Nov 2001 00:58:26 +0000 |
| Subject: | RE: [PHP] EXAMPLE: Redirect upon execution of script... | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-75689@lists.php.net to get a copy of this message | ||
Doing this is very simple, although a pain in the rear...
For those of you that have any confusion on this issue, pay very close attention to this script. It effectivly demonstrates how to deal with a form, and display intellegent errors WITHOUT any of that "...Please click your browsers back button..." crap.
Have a hidden field in your form - ACTION=SAVE
This will tell your script when to look for input.
Write your script like this
****************************************************
<?
//Make sure your ID is of int type.
//If ID > 0 then you are in UPDATE mode. if ID == 0 then you are in INSERT MODE
$ID = intval($ID);
//The main reason that I use a switch instead of an IF is that you can break out at any time.
switch($ACTION) case 'SAVE':
{
//Validate all fields here
if(empty($field1)) $oErr->field1 = 'Required';
if(empty($field2)) $oErr->field2 = 'Required';
//If the variable $oErr is set, then break
if(isset($oErr)) break;
//We are okay, add slashes to all fields...
$field1 = addslashes($field1);
$field2 = addslashes($field2);
if($ID)
{ //UPDATE MODE
$sQuery = "UPDATE table SET field1='field1', field2='field2 WHERE id=$ID";
//Do the UPDATE query here (however you do that)
}
else
{ //INSERT MODE
$sQuery = "INSERT INTO table VALUES ('field1', 'field2');
//Do the INSERT query here (however you do that)
//Grab the newly inserted ID
$ID = mysql_insery_id();
}
//We have success, Do the redirect here
header("Location: http://www.yourdomain.com/nextscript.php?ID=$ID");
exit;
}
?>
<html>
<body>
<form name="frmInput" action="<?= $PHP_SELF ?>" method="post">
<input type="hidden" name="ACTION" value="SAVE">
<input type="hidden" name="ID" value="<?= $ID ?>">
Field 1: <? if(isset($oErr->field1)) echo($oErr->field1); ?><br>
<input type="text" name="field1" value="<?= addslashes($field1) ?>">
Field 2: <? if(isset($oErr->field2)) echo($oErr->field2); ?><br>
<input type="text" name="field2" value="<?= addslashes($field2) ?>">
</form></body> </html> ****************************************************** At 06:24 PM 11/25/2001 +0100, Daniel Alsén wrote:
2. User fills in a form, clicks "submit" which calls the same script, passing itself the values. Depending on the value passed by the submit button, the script processes the information (INSERT or UPDATE) and sets $done = 1 if successful. The second scenario is easier to handle. Call the same script, passing it $done, and depending on whether or not $done is set you redirect. Juli Meloni has done an excellent tutorial on just this at http://www.thickbook.com. look in the tutorials for something like "Form With Error Message". You just have to adapt the logic to suit your needs. The second scenario is correct. I am actually already using the method in Melonis tutorial for error messages. But i can´t do a redirection that way since $done isn´t set until after the db INSERT. My if-statement for the header is at the top of the page (wich is the only place i can put it) and will never know if $done is set or not below. - Daniel -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net For additional commands, e-mail: php-general-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net