Everything works...Unless they hit the "back" button...

From: 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 check
if (!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;
                    }
      }
?>

« previous php.general (#219888) next »