Insert with PHP Save Record Twice

MySql 4.1.15 & 5.0 PHP 4.4.4 & 5.1.6
I have a simple self-contained form (posting to itself). When I insert a new record in the database, it is saving it twice.

I have set up the same database from scratch on two different servers with two different versions of MySQL, and had the same results. I have written this code several different ways, as well as separating the HTML and the PHP processing into two separate files, all still with the same results. I have taken the code down to bare bones (4 fields with no validation, etc.) and I still have the same results.

This doesn’t seem to be a known bug, and with several web searches on the subject, I have run into only a few other people with the same problem. So far, no resolves.

Here is the code in a nut shell:

<?PHP if ($_POST['process'] == 1) { Place values from the POST variables back to regular variables and perform some simple validation Create error messages for fields that do not validate Set error variable to true if any fields do not validate if all fields validate (error variable is false) { if (!$connect = mysql_connect($HOST, $USER, $PASSWORD)) { echo ("Error: Did not connect to database!"); } else { mysql_select_db($DBName) or die ('Unable to select database!'); $SaveIt = "INSERT INTO CheckList (NameFirst, NameMid, NameLast) VALUES ('$NameFirst', '$NameMid', '$NameLast')"; if(mysql_query($SaveIt)) { echo('Your Data Has Been Saved '); clear($_POST); } else { echo(' There was an error in processing the data '); } } } else // nothing has been submitted yet { set variables for form } }?> Print top of page <? Print any error messages if fields did not validate ?> // This form, of course input fields, ending with:

Another way I have done this with the same results:

mysql_select_db($DBName) or die (‘Unable to select database!’); $xQuery = “INSERT INTO CheckList set NameFirst = ‘$NameFirst’, NameMid = ‘$NameMid’, NameLast = ‘$NameLast’, Position = ‘$Position’”; $SaveIt = mysql_query($xQuery); if(!$SaveIt) { echo(‘There was an error in processing the data ‘); } else { echo(’ Your Data Has Been Saved’); clear($_POST); }

I’m really puzzled - especially since I have similar forms that work fine. I’m no PHP/MySQL guru, by any means. I have spent hours working on this code, and have pretty much come to conclusion that the error is not in the code - there must be something in how I set up the database.

The structure of the database is:

With the following indexes:

Enable MySQL log and see which queries your application actually send and if it is single connection or different connections.

Also looking in web server logs may help - may be for some reason you get 2 web requests instead of one.

After removing the auto-increment from the ID field, and moving the primary key to a different field, I was able to save two entries with no duplicates.
I then re-instigated the auto-increment on the ID field, and moved the primary key back to that field.
After doing the above, the problem went away.
I still have another database that I have not altered. I will do a more careful study of the problem with that database, and see if I can nail it down. When I do, I will post the results here. May be a number of days, though, as I am quite busy.

Thanks for your comments, Peter. I didn’t think of checking logs.

hi, it seems to me that you just executed this query twice.

$SaveIt = mysql_query($xQuery);



Certainly appears so, doesn’t it! eek:
Not even sure what I was doing there.
However, the code block above was still saving twice, and the problem went away when I made a change to the database.
I still have the original code and the original database set up on one server. I’ve been wanting to go back and check the whole thing out, but haven’t had the time.

One of these days, I will, and post a followup.

Thanks for the observation, Hui!

No Sweat! I had that exact problem before. That’s why I could spot it instantly. cool:



Hi RationalRabbit.

Did you ever find out more about the problem?
It seems like I have the same problem.

Unfortunately, no. And never had the problem again. But I still have the code and will take a look at it. Unfortunately, that may take a few days to get to, though. If you find the answer, would certainly appreciate knowing about it. If not, and I have not replied to this by the 28th, feel free to prompt me.

There was something odd about this. I still don’t think it was in the code, but I’ll need to go back and refresh my memory.