Everything works...Unless they hit the "back" button...
| From: | Jack Jackson | Date: | Wed, 03 Aug 2005 11:53:39 +0000 |
| Subject: | Everything works...Unless they hit the "back" button... | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-219888@lists.php.net to get a copy of this message | ||
Hi all. This has been an interesting week.
Now the form works, and I am able to error check, if no errors look into user answer table and delete from that all q_ids matching the ones just picked, insert this page of question/answer info (q_id/a_id) into the user answer db, and if successful advance the category by 1 and get more questions. It works.
I must have a logic error though because for some reason even though I say to delete matching q_ids and reinsert, then move on, if the user hits the back button, changes answers and hits submit again, the table does not update . . . and the category does not increment. We get stuck on this page of questions/answers forever.
What DOES happen after BACK is that the answers they select get passed back to error check (eg if they select a select box to nothing, error checking reenters its value into $message) and those values get passed back to the display page (eg $_POST[$qname] == $aid) because the "selected" answers change. It's just the db call and category advance which get stuck.
Any help will be greatly appreciated - Here's the code:
<?php
//Start the session
session_start();
//Error announcements
echo "POST:<BR />";
print_r($_POST);
echo "<br /><br />";
echo "required session:<BR />";
var_dump($_SESSION['required_fields']);
echo "<br />\$ cat:" . $cat . "<br />";
echo "\$message: ";
var_dump($message);
//error_reporting(E_ALL);
/* A script to retrieve from database questions and answers,
* create a multi-page HTML form, error check answers and
* submit them to the database on a per-user basis.
* August 2005
*/
//Some basic vars
if (!isset($cat)) { $cat = "1"; }
$error=0;
$SUCCESS=0;
if (!isset($message))
{
$message = array();
}
if (!isset($_SESSION['required_fields']))
{
$_SESSION['required_fields'] = array();
}
if(!sizeof($_POST))
{
include_once(QUESTIONS . 'q.inc');
}//error checking reset($_SESSION['required_fields']); foreach ($_SESSION['required_fields'] as $fieldname)
{
if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]))
{
$message[$fieldname]=1;
}
}//error checkif (!empty($message))
{ $cat=$_POST['cat'];
include_once(QUESTIONS . 'q.inc');
}
//No errors? Store what's been done so far
if ( ($_POST['action'] == 'process') && (!sizeof($message) ) )
{
foreach($_POST as $key=>$val)
{
//find key/val sets within posts which are both numeric
if(is_numeric($key) && is_numeric($val))
{
$nkey=$key;
//add keys to the qidlist
$qidlist[] .= $key;
//add these values ( q_id, a_id ) to sql statement
$qanda[] .= "('1' , '" . $nkey . "' , '" . $val . "')";
}
//find key/val sets within sub-arrays of $_POST which are numeric
if(is_array($val))
{
foreach ($val as $akey=>$aval)
{
//add these values ( q_id, a_id ) to sql statement
$qanda[] .= "('1' , '" . $key . "' , '" . $aval . "')";
var_dump($qanda);
}
}
}
$qidlist_sql="DELETE FROM $userAnswers WHERE q_id IN (" . (implode(",",$qidlist)) . ");";
$q_a_sql="INSERT INTO $userAnswers (u_id, q_id, a_id )
VALUES " . (implode(",",$qanda)) . ";";
mysql_query($qidlist_sql);
if($q_a_result = mysql_query($q_a_sql))
{
unset($_SESSION['required_fields']);
$cat = $_POST['cat']+1;
include_once(QUESTIONS . 'q.inc');
}
else
{
echo "<b>A fatal MySQL error occured</b>.\n
<br />Query: " . $q_a_sql . "<br />\nError: (" . mysql_error();
die;
}
}?>